VBA樹林– category –
-
【Excel VBA】Collectionオブジェクトで重複しないリストを高速に作成する方法
データリストから重複する項目を取り除き、ユニークな(一意の)リストを作成したい、という場面はデータ集計の基本です。Excelの「重複の削除」機能でも可能ですが、VBAを使えばこの処理をマクロに組み込めます。 Forループで1セルずつ比較する方法では、... -
【Excel VBA】元のデータを自動反映する「リンクされた図」としてセル範囲を貼り付ける方法
Excelでダッシュボードやレポートを作成する際、「別シートにある表やグラフを、見栄え良く貼り付けたい。しかも、元のデータが変更されたら、貼り付けた内容も自動で更新されてほしい」という高度なニーズがあります。 これを実現するのが、Excelの強力な... -
【Excel VBA】セル範囲をコピーして、図(画像)として貼り付ける方法
作成した表やレポートの一部を、値や書式が変更されない「スナップショット」として別の場所に貼り付けたい、という場合があります。 VBAの.CopyPictureメソッドを使えば、セル範囲を見た目そのままの「図(画像)」としてコピーし、シート上に貼り付ける... -
【Excel VBA】セル範囲に名前を定義・削除する3つの方法
Excelの「名前の定義」機能を使うと、C2:D100のようなセル範囲に「売上データ」のような分かりやすい名前を付けることができます。これにより、数式が読みやすくなったり、VBAから特定の範囲を扱いやすくなったりと、多くのメリットがあります。 VBAを使え... -
【Excel VBA】2つの表を比較し、片方にしか存在しないデータ行を抽出する方法
「会員リスト」と「イベント参加者リスト」を比較して、『会員だがイベントに参加しなかった人』を抽出したい、といった場面はありませんか?これは、2つのリストを比較し、一方にしか存在しない「差分」のデータを見つける作業です。 VBAを使えば、このよ... -
【Excel VBA】2つの表を比較し、両方に存在する共通のデータ行を抽出する方法
「先月の顧客リスト」と「今月の顧客リスト」を比較して、両方のリストに名前がある顧客だけを抜き出したい、といった「2つのリストの共通項を探す」作業は、データ分析の現場で頻繁に発生します。 VBAを使えば、この照合と抽出のプロセスを自動化できます... -
【Excel VBA】オートフィルターで非表示になった行を一括削除する方法
Excelのオートフィルター機能で必要なデータだけを抽出した後、「その抽出されたデータだけを残して、非表示になっている他の行はすべて削除したい」という場面は、データ整理の際によく発生します。 手作業でこれを行うのは困難ですが、VBAを使えばこの処... -
【Excel VBA】摂氏を華氏に変換するユーザー定義関数(UDF)の作り方
Excelには多くの便利な組み込み関数がありますが、VBAを使えば、特定の計算や処理を行う自分だけのオリジナル関数(ユーザー定義関数 / UDF)を作成できます。 作成した関数は、SUMやVLOOKUPと同じように、ワークシートのセルから直接=関数名()の形で呼び... -
【Excel VBA】N行おきに罫線を引く方法(For…Stepループ)
縦に長いデータ表を印刷したり閲覧したりする際、数行おきに区切り線が入っていると、格段に見やすくなります。Excelの条件付き書式でも実現できますが、VBAを使えば、マクロの処理フローの一部として、より動的で柔軟な罫線設定が可能です。 この記事では... -
【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で複数のシートを削除する際に注意すべきなのが、ループの順番です。この記事で...