VBA樹林– category –
-
【VBA】ファイルの拡張子に関連付けられたプログラムのパスを取得する方法 (API)
はじめに VBAマクロから特定のファイルを開く際、通常は Shell 関数に直接ファイルパスを渡せば、Windowsが自動的に関連付けられたプログラムで開いてくれます。しかし、「.pdf ファイルを開くプログラムが何であるか(Acrobat Readerなのか、ブラウザなの... -
【VBA】マクロの処理をミリ秒(ms)単位で一時停止する方法 (Sleep API)
はじめに VBAでマクロを実行する際、「処理が速すぎて、何が起きているか目で追えない」「特定の処理の間に、ほんの少しだけウェイト(待ち時間)を入れたい」といった場面があります。 VBAには Application.Wait という待機命令がありますが、これは秒単... -
【VBA】マクロの処理時間をミリ秒(ms)単位で高精度に計測する方法 (GetTickCount API)
はじめに VBAの Timer 関数は、マクロの処理時間を秒単位で手軽に計測できますが、非常に高速に完了する処理のパフォーマンスを比較したい場合、秒単位では差が分からず、より精密な計測が必要になります。 このような高精度な時間計測には、Windows APIの... -
【VBA】ユーザーフォームを最大化・最小化・リサイズ可能にする方法 (Windows API)
はじめに VBAのユーザーフォームは、デフォルトではウィンドウサイズの変更ができず、タイトルバーには「閉じる」ボタンしかありません。しかし、表示するデータ量に応じてユーザーが自由に大きさを変えられたり、一時的に最小化してシートの作業に戻れた... -
【VBA】ユーザーフォームのタイトルバーと「閉じる」ボタンを完全に消去する方法
はじめに VBAのユーザーフォームで、ユーザーにフォーム上のボタン以外の操作を一切させたくない場合、タイトルバー自体(タイトル、アイコン、「閉じる」ボタンを含む全て)を非表示にしたい、という究極のカスタマイズ要求があります。これにより、フォ... -
【VBA】ユーザーフォームの「閉じる」ボタン(×)を無効化する方法 (Windows API)
はじめに VBAのユーザーフォームで、ユーザーに特定のボタン(例: 「登録」や「キャンセル」)からの終了を強制し、右上の「閉じる」ボタン(×ボタン)ではフォームを閉じられないようにしたい、という場合があります。これにより、意図しないタイミングで... -
【VBA】Excelの「閉じる」ボタン(×)を無効化する方法 (Windows API)
はじめに VBAで、ユーザーに特定の操作を強制したい場合や、誤ってExcelを閉じられては困るような処理を実行している際に、「Excelウィンドウ右上の『閉じる』ボタン(×ボタン)を一時的に無効化したい」という、非常に高度な制御が必要になることがありま... -
【VBA】画面の解像度(幅と高さ)を取得する方法 (GetSystemMetrics API)
はじめに VBAでユーザーフォームを作成する際、利用者の画面サイズを考慮して、フォームの表示位置や大きさを最適化したい場合があります。例えば、画面解像度に合わせてフォームを中央に表示したり、ウィンドウが画面からはみ出さないように調整したりす... -
【VBA】ファイルやフォルダを完全に削除せず、ごみ箱に移動する方法 (API)
はじめに VBAでファイルを削除する際、Kill ステートメントや FileSystemObject の .DeleteFile メソッドを使うと、ファイルは完全に削除されてしまい、元に戻すことができません。もし操作を誤ると、重要なデータを失ってしまう危険性があります。 Window... -
【VBA】外部アプリのウィンドウを最前面に表示する方法 (SetForegroundWindow API)
はじめに VBAマクロから Shell 関数で他のアプリケーションを起動したり、既に開いているアプリケーションを操作したりする際、「目的のウィンドウが他のウィンドウの背面に隠れてしまっていて見えない」ということがあります。 このような場合に、指定し... -
【VBA】起動している全てのメモ帳を一度に閉じるマクロ (Windows API)
はじめに VBAマクロの実行中に、複数のメモ帳や電卓のウィンドウが開かれていると、作業の妨げになったり、処理の競合を引き起こしたりすることがあります。このような場合に、「起動している特定のアプリケーション(例: 全てのメモ帳)を、一度に全て閉... -
【VBA】起動した外部アプリが終了するまで待機する方法 (Windows API)
はじめに VBAの Shell 関数で外部のアプリケーションを起動すると、VBAはアプリケーションの起動だけを行って、その終了を待たずに、すぐに次のコードの実行に移ってしまいます。しかし、時には「ユーザーがメモ帳での編集を終えて、ファイルを保存して閉... -
【VBA】アプリケーションの重複起動を防止する方法 (FindWindow API)
はじめに VBAの Shell 関数で外部のアプリケーションを起動する際、何も考えずに実行すると、ボタンを押すたびに新しいウィンドウがどんどん開いてしまいます。これを防ぎ、「もし既に起動していたら、新しくは起動しない」という制御を加えたい場面は非常... -
【VBA】Windows APIの使い方入門!Declareステートメントの書き方を徹底解説
はじめに VBAは非常に高機能な言語ですが、時には「PCのスピーカーから音を鳴らしたい」「特定ウィンドウの情報を取得したい」といった、Excelの標準機能だけでは実現できない、よりOSに近いレベルの操作が必要になることがあります。 このような高度な機... -
【VBA】クイックソートアルゴリズムの実装|配列を高速に並べ替える方法
はじめに VBAで大量のデータを格納した配列を並べ替える際、処理速度は非常に重要な要素になります。数あるソートアルゴ-リズムの中でも、「クイックソート」は、その名の通り、一般的に最も高速なアルゴリズムの一つとして知られています。 クイックソー... -
【VBA】マージソートアルゴリズムの実装|配列を高速に並べ替える方法
はじめに VBAで配列の要素を並べ替える(ソートする)際、バブルソートのような単純なアルゴリズムは理解しやすいですが、要素数が多くなると処理に非常に時間がかかってしまいます。 より大規模なデータを高速にソートするためのアルゴリズムの一つが「マ... -
【VBA】マクロを時間差で実行・繰り返し実行する方法 (OnTime, GetTickCount)
はじめに VBAで、「5分後に自動でファイルを保存したい」「10秒ごとにシートの値を更新したい」といった、時間を起点とした処理を実装したい場面は多くあります。また、より高度な使い方として、図形を滑らかに動かすようなアニメーションを作成したい場合... -
【VBA】コマンドプロンプトの実行結果(出力)を文字列として取得する方法
はじめに VBAから Shell 関数でコマンドプロンプトのコマンドを実行できますが、その**実行結果(画面に表示されるテキスト)**をVBAの変数として受け取り、プログラムの中で利用したい、という場面があります。例えば、dir コマンドの結果からファイルの... -
【VBA】コマンドプロンプト(DOSコマンド)を実行する方法 (WScript.Shell)
はじめに VBAマクロから、ファイルの一覧をテキストに出力する dir コマンドや、ネットワーク設定を確認する ipconfig コマンドといった、古くからある**コマンドプロンプト(DOSコマンド)**を実行したい場面があります。 VBAから WScript.Shell オブジェ... -
【VBA】Shell関数で外部のアプリケーション(電卓、メモ帳など)を起動する方法
はじめに VBAマクロの処理の流れの中で、「メモ帳を開いてログを書き出したい」「ブラウザを開いて特定のURLにアクセスさせたい」といったように、Excel以外の外部アプリケーションを起動したい場面があります。 VBAの Shell 関数を使えば、このような外部... -
【VBA】モジュール名を指定して、他のモジュールのマクロを呼び出す方法
はじめに VBAでプロジェクトの規模が大きくなると、機能ごとにコードを別の標準モジュールに分割して管理することが多くなります。その際、異なるモジュール間で、偶然同じ名前のマクロ(プロシージャ)を定義してしまう可能性があります。 このような状況... -
【VBA】マクロでVBAコードを自動生成・編集する方法 (CodeModuleオブジェクト)
はじめに VBAの VBProject オブジェクトを使うと、モジュールをエクスポートしたりインポートしたりできますが、さらに一歩進んで、モジュール内のコードそのものを、マクロを使って一行ずつ読み書きすることも可能です。 これを実現するのが CodeModule ... -
【VBA】モジュール内のマクロ名一覧を正規表現で取得し、シートに書き出す方法
はじめに VBAプロジェクトが大規模になってくると、「このモジュールに、どんなマクロを書いたか忘れてしまった」「マクロの仕様書を作るために、プロシージャ名の一覧が欲しい」といった場面が出てきます。 VBAの VBProject オブジェクトと、正規表現(VB... -
【VBA】VBAモジュールをマクロで操作する方法(エクスポート/インポート/削除)
はじめに VBAのプロジェクト(モジュールやフォームなど)そのものを、マクロを使って操作したいと考えたことはありませんか? 例えば、「よく使う汎用的なモジュールを、ボタン一つで他のブックにもインポートしたい」「開発中のモジュールのバックアップ... -
【VBA】OSやExcelのバージョン情報を取得する方法(互換性対策)
はじめに 作成したVBAマクロを他の人に使ってもらう際、相手のPC環境(OSがWindows 10か11か、Excelが32bit版か64bit版かなど)によって、マクロが意図通りに動作しないことがあります。 VBAを使えば、マクロを実行しているPCのOS情報や、Excel自体のバー... -
VBAでファイルの文字コードを判別!ADODB.StreamでBOMを読み取る方法
はじめに VBAで外部のテキストファイルを読み込む際、意図せず文字化けしてしまった経験はありませんか?その原因の一つに、ファイルの**BOM(バイトオーダーマーク)**が関係していることがあります。BOMは、UTF-8などの文字コードで保存されたファイルの... -
【VBA】選択セルの改行数に合わせて、数式バーの高さを自動調整する方法
はじめに Excelのセル内で改行(Alt + Enter)を使って長い数式や文章を入力すると、数式バーには最初の1行しか表示されず、全体を確認するために毎回手動でバーの高さを広げなければならず、不便ですよね。 VBAのシートイベントを使えば、「セルを選択し... -
【VBA】PCにインストールされているプリンターの一覧を取得する方法
はじめに VBAで印刷関連のマクロを作成する際、「現在利用可能なプリンターの名前をリストアップしたい」「特定のプリンターがインストールされているか確認したい」といった場面があります。 VBAからWindowsのシェル機能にアクセスすることで、PCに登録さ... -
【VBA】Stopステートメントで、マクロの実行を任意に一時中断する方法
はじめに VBAのデバッグ作業中、特定の位置でプログラムの実行を一時停止させたい場合、通常はブレークポイント(F9キーで設定/解除)を使います。しかし、ブレークポイントはファイルに保存されないため、一度ファイルを閉じてしまうと、再度設定し直す必... -
【VBA】32bit/64bit版Office両対応のマクロを作成する方法 (Vba7, Win64)
はじめに Excel 2010以降、Officeには32bit版と64bit版が存在します。VBAのコード、特にWindows API関数を呼び出す Declare ステートメントは、このbit数の違いによって書き方を変える必要があります。もし対応しないコードを書くと、他の人の環境でマクロ...