-
【Excel VBA】1行おきに空白行をまとめて挿入する方法
印刷したときに見やすくするためや、後から手作業で追記するスペースを確保するために、データが入力されている各行の間に、空白行を1行ずつ挿入したい場合があります。 手作業で何十行も挿入するのは大変な手間ですが、VBAを使えばこの作業を一瞬で完了さ... -
【Excel VBA】シート枚数を指定して新しいブックを作成する方法
通常、Excelで新しいブックを作成すると、デフォルトで1枚(または設定によっては3枚)のシートが用意されます。しかし、マクロで「月次レポート用に12枚のシートがあるブック」や「分析用に5枚のシートがあるブック」を最初から作成したい、という場合も... -
【Excel VBA】開いている全ブックの全シートを対象に一括検索する方法
複数のExcelファイルにまたがって、特定のキーワードや担当者名がどこで使われているかを一度に調べたい、という場面はありませんか?Excelの標準の検索機能では、ブックを一つずつ開いて検索を繰り返す必要があり、非常に手間がかかります。 VBAを使えば... -
【Excel VBA】数値の列番号をアルファベットの列名(A, B, AA列など)に変換する方法
VBAでForループを使い列を順番に処理する場合、Cells(行番号, 列番号)のように、列を数値で扱うのが一般的です。しかし、処理の過程で「28番目の列」を「AB列」のように、見慣れたアルファベットの列名に変換したい場面が出てきます。 残念ながら、VBAには... -
【Excel VBA】計算方法を手動にしてマクロを高速化する Application.Calculation
Application.ScreenUpdating = Falseと並んで、VBAマクロを高速化するための二大巨頭と言えるのが、計算方法の一時的な手動化です。 数式が多く含まれるシートにVBAで値を次々と書き込んでいくと、その都度Excelが再計算を行うため、処理が極端に遅くなり... -
【Excel VBA】マクロを高速化する基本中の基本 Application.ScreenUpdating = False
VBAマクロ、特に多くのセルを操作するループ処理などを実行した際に、「処理が遅い」「画面がチカチカして見づらい」と感じたことはありませんか? その原因は、ExcelがVBAによる一つ一つの操作を、律儀に画面へ逐一描画しているからです。 この記事では、... -
【Excel VBA】イベントの連鎖を防ぐ Application.EnableEvents の正しい使い方
Worksheet_Changeなどの「イベントプロシージャ」は、特定の操作をきっかけにマクロを自動実行できる非常に便利な機能です。しかし、使い方を誤ると、意図しないマクロの無限ループ(連鎖)を引き起こし、Excelがフリーズしてしまう原因にもなります。 こ... -
【Excel VBA】配列のループ処理を高速化するテクニックと比較
VBAの高速化において、セル範囲のデータを一度「配列」に読み込んでから処理するテクニックは非常に重要です。そして、その配列をどのようにループ処理するか、またどのようにクリアするかによっても、パフォーマンスやコードの正確性が変わってきます。 ... -
【Excel VBA】2次元配列の値をセル範囲に一括で書き込んで高速化する方法
VBAマクロで計算・加工した大量の処理結果を、最終的にワークシートに書き出す場面は非常に多くあります。このとき、Forループを使って1セルずつ値を書き込んでいくと、データ量が増えるにつれて処理が極端に遅くなってしまいます。 前回の「セル範囲→配列... -
【Excel VBA】セル範囲の値を2次元配列に一括代入して高速化する基本テクニック
VBAで大量のセルデータを処理する際、For Eachループなどでセルを一つずつ読み書きしていくと、データ量に比例して処理が非常に遅くなるという問題に直面します。 このパフォーマンス問題を解決する最も効果的で基本的な方法が、セル範囲の値を一度にまと... -
【Excel VBA】XLOOKUP関数でモダンな表引き検索をする方法
長年にわたりExcelの表引き検索の主役であったVLOOKUP関数ですが、いくつかの弱点(検索列が一番左にないといけない、見つからないとエラーになる等)がありました。 Excel for Microsoft 365およびExcel 2021以降では、これらの弱点をすべて克服した、非... -
【Excel VBA】VLOOKUP関数で表引き検索をする方法(エラー処理も解説)
Excelでのデータ処理において、VLOOKUP関数は最もよく使われる関数の一つです。VBAのマクロ内でも、この強力なVLOOKUP関数を**WorksheetFunctionオブジェクト**経由で利用することができます。これにより、商品コードから価格を検索する、といった表引き処... -
【Excel VBA】SORT関数でデータや配列を並べ替えた結果を取得する方法
Excelのデータ範囲やVBAの配列を、元のデータを変更することなく、並べ替えた(ソートした)結果だけをメモリ上で取得したいという高度なニーズがあります。 Excel for Microsoft 365およびExcel 2021以降で利用可能になった**SORT関数**をVBAから呼び出す... -
【Excel VBA】FILTER関数を使ってフィルター結果を配列として取得する方法
特定の条件に合うデータを行ごと抽出したい場合、従来はオートフィルターで絞り込んでコピー&ペーストしたり、Forループで1行ずつ判定したりといった方法が主流でした。 しかし、Excel for Microsoft 365およびExcel 2021以降では、FILTER関数という非常... -
【Excel VBA】Excel方眼紙の複数セルから文字列を連結して取得する2つの方法
官公庁の申請書などで見られる、1マスに1文字ずつ入力する「Excel方眼紙」のようなレイアウトでは、データが複数のセルに分割されてしまいます。これをVBAで扱うには、まずバラバラのセル値を一つに連結する処理が必要です。 この記事では、複数のセルにま... -
【Excel VBA】COUNTIF関数とワイルドカードで部分一致するセルを高速カウントする方法
アンケート結果の集計などで、「"東京"という文字が含まれる回答は何件あるか?」といった、特定の文字列を含む(部分一致)セルの個数を数えたい場面はよくあります。 VBAのForループとLike演算子を使えばこの処理は実現できますが、データ量が多いと非常... -
【Excel VBA】SUMIF関数を使って条件に一致するデータを合計する方法
「売上一覧の中から、東京支店の売上だけを合計したい」といった、条件に一致するデータだけを合計する処理は、Excel業務の基本です。 VBAでこの処理を実現しようとすると、まずForループとIf文で1行ずつ条件をチェックし、足し上げていく方法が思い浮かび... -
【Excel VBA】データ最終行の下に合計値(SUM)を入力する2つの方法
請求書や売上一覧表などで、データが入力されている一番下のセルの直後に、列の合計値を自動で入力したい、という場面は非常に多くあります。データの行数は毎回変動するため、マクロで最終行を動的に見つける必要があります。 この記事では、データが入力... -
【Excel VBA】VLOOKUPやSUMIF等のワークシート関数をVBAで利用する方法
VBAには独自の関数が多数用意されていますが、普段Excelのセルで使い慣れている便利なワークシート関数(SUM, COUNTIF, VLOOKUPなど)をマクロの中でも使いたい、と思う場面は非常に多いです。 VBAのWorksheetFunctionオブジェクトを使えば、これらのワー... -
【Excel VBA】全ワークシートを名前順(昇順)に並べ替える方法
Excelで多数のシートを扱っていると、タブの順番がバラバラになり、目的のシートを探すのが大変になることがあります。手作業でドラッグして並べ替えるのは、シート数が多いと非常に面倒な作業です。 VBAを使えば、すべてのワークシートを名前順(昇順)で... -
【Excel VBA】特定の1シート以外をすべて削除する方法
マクロの実行前に、前回の処理で作成された多数のレポートシートを一度にすべてクリアしたい、しかし「ひな形」シートだけは残しておきたい、という場面はよくあります。 VBAで複数のシートを削除する際に注意すべきなのが、ループの順番です。この記事で... -
【Excel VBA】選択した複数シート(作業グループ)に同じ処理を一括実行する方法
複数のシートに同じヘッダーを追加したり、同じセルの値を更新したり、同じ印刷設定を適用したり…。Excelで複数のシートにまったく同じ操作をしたい、という場面は頻繁にあります。 VBAを使えば、「現在選択されているすべてのシート(作業グループ)」を... -
【Excel VBA】複数のワークシートを作業グループとしてまとめて選択する方法
複数のシートに同じヘッダーを追加したり、同じ印刷設定を適用したりする際、手作業ではCtrlキーやShiftキーを押しながらシートタブをクリックして「作業グループ」を作成します。 VBAを使えば、この作業グループの作成も自動化できます。この記事では、Wo... -
【Excel VBA】別シートへ移動する直前に入力チェックを行う方法 (Deactivateイベント)
入力用シートを作成した際、「ユーザーが必須項目を記入し忘れたまま、他のシートに移動してしまうのを防ぎたい」という場面があります。 VBAの**Worksheet_Deactivateイベント**を使えば、特定のシートからフォーカスが外れた(=ユーザーが別のシートを... -
【Excel VBA】Forループを使って連番のワークシートを複数一括で作成する方法
月次レポートのために「4月」「5月」…「3月」という12枚のシートを用意したり、支店ごとの集計シートを「支部01」「支部02」…と連番で作成したりする作業は、手作業では非常に面倒です。 VBAの**For...NextループとWorksheets.Addメソッドを組み合わせるこ... -
【Excel VBA】ユーザーに再表示させない強力なシートの非表示方法
Excelで設定シートやマスターデータなどをユーザーに見せたくない、または誤って編集されるのを防ぎたい場合、シートを「非表示」にします。しかし、通常の非表示設定では、ユーザーがシート見出しを右クリックして「再表示」を選べば、簡単に見えてしまい... -
【Excel VBA】保護されたシートで許可されている操作の詳細を取得する方法
VBAでマクロを操作する際、シートが保護されているかどうかを調べることはよくあります。しかし、単に保護されているか(True/False)を知るだけでなく、「具体的にどの操作が許可されているのか」を詳細に知りたい場合もあります。 例えば、「この保護され... -
【Excel VBA】ワークシートをパスワードで保護・保護解除する方法
数式や重要なデータが入力されているシートを、ユーザーに誤って変更されないように保護したい、という場面はよくあります。VBAを使えば、シートの保護と、その解除を自動的に行うことができます。 この記事では、ワークシートをパスワード付きで保護する.... -
【Excel VBA】アクティブシートが「ワークシート」かどうかを判定する方法
VBAマクロでRange("A1").Valueのようにセルを操作するコードを書いた場合、もしユーザーが「グラフシート」をアクティブにした状態でそのマクロを実行すると、セルが存在しないためエラーになってしまいます。 このようなエラーを未然に防ぐには、処理の実... -
【Excel VBA】隣のシート(前・後ろ)をオブジェクトとして取得する方法
VBAで複数のワークシートを順番に処理していく際、「現在アクティブなシートの、すぐ隣のシート」を操作したいという場面がよくあります。 VBAのWorksheetオブジェクトには、こうした隣接シートを簡単に取得するための便利なプロパティ、.Previous(前のシ...