アスパLab

関数リファレンス

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

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

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

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

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

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

F0000005_配列をHTMLのscriptタグに埋め込み可能なJSON形式のデータにして返す

「.html」ファイルは、インターネット上のWebサイトで使われるテキストの形式(もしくは拡張子)という認識が一般にあると思いますが、ブラウザで閲覧することが可能なテキスト形式であると考えると、例えば、組織内の共有フォルダへHTMLファイルを配置し、ブラウザにお気に入り登録してもらうと簡易的なポータルサイトのようなものとして運用することもできます。会社への申請が不要なものですべて作ってしまうExcel職人ならではの発想ですが、私の経験上、これは結構ウケが良いです。前置きが長くなりましたが、コンテンツを用意してHTMLファイルとして公開してもコンテンツの更新を手動で行うのは大変です。やはり、ExcelVBA(マクロ)を使用してコンテンツの自動更新がしたいと思い、この関数が生まれました。いずれ紹介するFTP系関数と合わせるとWebサイトの更新も使えます。関数リファレンスの根幹を成す関数でもあります。
関数リファレンス

F0000004_指定ミリ秒数マクロの動作を停止する

マクロの動作中に処理を中断したい場合はいくつかあると思います。開いたファイルが正しいかどうかを実行者に判断させてから次の工程へ進む、フォルダ作成やファイルの保存が完了するのを待ってから次の操作を実行する・・など。この関数は、主に、スクレイピング(Webシステム等の自動操作)などでサーバーからの応答を待つときに使用します。もちろんそれ以外の停止動作としても使えますが、解決したい事象にあう方法を選択しましょう。
関数リファレンス

F0000003_マクロ実行者のデスクトップパスを取得する

ExcelVBA(マクロ)でなにかの処理を自動化したとき、ほとんどの場合、出力先はExcelのシートになるかと思います。しかし、ExcelVBAは単なるExcelの処理自動化の手段にとどまらず、様々な関数を使用することで、高級なプログラミング言語に負けず劣らずなRPAツールを作成することができます。その際、出力先はExcelのシートにとどまらず、例えば特定のWebページからダウンロードしてきたデータをダウンロードフォルダに配置したり、ユーザーに選択させたcsvファイルを加工して結果をデスクトップに保存したり、という処理が多くなります。前置きが長くなりましたが、出力先の指定において、マクロ実行者のデスクトップパスを取得することは非常に重要で、最も(私の)使用頻度の高い関数のひとつです。
関数リファレンス

F0000002_文字列に含まれる特定のワードの出現回数を返す

No2にもってくるほど使用頻度も重要性も高くない関数です。サイト作成当時に対応していた案件で必要になったので作成しました。htmlのソース(「Ctrl+U」で出てくる)データの操作をするときに特定のタグ<a>とか<p>とか<span>とかの出現回数を調べたりということに使えます。
関数リファレンス

F0000001_ユーザーフォームに最小化/最大化ボタンを表示させる

ツール作成において、ExcelVBA(マクロ)を使うことの利点の一つは、ユーザーフォームにあるかと思います。Excelの利用率は2024年4月調査時点で61.9%(Utilly調べ)これは利用率なので、普及率はさらに高い割合かと思います。また、組織内で個人が使用する分にはインストールなどの手間が不要である場合が多いかと思います。この普及率・簡便さでユーザーフォームと同等の機能を持ったアプリはありません(たぶん)。このユーザーフォームはExcelのブックとは別で動作するウインドウが立ち上がり、入力受付などに使用できますが、最小化・最大化ボタンが付いていません。例えばユーザーフォームとなにか別のウインドウ(ブラウザ等)とを交互に操作するといった場合、操作性が悪いと私は感じます。この操作性の改善への答えのひとつが、この関数かと考えます。 ※(私の)便宜上、関数と表記していますが関数ではありません。