Logic

関数リファレンス

F0000016_ファイルダイアログを開き、1つのExcelファイルを選択させる

私がExcelVBAを業務に使用し始めた頃、ExcelVBA(マクロ)の学習を進めていく中で最初の難所は「別ブックの操作」でした。当時、マクロの記録では別ブックを開きそのまま操作を進めるという処理が記録されませんでした。そのため「Workbooks.Open」へたどり着くまで単一のブックしかマクロで扱うことができないと誤認していました。この「Workbooks.Open」はブックのパスを指定してブックを開くことができます。ここで紹介する関数では、ファイルダイアログを表示しマクロの実行者が選択したファイルの絶対パスを取得することができます。
関数リファレンス

F0000015_マクロ実行者のダウンロードパスを取得する

ExcelVBA(マクロ)の出力結果の保存先をダウンロードフォルダに設定するとどこかからダウンロードされたような演出をすることができます。また、あなたの所属する会社の設定によってはダウンロードフォルダの保存期限が設定されており、一定期間アクセスのないファイルが自動削除されるようになっているかもしれません。また、デスクトップが散らかっており、単純な消去法として保存先をダウンロードフォルダにした方が都合がいい場合もあるかと思います。この関数では、マクロ実行者のダウンロードフォルダのパスを取得できます。
関数リファレンス

F0000014_マクロ実行者のスタートアップパスを取得する

スタートアップフォルダに実行ファイル(.vbs等)を格納しておくとPCが起動したときに自動的に実行されます。ExcelVBA(マクロ)では、テキストファイルを加工して、任意のファイル名で任意の場所に保存ができます。保存先をスタートアップフォルダ・ファイル名を「~.vbs」で保存すれば、PC起動時に自動実行される実行ファイルをExcelVBAで作成し保存することができます。この関数では、マクロ実行者のスタートアップパスを取得できます。
関数リファレンス

F0000013_配列をRangeのキーに指定できる文字列に変換する

ExcelVBA(マクロ)を始める方の中で、Excelのセルや関数について全く知らない状態で始めた方というのは少数派だと思います。そのため、使い慣れたExcel上の表現をExcelVBA上でも使えると便利ですし、可読性もあがると私は考えています。Rangeオブジェクトを使って特定のセルや範囲を指定するとき「A9」や「B5:C10」のような文字列(Rangeのキー)を使用することができます。この関数では、配列のサイズにあったRangeのキーを取得できます。これは配列に格納されたデータを指定の範囲に貼り付けるという動作をするときに便利です。
関数リファレンス

F0000011_配列の次元数を取得する

ExcelVBA(マクロ)で業務の自動化ツールを作成する場合、配列の次元数は1~2次元あれば十分かと思います。そのため当サイトの関数リファレンスで紹介する関数も最大2次元配列までの処理を想定したものになっています。関数へ渡される配列の次元数の判定にこの関数を使用しています。最も他の関数から参照されることが多い関数です。
関数リファレンス

F0000010_配列が初期化されているか調べる

ExcelVBA(マクロ)で標準で使用できる関数の中に配列が初期化されているかを調べる関数はありません(あったらすみません、私は見たことがありません:2024/08/13)。関数リファレンスでは様々な用途へ利用できる関数を紹介していますが、中には返値として配列を返すものがあります。しかし、関数は常に関数が想定する場面で呼び出されるとは限らず、関数内で想定しない動きがあった場合、未定義の配列を返します(仕様により異なる場合もあります)。呼び出し元としては、意図したデータが格納された配列が返ってきたのか、未定義の配列が返ってきたのか、1行で判定をしたいところです。そんな時このページで紹介する関数で判定ができます。
関数リファレンス

F0000009_指定した名称のワークシートが存在するか調べる

WorkSheet(ワークシート)オブジェクトには「Exists」メソッドが存在しません(あったらすみません。私は見たことがありません:2024/08/09)。ExcelVBA(マクロ)でワークシートを新規作成し、名称を変更をするとき、既に使用されている名称に設定しようとするとエラーが発生します。請求年月や、拠点名などの組み合わせでシート名を設定しようとしても、ユーザーが同拠点・同請求年月の処理を再実行しようとするなんてこともあります。この時、ワークシートを名称で存在判定できるこの関数を利用します。
関数リファレンス

F0000008_ブックの参照設定の名称をすべて取得する

ExcelVBA(マクロ)の開発をしていると参照設定の名称をコピペしたいという時があります。参照設定はブック単位で保存されるので、なにか自動化ツールを作成したときに参照設定を使用しており、誰かにそのExcelファイルを渡す場合、渡されたユーザーさんは参照設定の有無を気にせずマクロを使用できます。しかし、開発においては作成した関数によっては前提となる参照設定があり、その関数をモジュールごと別のブックへ移動させても参照設定は引き継がれないため、エラーが発生します。自分⇒自分の移動なら気を付ければなんとかなりますが、グループで開発する場合、これは深刻な問題です。そこで関数の冒頭にコメントで参照設定について記述をするわけですが、参照設定の文字列(名称や場所)はコピペができません。前置きが長くなりましたが、このページで紹介する関数を実行するとブックに設定されているすべての参照設定の名称を書き出すことができます。・・・しかし、当サイトの関数リファレンスで紹介している関数群は参照設定不要で使えるというコンセプトがあるため、この関数の出番がありません。
関数リファレンス

F0000007_シート内の指定した表を配列で取得する

ExcelVBA(マクロ)を初めてのプログラム言語に選んだ場合、多くの方がまずはブックを開く、シート名称を変更する、セルに数式を入力するといったExcelの基本操作を自動化することから覚えると思います。しかし、データ処理をすべてセル上で実施していると大量の顧客データや請求データを扱う場合、実行速度にストレスを感じるようになります。ExcelVBAでは、高級なプログラミング言語と同様に配列を使用することができ、いったんデータはすべて配列に格納し、計算・加工の工程は配列上で行い、結果をシートに書き出すという処理の流れとするだけで驚くほど実行速度が改善されます。前置きが長くなりましたが、シート上にデータベースよろしく配置されたデータを配列へ格納する関数を作成しました。長年のカスタマイズを経て、なるべく汎用的に使えるようにできたつもりです。
関数リファレンス

F0000006_セル指定に使うアルファベットと数字を相互に変換する

ExcelVBA(マクロ)が高級なプログラミング言語と違う点のひとつは、最初からシートとセルを持っていることです。そのため自動化の初歩では、ブックを新しく開いたり、シートをコピーしたり、セルを操作したりという処理を行う方が多いと思います。その中でセルの範囲を指定したいとき、「ws.Range("A2:B4").value」のようにExcelでセル範囲を示す文字列をRangeに渡して指定できるのが便利です。処理するデータの個数に応じて範囲が可変になる場合、数値をアルファベットへ変換できると範囲指定の文字列生成が楽になります。セルの操作方法は他にもいくつかあり数値のままでも範囲指定はできます。状況に応じて使い分けましょう。
スポンサーリンク