🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →

Excel AI Blog: VBA Tutorials, Formula Tips & Automation Guides

Expert guides on Excel formulas, VBA automation, data processing, and AI-powered productivity. Learn to master Excel with AI.

Excel VBA の SpecialCells — 空白・可視セル・定数を選択する(そして 1 つも見つからないとエラーになる理由)

Excel VBA の SpecialCells — 空白・可視セル・定数を選択する(そして 1 つも見つからないとエラーになる理由)

SpecialCells は、アドレスではなく種類でセルを選ばせます。すべての空白、すべての可視行、すべての数式、すべての定数を Excel が代わりに拾います。条件を選択してジャンプ(Go To Special)のコード版です。命綱となる唯一のルールは、1 つも見つからないとき SpecialCells が error 1004 を投げることで、無防備な呼び出しは時限爆弾になります。成熟した書き方は必ず On Error Resume Next と If Not result Is Nothing を添えます。使うべきセルの種類、空白埋めと可視行コピーのパターン、そして結果が複数エリアの参照になる理由を学びましょう。

Henry
Excel VBA の Union — 離れた範囲を 1 つの参照にまとめる(そしてなぜ重複を取り除かないのか)

Excel VBA の Union — 離れた範囲を 1 つの参照にまとめる(そしてなぜ重複を取り除かないのか)

Union は、散らばった長方形を 1 つの参照に貼り合わせ、離れた複数のブロックを色づけ・消去・コピーする操作を一度で行えるようにします。複数のエリアを Ctrl を押しながらクリックすることのコード版です。誰もがつまずくルールは、Union が連結するだけで重複を取り除かないことです。重なったセルは二重に数えられるので .Count は嘘をつき、Union は集合の和ではなくバッチのリストになります。Union of Nothing エラーを避ける蓄積パターン、なぜセルごとのループではなく参照ごとに 1 回の操作なのか、そして Union が Intersect とどう違うのかを学びましょう。

Henry
Excel VBA の Intersect — 2 つの範囲が重なる場所を見つける(そして誰もが使う Worksheet_Change のガード)

Excel VBA の Intersect — 2 つの範囲が重なる場所を見つける(そして誰もが使う Worksheet_Change のガード)

Intersect は、2 つの範囲が共有するセルだけを返し、触れ合わないときは Nothing を返します — そしてその Nothing こそが肝心な点です。一番の用途は Worksheet_Change のガードで、If Not Intersect(Target, Range) Is Nothing と書けば、シート上のあらゆる編集でイベントが発火するのを止められます。命綱となるルールは、重なりがなければ Nothing が返ることで、Is Nothing の確認なしにプロパティへ触れると error 91 でクラッシュします。EnableEvents を使った完全なイベントガード、マクロを対象エリアに限定する方法、そして Intersect が Union とどう違うのかを学びましょう。

Henry
Excel VBA の Cells と Range — セルを数値で参照する(そしてなぜ Cells(1, 2) は A2 ではなく B1 なのか)

Excel VBA の Cells と Range — セルを数値で参照する(そしてなぜ Cells(1, 2) は A2 ではなく B1 なのか)

Cells は Range を数値でアドレス指定したものです。Range(A1) は列の文字・行番号の順、つまり目で読む順でセルを指し、Cells(row, column) は Excel が格納する順、まず行・次に列で 1 つのセルを指します。だから Cells(1, 2) は A2 ではなく B1 になります。Cells と Range の使い分け、Range(Cells, Cells) で計算した角からブロックを組む方法、添字なしの Cells がシート全体を意味する理由、そして Cells をワークシートで修飾すべき理由を学びましょう。

Henry
Excel VBA の Resize — アンカーから範囲を作り直す(そしてなぜデルタではなく総数なのか)

Excel VBA の Resize — アンカーから範囲を作り直す(そしてなぜデルタではなく総数なのか)

Resize は範囲の左上のアンカーを固定したまま、長方形を新しいサイズに描き直します。Offset のように参照を移動させず、何も選択もしません — 同じ角から始まる新しい範囲を返します。誰もがつまずくルールは、Resize(rows, columns) が加える差分ではなく、最終サイズを表す 1 始まりの絶対的な総数だということです。だから Range(A1).Resize(5, 3) は A1:C5 になり、Resize(0) は error 1004 を投げます。引数を省いて片方の次元をそのままにする方法、アンカーが常に左上である理由、そして見返りの大きい 2 つのパターン — Offset と Resize で見出しを落とす、そして配列を収まるブロックへ書き戻す — を学びましょう。

Henry
Excel VBA の CurrentRegion — データブロック全体を 1 行で取得する(そして空白行がそれに何をするのか)

Excel VBA の CurrentRegion — データブロック全体を 1 行で取得する(そして空白行がそれに何をするのか)

CurrentRegion は、あるセルを囲む連続したセルのブロックです。Excel はそのセルから外へ広がり、完全に空白の行と完全に空白の列にぶつかるまで拡張して、その途切れない島を囲む最小の長方形を返します — ちょうど Ctrl+Shift+アスタリスク で選択されるものです。端は自分で計算しません。Excel が見つけます。罠は、たった 1 本の完全に空白の行や列が壁となってブロックを静かに分断することで、エラーもなくデータの半分だけが返ってきます。CurrentRegion が見出しを含む理由と Offset・Resize で落とす方法、UsedRange や End(xlUp) との違い、そしていつ本物のテーブルを使うべきかを学びましょう。

Henry
Excel VBA の罫線 — コードでセルの罫線を引く(そしてブロック全体が枠で囲まれてしまう理由)

Excel VBA の罫線 — コードでセルの罫線を引く(そしてブロック全体が枠で囲まれてしまう理由)

Excel VBA における罫線は、セルのスイッチではなく、辺のプロパティです。範囲にはアドレス指定できる罫線が 8 本あり — 4 つの外周の辺、2 組の内側のグリッド線、そして 2 本の対角線 — 素の Range.Borders コレクションはその全部を一度に指します。だから Range.Borders.LineStyle = xlContinuous は 1 本の外枠を引く代わりに、すべてのセルを囲んでしまいます。外枠だけが欲しいときに BorderAround を使う場面、LineStyle・Weight・Color の組み合わせ方、xlEdgeBottom で 1 辺だけを設定する方法、そして xlLineStyleNone で罫線を消す方法を学びましょう。

Henry
Excel VBA のセルの結合 — コードで結合・解除する(そして、たいていやめておくべき理由)

Excel VBA のセルの結合 — コードで結合・解除する(そして、たいていやめておくべき理由)

Excel VBA でセルを結合することは書式設定ではなく、グリッドそのものへの構造的な変更です。Range(A1:C1).Merge は 3 つのセルを 3 列にまたがる 1 つのセルに融合し、左上の値だけが残って、ほかは消去されます。だから結合セルは、並べ替え・Range の計算・列の挿入・ループを静かに壊します。Merge・UnMerge・MergeCells・MergeArea、熟練者が代わりに Center Across Selection に手を伸ばす理由、そして結合セルをコードで安全に見つけて片付ける方法を学びましょう。

Henry
Excel VBA の列幅と行の高さ — コードでサイズ変更と AutoFit(そしてつまずかせる単位)

Excel VBA の列幅と行の高さ — コードでサイズ変更と AutoFit(そしてつまずかせる単位)

Excel VBA でセルのサイズを変えることは列や行の全体に働き、2 つの寸法は異なる単位を使います — ColumnWidth は標準フォントの文字数で、RowHeight はポイントで測ります。この食い違いこそ、幅 10 と高さ 10 がまったく似ていない理由です。もう 1 つの罠は AutoFit です。これは列や行の全体でしか動かず、表示されたテキストを測るので、結合セルを静かに無視します。ColumnWidth と読み取り専用の Width の違い、RowHeight と折り返し、EntireColumn.AutoFit、そして幅をゼロにするのが列を隠す間違ったやり方である理由を学びましょう。

Henry
Excel VBA の Font — コードで色・太字・サイズを設定する(そして ColorIndex の罠)

Excel VBA の Font — コードで色・太字・サイズを設定する(そして ColorIndex の罠)

Font オブジェクトは Excel VBA におけるセルのテキスト層です — 色、太字、斜体、サイズ、フォント名、そのどれも下にある値には触れません。厄介なのは色です。設定方法は 3 通りあり、それぞれ違う数の空間を使います。Range.Font.Color は 24 ビットの RGB 値を、Range.Font.ColorIndex は 1〜56 のパレット番号を取り、この 2 つは互換ではありません。どちらを使うか、Characters でセルの一部だけを太字にしたりサイズを変えたりする方法、値に基づく色付けが条件付き書式の担当である理由、そしてフォント色を間違った数値なしで読み戻す方法を解説します。

Henry
Excel VBA のセルの色 — コードで背景の塗りを設定する(そして色がデータでない理由)

Excel VBA のセルの色 — コードで背景の塗りを設定する(そして色がデータでない理由)

Range.Interior は Excel VBA におけるセルの塗り層です — テキストの背後にあるペンキです。Interior.Color と RGB で設定し、Interior.ColorIndex を xlNone にして消します。そして白い塗りは、塗りなしと同じではないと知っておきましょう。より深い要点は、色の付いたセルは何のデータも持たないことです。SUM も SUMIF もそれを無視するので、色で分類しているなら、数式が読めない場所に情報を隠していることになります。色のプロパティ、古びるループなしで条件によってハイライトする方法、そして多くの範囲を素早く塗る方法を学びましょう。

Henry
Excel VBA の NumberFormat — 値を変えずに数値の表示を変える

Excel VBA の NumberFormat — 値を変えずに数値の表示を変える

Range.NumberFormat は Excel VBA におけるセルの表示層です。格納された数値が画面上でどう読めるかを変えるだけで、数値そのものは決して変えません。だから、5.4999 を保持するセルを 5 と表示させる書式設定は丸めではなく、合計は依然として 5.4999 を使います。見た目と値の対立が実際に牙をむくのがここです。日付とは、実のところ衣装をまとったシリアル値だからです。書式コードの言語、NumberFormat が Format 関数とどう違うか、NumberFormatLocal というロケールの罠、そして代わりに Round が必要なときを学びましょう。

Henry
Excel VBA で WorksheetFunction を使う — Excel 自身の関数をコードから呼ぶ(そして 2 通りの失敗の仕方)

Excel VBA で WorksheetFunction を使う — Excel 自身の関数をコードから呼ぶ(そして 2 通りの失敗の仕方)

Application.WorksheetFunction を使えば、SUM や VLOOKUP、COUNTIF をループで書き直す代わりに、VBA から Excel の 450 を超える組み込み関数を借りられます。落とし穴は呼び出し方が 2 通りあり、失敗の仕方が違うことです。WorksheetFunction.X は一致がないと実行時エラーを発生させ、Application.X は IsError でテストできるエラー値を返します。どちらの呼び出し方を使うか、なぜ結果を Variant で受けなければならないか、この方法で呼んではいけない関数はどれか、そして 1 セルずつループする代わりに範囲全体を渡すのはいつかを解説します。

Henry
Excel VBA で Remove Duplicates を使う — 1 行で重複を削除(そしてなぜ元に戻せないのか)

Excel VBA で Remove Duplicates を使う — 1 行で重複を削除(そしてなぜ元に戻せないのか)

Range.RemoveDuplicates はコード 1 行で Excel の重複の削除ボタンを実行しますが、ループにはない形で破壊的です。行をその場で削除し、最初の出現を残し、マクロが動いたあとは元に戻せません。誰もがつまずく引数が Columns で、その数値はシートの列文字ではなく範囲内のオフセットです。範囲オフセットの罠、Header xlYes が大事な理由、最初ではなく最後の行を残す方法、そして代わりに Advanced Filter や Dictionary に手を伸ばすのはいつかを解説します。

Henry
Excel VBA で Advanced Filter を使う — 一意な値を抽出し、新しい範囲へフィルターする(ループなしで)

Excel VBA で Advanced Filter を使う — 一意な値を抽出し、新しい範囲へフィルターする(ループなしで)

Range.AdvancedFilter は、ビューではなくデータを出力する唯一のフィルターです。一意なリストや条件に一致した行の集合を、ループなしで、何も削除せずに、1 回の呼び出しで別の場所へ引き出せます。異質に感じる部分は、その WHERE 句がセルの中に置かれること、つまり見出しがデータと正確に一致しなければならない条件範囲です。xlFilterInPlace と xlFilterCopy の違い、条件範囲の仕組み、Unique True が非破壊的に重複を除く方法、空の出力を返す見出し不一致の罠、そして AutoFilter や Remove Duplicates とどう違うかを解説します。

Henry
Excel VBA で Find を使う — セルを正しく検索する(返すのは位置ではなく Range)

Excel VBA で Find を使う — セルを正しく検索する(返すのは位置ではなく Range)

VBA の Range.Find はコードから使う Excel の Ctrl+F で、位置を表す数値ではなく Range オブジェクト(一致がなければ Nothing)を返すため多くの人がつまずきます。error 91 のクラッシュを防ぐたった 1 つのチェック、実行のたびに Find の挙動が変わる「引数を記憶する」罠、LookAt xlWhole と xlPart が完全一致と部分一致をどう決めるか、そして無限ループにせず FindNext で全一致を取得する方法を解説します。

Henry
Excel VBA で AutoFilter を使う — コードで行をフィルターする(非表示は削除ではない)

Excel VBA で AutoFilter を使う — コードで行をフィルターする(非表示は削除ではない)

VBA の AutoFilter はコードから表をフィルターしますが、隠された行は消えていません — SUM にはやはり数えられ、コピーにも付いてきて、範囲の中にそのまま残ります。定番のバグを防ぐ考え方、可視行だけに触れるにはなぜ SpecialCells xlCellTypeVisible を通す必要があるか、条件と演算子の仕組み、2 回目の実行でフィルターがオフになるトグルの罠、そして大量の行を高速に消す「フィルターしてから削除」パターンを解説します。

Henry
Excel VBA で Sort を使う — Range.Sort と Sort オブジェクト(元の並び順を取り戻す方法)

Excel VBA で Sort を使う — Range.Sort と Sort オブジェクト(元の並び順を取り戻す方法)

VBA のソートは Ctrl+Z の効かない恒久的な並べ替えなので、最初のルールは手をつける前に元の並び順を守ることです。ビューとミューテーションを分ける考え方、Header xlYes が大事な理由(さもないと見出しがデータに紛れ込む)、手軽な Range.Sort と無制限の Sort オブジェクトの違い、古いソートキーを引き継ぐ SortFields.Clear の罠、そして文字列として保存された数値が誤った順序で並ぶ理由を解説します。

Henry
Excel VBA で行を削除する — 行・空白行・条件による削除(ループは逆順で!)

Excel VBA で行を削除する — 行・空白行・条件による削除(ループは逆順で!)

VBA で行を削除するのは、値の消去ではなく構造の変更です。削除した行の下はすべて 1 行ずつ上へ詰まるため、順方向ループは行を飛ばします。直す唯一のルール(下から上へループする、または Union でまとめて削除する)、EntireRow.Delete がセルの消去とどう違うか、空白行を高速に取り除く方法、そして参照数式やデータを壊さずに条件で行を削除する方法を解説します。

Henry
Excel VBA で行・列を挿入する — グリッドを正しくずらす(ループ挿入で崩さないコツ)

Excel VBA で行・列を挿入する — グリッドを正しくずらす(ループ挿入で崩さないコツ)

挿入は削除の鏡像です。既存の行を下へ(列なら右へ)押しやって場所を空けるので、削除ループを壊すのと同じずれが挿入ループも壊します。EntireRow.Insert と Shift 引数を使った部分範囲の挿入の違い、CopyOrigin が新しい行にどの隣の書式を継承させるか、ループ内で安全に挿入する向き、そして多数の行を 1 回の呼び出しでまとめて追加する方法を解説します。

Henry
Excel VBA で列・行を非表示にする — 非表示は削除ではない(なぜ合計が変わらないのか)

Excel VBA で列・行を非表示にする — 非表示は削除ではない(なぜ合計が変わらないのか)

VBA で列を非表示にするのは、削除でもフィルターでもありません。データはそのまま残り、すべての SUM に含まれ、範囲コピーでも一緒にコピーされ、ただ表示幅がゼロになるだけです。なぜ .Hidden が EntireColumn と EntireRow に属するのか、なぜ非表示のセルも数式で数えられるのか、動かなくなったシートを救う「すべて再表示」の 1 行、そして手動で隠した行が AutoFilter で隠れた行とループ時にどう違うのかを解説します。

Henry
Excel VBA の Worksheet_BeforeDoubleClick — ダブルクリックをアクションに変える(そして編集モードを抑制する)

Excel VBA の Worksheet_BeforeDoubleClick — ダブルクリックをアクションに変える(そして編集モードを抑制する)

Worksheet_BeforeDoubleClick は、セルをダブルクリックした瞬間に — 編集モードに入る前に — Excel が発火させるイベントで、Target セルと Cancel フラグを手渡してくれます。Cancel を True にすれば編集モードを抑制し、代わりに自分のアクションを走らせられます — チェックマークを切り替える、行を完了にする、明細へドリルダウンする。Intersect で 1 列に絞る方法、Cancel を忘れるとセルが編集モードに落ちる理由、そしてコードを置くべき場所を解説します。

Henry
Excel VBA の Worksheet_BeforeRightClick — 右クリックメニューを置き換える(そして無効化がセキュリティでない理由)

Excel VBA の Worksheet_BeforeRightClick — 右クリックメニューを置き換える(そして無効化がセキュリティでない理由)

Worksheet_BeforeRightClick は、セルを右クリックした瞬間に — コンテキストメニューが現れる前に — Excel が発火させるイベントで、Target セルと Cancel フラグを手渡してくれます。Cancel を True にすれば組み込みメニューを抑制し、代わりに自分のアクションを走らせたり独自のメニューを出したりできます。Copy や Paste を潰さないよう Intersect でスコープを絞る方法、右クリックの無効化が保護ではなく UX の選択である理由、そしてコードを置くべき場所を解説します。

Henry
Excel VBA の Workbook_BeforePrint — 印刷をブロックし、ヘッダーを刻み、印刷プレビューの落とし穴

Excel VBA の Workbook_BeforePrint — 印刷をブロックし、ヘッダーを刻み、印刷プレビューの落とし穴

Workbook_BeforePrint は、ブック内の何かが印刷される前に Excel が発火させるイベントで、Cancel フラグを手渡してくれます。Cancel を True にすれば印刷はブロックされます — 印刷前に検証する、あるいは草案が出ていくのを止める。印刷プレビューでもこのイベントが発火する理由(だから重い処理はプレビューを遅くする)、シートごとではなくブック全体で一度だけ走る理由、無言の Cancel がバグである理由、そしてコードを置くべき場所を解説します。

Henry
Excel VBA の Workbook_BeforeClose — 閉じる操作を取り消し、保存を促し、コードを置くべき場所

Excel VBA の Workbook_BeforeClose — 閉じる操作を取り消し、保存を促し、コードを置くべき場所

Workbook_BeforeClose は、誰かがファイルを閉じようとした瞬間に — 何も破棄される前に — Excel が発火させるイベントで、Cancel フラグを手渡してくれます。Cancel を True にすれば、閉じる操作は取り消されます。閉じる際の後始末を走らせる方法、Saved プロパティで Excel が二重に保存を尋ねるのを止める方法、クラッシュ時には決して発火しない理由、そしてコードを置くべき場所を解説します。

Henry
Excel VBA の Workbook_BeforeSave — 保存を検証・ブロックし、SaveAsUI が本当に伝えていること

Excel VBA の Workbook_BeforeSave — 保存を検証・ブロックし、SaveAsUI が本当に伝えていること

Workbook_BeforeSave は、保存が要求された瞬間に — ディスクに何かが書き込まれる前に — Excel が発火させるイベントで、SaveAsUI と Cancel という 2 つのフラグを手渡します。必須セルが空のときに保存をブロックする方法、誰がいつ保存したかを自動で刻む方法、ハンドラーの中で Save を呼ぶと永遠にループする理由、そして SaveAsUI でファイル名を強制する方法を解説します。

Henry
Excel VBA の Worksheet_Activate と Deactivate — シートを切り替えたときにコードを走らせる(そして離脱を取り消せない理由)

Excel VBA の Worksheet_Activate と Deactivate — シートを切り替えたときにコードを走らせる(そして離脱を取り消せない理由)

Worksheet_Activate はシートがアクティブになったときに発火し、Worksheet_Deactivate はそのシートを離れる直前に発火します — シートの到着と出発のイベントです。両者を定義づける勘所は — BeforeClose や BeforeSave と違い、どちらも Cancel を渡さないので、シートの切り替えを見ることはできても、それをブロックすることはできません。表示時にリフレッシュするパターン、押し戻しの回避策、そしてシートレベルとブックレベルのハンドラーを解説します。

Henry
Excel VBA のクラスモジュール — 自分だけのオブジェクトを作る(設計図 vs インスタンス、そして As New の罠)

Excel VBA のクラスモジュール — 自分だけのオブジェクトを作る(設計図 vs インスタンス、そして As New の罠)

VBA のクラスモジュールを使うと、データと振る舞いをまとめた設計図として自分だけのオブジェクト型を定義でき、New で独立したインスタンスをいくつでも作り出せます。誰もがつまずく落とし穴は、オブジェクトが参照型であること。Set b = a は両方の名前を同じインスタンスに向け、Dim x As New は遅延インスタンス化の罠を隠します。モジュール名がそのまま型名になる仕組み、Type よりクラスが勝る場面、そして New にまつわる典型的な落とし穴の避け方を解説します。

Henry
Excel VBA の Type — 関連するフィールドを 1 つの変数にまとめる(ユーザー定義型 vs クラス)

Excel VBA の Type — 関連するフィールドを 1 つの変数にまとめる(ユーザー定義型 vs クラス)

VBA の Type は Type ... End Type で宣言するユーザー定義型で、関連する複数のフィールドを 1 つの変数にまとめます。Name、Age、Salary を 3 本の平行配列ではなく 1 つの変数として一緒に運べます。Type は値型なので、ある Type 変数を別の変数に代入するとすべてのフィールドがコピーされ、共有されるオブジェクトとは対照的です。宣言をどこに書くべきか、コピーと共有の違いがなぜ重要か、そしてクラスモジュールに切り替えるべき正確な境目を解説します。

Henry
Excel VBA の Property — Get・Let・Set(クラスのフィールドへのアクセスを制御する)

Excel VBA の Property — Get・Let・Set(クラスのフィールドへのアクセスを制御する)

Property Get・Let・Set は、クラスのフィールドをゲートに変えます。外部が読み書きするたびにあなたのコードが走る小さなプロシージャなので、入力を検証したり、値をその場で計算したり、フィールドを読み取り専用にしたりできます。誰もがつまずく区別が Let と Set です。Let は値を代入し、Set はオブジェクトを代入します。取り違えるとコンパイルエラーか実行時エラーになります。バッキングフィールドのパターン、素の Public 変数こそが正直な選択になる場面、そして読み取り専用プロパティの作り方を解説します。

Henry
Excel VBA の ActiveCell — カーソルのある唯一のセル(ActiveCell と Selection の違い、そして壊れるとき)

Excel VBA の ActiveCell — カーソルのある唯一のセル(ActiveCell と Selection の違い、そして壊れるとき)

ActiveCell は、いまカーソルがある1つのセルを指すライブなポインターです — つねにちょうど1つのセル、アクティブシート上、そして現在の Selection の内側にあります。Selection との違い、.Value と .Offset での読み書き、そして壊れる一番の理由 — ユーザーが残したシートとカーソルにそのまま従うので、ユーザーの現在地に関係しないコードには不向きだということ — を解説します。

Henry
Excel VBA の Selection — ハイライトされたものを扱う(そして、なぜつねに Range とは限らないのか)

Excel VBA の Selection — ハイライトされたものを扱う(そして、なぜつねに Range とは限らないのか)

Selection は、いまハイライトされているものを指すライブなポインターです — ふつうはセルの範囲ですが、グラフやシェイプ、あるいは何もない場合もあります。だからこそ Selection を範囲だと決めてかかるコードは、グラフが選択された瞬間にクラッシュします。選択セルのループ、.Areas による複数エリア選択の扱い、TypeName によるガード、そして Selection を完全に避けて範囲を名指しすべきときを解説します。

Henry
Excel VBA の Select と Activate — マクロ記録の .Select 癖を断ち切る

Excel VBA の Select と Activate — マクロ記録の .Select 癖を断ち切る

マクロ記録は、あなたのマウスがすることをそのまま書きます — シートを Select し、セルを Select し、Selection に作用する — それが人の働き方であって、コードのあるべき姿ではないからです。Select(1つまたは複数のセルをハイライト)と Activate(唯一のアクティブセルを設定)の本当の違い、ほぼすべての .Select が削除できる遅く脆い回り道である理由、本当に選択が必要になるまれな場面、そして記録されたコードを、修飾された範囲参照へ直接作用するようリファクタリングする方法を解説します。

Henry
Excel VBA の Workbook_Open — ファイルを開いた瞬間にマクロを自動実行する(そしてコードを置くべき場所)

Excel VBA の Workbook_Open — ファイルを開いた瞬間にマクロを自動実行する(そしてコードを置くべき場所)

Workbook_Open は、ファイルが開き終わった瞬間に Excel が発火させるイベントです — ボタン不要で、自分から走るコード。ただし発火するのは、コードが ThisWorkbook オブジェクト(標準の Module ではなく)に置かれ、かつユーザーがマクロを有効にしている場合だけ。コードをどこに置くべきか、なぜ無言で走らないのか、Workbook_Open と Auto_Open の違い、そして速く落ちにくく保つ方法を解説します。

Henry
Excel VBA の Worksheet_Change — セルが編集されたときにコードを走らせる(そして避けるべき無限ループ)

Excel VBA の Worksheet_Change — セルが編集されたときにコードを走らせる(そして避けるべき無限ループ)

Worksheet_Change は、シート上でユーザーがセルを編集するたびに Excel が発火させるイベントで、変更されたセルを Target として手渡してくれます。誰もがはまる罠 — ハンドラーがセルに書き込むと、その書き込みがまたイベントを発火させ、Excel は永遠にループします。Application.EnableEvents による解決策、Intersect で対象を絞る方法、なぜ数式の再計算を無視するのか、そしてコードを置くべき場所を解説します。

Henry
Excel VBA の Worksheet_SelectionChange — カーソルが動いたときにコードを走らせる(もたつきなしでアクティブ行をハイライト)

Excel VBA の Worksheet_SelectionChange — カーソルが動いたときにコードを走らせる(もたつきなしでアクティブ行をハイライト)

Worksheet_SelectionChange は、カーソルが動くたび — クリック、矢印キー、Enter — に Excel が発火させるイベントです。新しい選択範囲を Target として手渡すので、アクティブ行のハイライトのような、カーソルを追う小技が可能になります。ただし絶えず発火するため、重いコードはシート全体をもたつかせます。正しいアクティブ行ハイライトのパターン、なぜループしうるのか、そして羽のように軽く保つ方法を解説します。

Henry
Excel VBA の For Each — インデックスに触れずコレクションをループする(そして隠れた罠)

Excel VBA の For Each — インデックスに触れずコレクションをループする(そして隠れた罠)

For Each は「すべての要素にこれをせよ」と伝えるだけで、順序と境界の面倒は VBA が引き受けます — カウンターも、1 つずれるバグもありません。しかしその手軽さは 3 つの手強いルールを隠しています:ループ変数はオブジェクトか Variant でなければならず、配列のループは読み取り専用で、走査中のコレクションから要素を削除してはいけません。For Each が For…Next に勝る場面と、静かに裏切る場面を解説します。

Henry
Excel VBA の Collection — 順序を保ち、伸びるリスト(そしてなぜ Dictionary ではないのか)

Excel VBA の Collection — 順序を保ち、伸びるリスト(そしてなぜ Dictionary ではないのか)

VBA の Collection は、Add するたびに伸びる順序付きのリストです — ReDim も、サイズの当て推量も要りません。しかし初心者が毎回ぶつかる 4 つの鋭い角があります:0 始まりではなく 1 始まり、要素を上書きできない(Add/Remove だけ)、重複キーはエラー 457 を投げ、組み込みの Exists チェックがない。Collection が Array や Dictionary に勝る場面と、静かに代償を求める場面を解説します。

Henry
Excel VBA の With ステートメント — オブジェクトを一度だけ書く(そして成否を分ける先頭のドット)

Excel VBA の With ステートメント — オブジェクトを一度だけ書く(そして成否を分ける先頭のドット)

With ステートメントは、オブジェクトに一度だけ名前を付け、そのメンバーに先頭のドットだけで触れさせてくれます — 打つ量が減り、コードは速く、ブロックはすっきり。しかしその先頭のドットこそがすべてです:忘れると .Font は Font になり、あなたのオブジェクトではなくアクティブシートに無言でバインドされます。With が実際に最適化するもの、ドット抜けの罠、そして With が For Each とどう組むのかを解説します。

Henry
Excel VBA の Dim — 変数の宣言、Option Explicit、そしてタイプミスが生む「空の箱」

Excel VBA の Dim — 変数の宣言、Option Explicit、そしてタイプミスが生む「空の箱」

Dim は使う前に名前付きの箱を確保します。しかし変数を宣言する本当の理由は、名前を打ち間違えた瞬間に VBA が新しい空の Variant を無言で作ってしまうことにあります。Option Explicit がなぜ VBA で最も価値ある 1 行なのか、Dim a, b As Long の罠、そして Set が必要になる場面を解説します。

Henry
Excel VBA のデータ型 — String、Long、Double、Variant(値ごとに正しい箱を選ぶ)

Excel VBA のデータ型 — String、Long、Double、Variant(値ごとに正しい箱を選ぶ)

VBA のデータ型とは、変数の箱の形と大きさのこと — そしてそれを選ぶことは、実は何が壊れうるかを選ぶことです。なぜ Integer は 32,767 でオーバーフローするのか(Long を使う)、なぜ Variant はバグを隠す怠惰な既定なのか、なぜお金には Double でなく Currency が要るのか、そして型が一致しませんとオーバーフローのエラーの読み方を解説します。

Henry
Excel VBA の Const — マジックナンバーに名前を付ける(そして値がずれない理由)

Excel VBA の Const — マジックナンバーに名前を付ける(そして値がずれない理由)

VBA の定数とは、コンパイル時に値へ固定された名前 — コードじゅうに散らばったマジックナンバーの処方箋です。なぜ Const は値のずれを止めるのか、なぜ定数への代入がコンパイルエラーになるのか(それが機能なのです)、なぜ Const はコンパイル時のリテラルでなければならないのか、そしていつ Enum に手を伸ばすべきかを解説します。

Henry
Excel VBA の Offset — セルからの相対移動(Offset と Resize、そして 1 つずれる罠)

Excel VBA の Offset — セルからの相対移動(Offset と Resize、そして 1 つずれる罠)

Range.Offset は (行, 列) だけずらした新しい範囲を返します — 移動するだけでサイズは変えず、Offset(1,0) は 1 行目ではなく 1 行下を意味します。考え方の軸、見出しを飛ばす定番イディオム Offset(1).Resize(n-1)、そして VBA のメソッドが OFFSET ワークシート関数とどう違うかを解説します。

Henry
Excel VBA の UsedRange と CurrentRegion — データブロック全体を取得する(どちらを信じるべきか)

Excel VBA の UsedRange と CurrentRegion — データブロック全体を取得する(どちらを信じるべきか)

UsedRange と CurrentRegion はどちらも「ブロック全体」を取得しますが、答えている問いが違います。UsedRange は Excel がキャッシュした外接矩形で、過大に報告し縮まりません。CurrentRegion はセルの周囲でその場で計算され、空白行で止まります。どちらをいつ信じるべきかを解説します。

Henry
ExcelのAVERAGE関数 — 空白とゼロで平均が変わる理由

ExcelのAVERAGE関数 — 空白とゼロで平均が変わる理由

ExcelのAVERAGEは合計÷個数ですが、対象は見つけた数値だけ。空白と文字列は飛ばし、本物の0は数えます。だから「売上なし」を0で記録するか空白のままにするかで、同じデータの平均が静かに変わり、数式は何も警告しません。空白とゼロの罠、AVERAGEAがほぼ役に立たない理由、そして「平均の平均」が間違った問いになる場面を解説します。

Henry
Excelの加重平均 — SUMPRODUCT ÷ SUM(そして「平均の平均」が嘘をつく理由)

Excelの加重平均 — SUMPRODUCT ÷ SUM(そして「平均の平均」が嘘をつく理由)

Excelに加重平均の専用関数(WEIGHTEDAVG)はなく、正しい加重平均は =SUMPRODUCT(values, weights)/SUM(weights) です。大事なのは数式そのものではなく、それが直す誤り。規模の違うグループを要約した数字を素のAVERAGEにかけると全グループが等しい重みになり、注文3件の地域が300件の地域と同じ発言権を持ってしまいます。重みが影響力を再配分する考え方、SUM(weights)で割る理由、重みが1のときの短縮形、GPA・ポートフォリオ・混合単価の例、そして条件の付け方を解説します。

Henry
Excel GEOMEAN・TRIMMEAN・HARMEAN — 平均が嘘をつくときの平均たち

Excel GEOMEAN・TRIMMEAN・HARMEAN — 平均が嘘をつくときの平均たち

素のAVERAGEが間違った、あるいは誤解を招く答えを出す場面のための、3つの専門的な平均。GEOMEANは成長率とリターンのための正しい平均で、+50%の年と−50%の年の平均は0%になりません。TRIMMEANは平均する前に極端な高値と安値を落とします——オリンピックの採点と同じやり方です。HARMEANは速度やPERのような割合のための正しい平均です。それぞれがどの嘘を直すか、本当のCAGRを出すGEOMEAN(1+r)−1のパターン、3つの平均が常に調和≤幾何≤算術に並ぶ理由、そして#NUM!の罠を解説します。

Henry
Excel PRODUCT 関数 — 範囲まるごとを掛け合わせる(そして単なる * ではない理由)

Excel PRODUCT 関数 — 範囲まるごとを掛け合わせる(そして単なる * ではない理由)

Excel の PRODUCT 関数は範囲を 1 回の呼び出しで掛け合わせますが、* 演算子ではなくこれを選ぶ本当の理由は、文字列と空白セルの扱いにあります。PRODUCT はそれらを読み飛ばす一方、* は文字列でエラーになるか、空セル 1 つで結果を静かに 0 にしてしまいます。考え方(PRODUCT は SUM の掛け算版)、成長率を合成する =PRODUCT(1+range) のテクニック、PRODUCT と SUMPRODUCT の違い、そして * のチェーンのほうが実際に適している場面を解説します。

Henry
Excel の階乗(FACT)— n!・FACTDOUBLE・MULTINOMIAL(そして 171! のオーバーフロー)

Excel の階乗(FACT)— n!・FACTDOUBLE・MULTINOMIAL(そして 171! のオーバーフロー)

Excel の FACT 関数は階乗を計算します — =FACT(5) は 5×4×3×2×1 = 120 です — が、まず理解すべきは階乗が何を意味するかです。それは n 個の異なるものを並べる方法の数です。FACT(0) が 1 になる理由、FACT(171) が #NUM! を返す理由(Excel で計算できる最大の階乗は 170!)、FACTDOUBLE と MULTINOMIAL の違い、そして FACT があらゆる組み合わせ・順列関数の土台となる最小単位である理由を解説します。

Henry
Excel COMBIN・PERMUT — 組み合わせと順列(順番は関係する?)

Excel COMBIN・PERMUT — 組み合わせと順列(順番は関係する?)

Excel の COMBIN と PERMUT は、どちらも n 個から k 個を選ぶ方法が何通りあるかを数えます — 違いは順番が関係するかどうかです。PERMUT は順序付きの並べ方(表彰台、暗証番号)を数え、COMBIN は順序なしの選び方(宝くじ、委員会)を数え、常により小さい数になります。毎回正しい関数を選ぶ 2×2 の表(順序 × 重複 → PERMUT / PERMUTATIONA / COMBIN / COMBINA)、宝くじの確率の例 =COMBIN(49,6)、そして選び間違えてもエラーが出ず、k! 倍だけずれた数が返る理由を解説します。

Henry
Excel TIME・HOUR・MINUTE・SECOND — 時刻の裏にある小数を読み取り、組み立てる

Excel TIME・HOUR・MINUTE・SECOND — 時刻の裏にある小数を読み取り、組み立てる

Excel の時刻は、1 日(24 時間)を 1 とした小数です —— 6:00 AM は文字どおり 0.25。HOUR・MINUTE・SECOND はその小数から各パーツを読み取り、TIME は数値から小数を組み立てて深夜 0 時をまたぐと静かに折り返します。TIMEVALUE はテキストの時刻を小数に解析します。基本となる考え方、30 時間の経過時間で HOUR が 30 ではなく 6 を返す理由、TIME(25,0,0) が 1:00 AM になる仕組み、90 分の足し方、そして代わりに算術で計算すべき場面を解説します。

Henry
Excel で時刻を小数の時間に変換する —— ×24 のコツ(と労働時間の計算)

Excel で時刻を小数の時間に変換する —— ×24 のコツ(と労働時間の計算)

Excel の時刻は 1 日を 1 とした小数なので、8:15 は 8.25 ではなく 0.34375 として格納されます。小数の時間にするには 24 を掛けます —— 時間関連で最も検索される数式です。時間 × 時給が 24 倍小さく出る理由、(終了 − 開始)× 24 で労働時間が求まる仕組み、深夜 0 時をまたぐ夜勤のための MOD のコツ、無給休憩の差し引き、そして請求対象時間を 15 分単位に丸める方法を解説します。

Henry
Excel で 24 時間を超える時間を合計する —— 合計がリセットされる理由(と [h]:mm での解決)

Excel で 24 時間を超える時間を合計する —— 合計がリセットされる理由(と [h]:mm での解決)

時刻の列を合計したのに、合計が 25:30 ではなく 1:30 と出る —— SUM は正しく、書式が嘘をついています。Excel の既定の h:mm はまる 1 日を差し引いた余りしか表示しないので、24 時間で折り返します。解決策はユーザー定義書式 [h]:mm で、角かっこが Excel に折り返さず累積するよう伝えます。負の時刻が ####### になる理由、小数の合計の求め方、そして時刻書式のチートシートを解説します。

Henry
Excel SIN・COS・TAN — =SIN(30) が 0.5 にならない理由(ラジアンの落とし穴)

Excel SIN・COS・TAN — =SIN(30) が 0.5 にならない理由(ラジアンの落とし穴)

Excel の SIN・COS・TAN は角度をラジアンで測り、度ではありません。だから =SIN(30) は 0.5 ではなく -0.988 を返し、しかも Excel はエラーとして知らせてくれません。間違った三角関数の答えをすべて直すたった 1 つの考え方(度は RADIANS で包む)、TAN が 90° 付近でエラーにならず巨大な数に発散する理由、そしてシート全体で角度の単位を統一する方法を解説します。

Henry
Excel RADIANS・DEGREES・PI — 角度の単位変換(そして PI() が関数である理由)

Excel RADIANS・DEGREES・PI — 角度の単位変換(そして PI() が関数である理由)

RADIANS と DEGREES は、あなたが考える角度の単位(度)と Excel の三角関数が要求する単位(ラジアン)を橋渡しします。どちらの変換器をどこに置くか(SIN/COS/TAN の前に RADIANS、逆関数の後に DEGREES)、PI() がカッコを必要とし、省くと #NAME? になる理由、そして 3.14159 を決して直書きしてはいけない理由を解説します。

Henry
Excel ATAN・ATAN2 — 逆正接(アークタンジェント)と X,Y から求める角度

Excel ATAN・ATAN2 — 逆正接(アークタンジェント)と X,Y から求める角度

逆三角関数 ASIN・ACOS・ATAN・ATAN2 は比を角度に戻します — そして角度をラジアンで返すので、DEGREES で包みます。ATAN が象限を判別できない理由、ATAN2 がそれをどう解決するか、Excel の ATAN2(x, y) があらゆるプログラミング言語と引数の順序が逆になっている有名な落とし穴、そして ASIN/ACOS で -1〜1 の外を渡すと #NUM! になる理由を解説します。

Henry
ExcelのPMT関数 — ローンと住宅ローンの返済額を計算する(元金・利息の内訳も)

ExcelのPMT関数 — ローンと住宅ローンの返済額を計算する(元金・利息の内訳も)

PMT は、ローンをちょうど返し切る一定額の返済額を1つ求めます——そしてわざと負の数を返します。符号の規約(出ていくお金は負)、最大のミス(年利なのに月次の期間を渡す)、5つの引数、IPMT と PPMT が各回の返済を利息と元金に分ける仕組み、そして返済予定表の作り方を解説します。

Henry
ExcelのFV・PV関数 — 将来価値・現在価値と「5の法則」

ExcelのFV・PV関数 — 将来価値・現在価値と「5の法則」

FV と PV は、PMT と同じ貨幣の時間価値の方程式を、別の未知数について解いたものです。変数は5つ——rate、nper、pmt、pv、fv——で、未知数ごとに関数が1つ:どれか4つがわかれば5つ目が求まります。積立プランの将来価値、支払いの流れの現在価値、同じ符号の規約(入れるお金は負)、期首払い年金のための type 引数、そして RATE と NPER を使う場面を解説します。

Henry
ExcelのNPV・IRR — 割引キャッシュフローと収益率

ExcelのNPV・IRR — 割引キャッシュフローと収益率

NPV と IRR は、PMT や FV では扱えないキャッシュフロー——現実のプロジェクトの、でこぼこで不規則なもの——を扱います。最大のミス、そして本記事を読む理由のすべて:Excel の NPV は最初の値が1期先に届くと仮定するので、時点ゼロの投資は NPV の呼び出しの外に置かなければなりません。正しい NPV、IRR とそれが #NUM! を返す理由、複数 IRR の罠、そして XNPV と XIRR(実際の日付)こそアナリストが本当に使うものである理由を解説します。

Henry
ExcelのDSUM・DCOUNT関数 — 条件表に一致した行を合計・カウントする

ExcelのDSUM・DCOUNT関数 — 条件表に一致した行を合計・カウントする

DSUM と DCOUNT は「条件に一致した行を合計(またはカウント)する」に答えますが、条件は数式の中ではなくシート上の小さな表として書きます。3つの引数、database に見出し行を含めなければならない理由、条件範囲が AND と OR を表す仕組み、DCOUNT が文字列を無視する理由(文字列も数えるなら DCOUNTA)、そして目に見える条件ブロックが SUMIFS に勝る場面を解説します。

Henry
ExcelのDGET関数 — レコードを1件だけ取り出し、なければ堂々とエラーにする

ExcelのDGET関数 — レコードを1件だけ取り出し、なければ堂々とエラーにする

DGET は条件範囲を使ってテーブルから1つの値を取り出します——その真骨頂は、わざとエラーを出すこと:一致が複数あれば #NUM!、1つもなければ #VALUE!。これはバグではなく、VLOOKUP が黙って飛ばす一意性チェックが組み込まれているのです。3つの引数、補助列なしの複数条件検索、そして DGET が XLOOKUP に勝つ場面(と勝たない場面)を解説します。

Henry
Excelのデータベース関数 — DAVERAGE・DMAX・DMIN と条件範囲を使いこなす

Excelのデータベース関数 — DAVERAGE・DMAX・DMIN と条件範囲を使いこなす

12個の D関数——DSUM、DCOUNT、DGET、DAVERAGE、DMAX、DMIN ほか——はすべて、1つの構文と1つのスキル、すなわち条件範囲を共有します。条件ブロックが AND と OR を表す仕組み、1つのフィールドに範囲を掛けるとなぜ見出しが2回要るのか、数式条件の使い方(成否を分ける見出しのルール)、先頭一致の過剰マッチという罠、そして D関数・SUMIFS・FILTER の使い分けを解説します。

Henry
ExcelのGROUPBY関数 — 1つの数式でデータをグループ集計する

ExcelのGROUPBY関数 — 1つの数式でデータをグループ集計する

GROUPBY(行フィールド, 値, 関数) は行をグループ化し、1つのスピルする数式で集計します——UNIQUE + SUMIFS パターンの、そして多くのレポートではピボットテーブルそのものの、現代的な置き換えです。誰もがはまる落とし穴は、関数を名前で渡すこと(SUM() ではなく SUM)——グループごとに適用されるラムダだからです。3つの必須引数、ピボットテーブルが古びる場面でもなぜライブ再計算するのか、総計や集計値での並べ替えの付け方、そして必要なバージョンを解説します。

Henry
ExcelのPIVOTBY関数 — 数式でピボットテーブルを作る

ExcelのPIVOTBY関数 — 数式でピボットテーブルを作る

PIVOTBY(行フィールド, 列フィールド, 値, 関数) は、2つ目の次元を加えた GROUPBY です——データを行×列のグリッドにクロス集計し、更新不要でライブ再計算する1つのスピル数式として表したピボットテーブルです。4つの必須引数、行フィールドと列フィールドが入れ替え可能でない理由、両軸に合計を加える方法、そして従来のピボットテーブルとの本当のトレードオフ(生きていて参照できるが、ドラッグ操作の対話性はない)を解説します。Excel 365 が必要です。

Henry
GROUPBY・PIVOTBY 応用編 — 構成比、複数指標、カスタム集計

GROUPBY・PIVOTBY 応用編 — 構成比、複数指標、カスタム集計

GROUPBY と PIVOTBY が共有する省略可能な引数こそ、ピボットテーブルを置き換えるだけでなく上回り始める場所です:PERCENTOF で構成比を一語で、複数の値列で複数の指標を一度に、関数スロットの LAMBDA でピボットテーブルにはできない加重平均を、そして filter_array で欲しい行だけを集計。名前だけで渡す関数(イータ簡約)の文法、構成比の落とし穴、そしてどの引数が間違っているかを教えるエラー(#CALC!、#FIELD!、#SPILL!)を解説します。

Henry
ExcelのROWとCOLUMN関数 — セルの「値」ではなく「位置」を取得する

ExcelのROWとCOLUMN関数 — セルの「値」ではなく「位置」を取得する

ROW([参照]) は行番号を、COLUMN([参照]) は列番号を返します — セルの「位置」であって、中身の「値」ではありません。引数を省略すると、それぞれ数式が入っているセルの座標を返します。「セルがどこにあるか」と「セルに何が入っているか」を切り分ける考え方の軸、ROW() からアンカーを引いて作る自己修復型の連番、MOD(ROW(),n) が縞模様やグループ分けを動かす仕組み、そして COLUMN の「数値か列文字か」という落とし穴を解説します。

Henry
ExcelのROWSとCOLUMNS関数 — 範囲の「位置」ではなく「サイズ」を数える

ExcelのROWSとCOLUMNS関数 — 範囲の「位置」ではなく「サイズ」を数える

ROWS(配列) は範囲の行数を、COLUMNS(配列) は列数を返します — 位置ではなく、サイズです。ROWS(A1:A10) は 10、COLUMNS(A1:C1) は 3 です。複数形が ROW や COLUMN とどう違うか、COLUMNS() で自動調整される VLOOKUP の列インデックスという決定的な使い方、FILTER が返した行数の数え方、そして ROWS(A:A) が 1,048,576 になる「列全体」の落とし穴を解説します。

Henry
Excel HYPERLINK 関数 — 自分で更新されるクリック可能なリンクを作る

Excel HYPERLINK 関数 — 自分で更新されるクリック可能なリンクを作る

HYPERLINK(link_location, [friendly_name]) は、クリック可能なジャンプ — セル、シート、ファイル、Web ページ、メールへ — を作る数式で、その飛び先は他の数式で計算できます。静的なリンクを作る「挿入 > リンク」メニューとは別物です。ブック内をジャンプする # プレフィックス、ADDRESS と MATCH による動的な飛び先、なぜこのリンクが値を取ってくるのではなくクリックで移動するのか、そしてなぜ friendly_name を常に渡すべきかを解説します。

Henry
Excel RAND & RANDBETWEEN — 乱数を作る(そして勝手に変わるのを止める)

Excel RAND & RANDBETWEEN — 乱数を作る(そして勝手に変わるのを止める)

RAND() は 0 以上 1 未満のランダムな小数を返し、RANDBETWEEN(bottom, top) は両端を含む範囲のランダムな整数を返します。この 2 つはどちらも揮発性で、編集のたびに振り直されるという考え方、それが「乱数が勝手に変わる」ナンバーワンの落とし穴である理由、形式を選択して貼り付けで固定する方法、RANDBETWEEN が値を繰り返す理由、そしてランダムな小数を作る =a+(b-a)*RAND() の数式を解説します。

Henry
Excel RANDARRAY — 数式 1 本で乱数のグリッドまるごと

Excel RANDARRAY — 数式 1 本で乱数のグリッドまるごと

RANDARRAY([rows],[cols],[min],[max],[whole_number]) は数式 1 本で乱数のブロックをスピルします — RAND と RANDBETWEEN を統合して強化したものです。whole_number フラグの既定が FALSE である理由(だから整数を指定しない限り小数になる)、依然として揮発性である理由、いつ #SPILL! を投げるのか、そして SORTBY(list, RANDARRAY(...)) のシャッフル技を解説します。

Henry
Excel で行をランダムに選ぶ・抽出する・シャッフルする方法

Excel で行をランダムに選ぶ・抽出する・シャッフルする方法

Excel のあらゆるランダム抽出の裏にある唯一の技:各行にランダムな数を付け、その数で並べ替えるだけです。最新の 1 行 TAKE(SORTBY(data, RANDARRAY(...)), n)、古典的な RAND 補助列の方式、標本を台無しにする復元抽出と非復元抽出の決定的な違い、そして並べ替える前にランダム列を固定しなければならない理由を解説します。

Henry
Excel POWER & SQRT — べき乗・累乗根と演算子優先順位の落とし穴

Excel POWER & SQRT — べき乗・累乗根と演算子優先順位の落とし穴

POWER(x,n) と ^ 演算子は数値をべき乗し、SQRT(x) は ^(1/2) すなわち平方根の専用ショートカットです。累乗根は分数の指数にすぎないという考え方、=-3^2 が 9 を返し =27^1/3 が 9 を返す理由(どちらも優先順位の落とし穴)、負数の SQRT が #NUM! になる理由、そして POWER 一本で CAGR を求める方法を解説します。

Henry
Excel ABS & SIGN — 絶対値・大きさ、そして捨て去る符号

Excel ABS & SIGN — 絶対値・大きさ、そして捨て去る符号

ABS(x) は数値の大きさ(0 からの距離)を返し、SIGN(x) はその向きだけを -1・0・+1 で返します。あらゆる数値は大きさ × 向きだという考え方、許容差チェックに A-B ではなく ABS(A-B) が必要な理由、恒等式 x = SIGN(x)*ABS(x)、そして ABS は向きが本当にどうでもよいときのための道具であって、予期しなかった符号に貼る絆創膏ではない理由を解説します。

Henry
Excel EXP, LN & LOG — 対数・成長率、そして「既定の底」の落とし穴

Excel EXP, LN & LOG — 対数・成長率、そして「既定の底」の落とし穴

EXP(x) は e をべき乗し、LN・LOG10・LOG はその逆関数です。対数とはべき乗を逆向きに走らせたもの(指数を求める操作)だという考え方、底を省いた LOG(x) が自然対数ではなく底 10 になる理由、LN(0) と負数の LOG が #NUM! になる理由、そしてビジネスで実際に必要な 2 つの数式 — 幾何平均 = EXP(AVERAGE(LN)) と目標到達までの期間 = LN(target)/LN(rate) — を解説します。

Henry
ExcelのFORMULATEXT & ISFORMULA — セル内の数式を読み取り、監査する

ExcelのFORMULATEXT & ISFORMULA — セル内の数式を読み取り、監査する

FORMULATEXT(reference) はセルの数式をテキストとして返し、ISFORMULA(reference) はセルが数式を保持していれば TRUE を返します。考え方の軸——これらはシートを監査する関数であって、計算はしない——、数式でないセルで返る #N/A、すべての数式セルを強調表示する条件付き書式のテクニック、そして「数式の表示」の代わりにこれらを使うべき場面を解説します。

Henry
ExcelのCELL関数 — セルのアドレス・書式・種類・ファイル名を取得する

ExcelのCELL関数 — セルのアドレス・書式・種類・ファイル名を取得する

CELL(info_type, [reference]) はセルの値ではなく、そのメタデータ——アドレス、行、列、表示形式、内容の種類、ブックのファイル名——を返します。考え方の軸、なぜ info_type がキーワード文字列なのか、いまも唯一無二に得意な仕事(ファイルパスとシート名の取得)、そして結果が誤って見える再計算の罠を解説します。

Henry
ExcelのTYPE & N関数 — 値が本当は何なのかを診断する

ExcelのTYPE & N関数 — 値が本当は何なのかを診断する

TYPE(value) はセルが保持する値の種類をコードで返します——1 数値、2 テキスト、4 論理値、16 エラー、64 配列——、N(value) は値を数値に強制変換します。考え方の軸、TYPE が「文字列として保存された数値」をどう突き止めるか、なぜ N は何を渡してもエラーにせず 0 を返すのか、そして数式の中にコメントを埋め込む古典的な N() のテクニックを解説します。

Henry
ExcelのSWITCH関数 — ネストしたIFを平坦で読みやすい数式に置き換える

ExcelのSWITCH関数 — ネストしたIFを平坦で読みやすい数式に置き換える

SWITCH は1つの式を「完全一致する値のリスト」と照合し、最初に一致した結果を返します:=SWITCH(expr, val1, res1, val2, res2, default)。考え方の軸、なぜ完全一致だけなのか(そしてそれが SWITCH と IFS の境界線である理由)、default 引数を忘れると #N/A が返る罠、範囲を扱う SWITCH(TRUE()) のテクニック、そしてネストした IF の代わりに使うべき場面を解説します。

Henry
ExcelのCHOOSE関数 — 位置でN番目の項目を選ぶ(そして隠れた必殺技)

ExcelのCHOOSE関数 — 位置でN番目の項目を選ぶ(そして隠れた必殺技)

CHOOSE はリストから位置でN番目の項目を返します:=CHOOSE(index_num, value1, value2, …)。考え方の軸、なぜ一致ではなく位置で選ぶのか(CHOOSE と SWITCH の境界線)、インデックスが範囲外のときに出る #VALUE!、そして使われていない必殺技——範囲まるごとを返してシナリオを切り替えたり、左方向ルックアップのために列を並べ替えたりする使い方——を解説します。

Henry
ExcelのMAXIFS & MINIFS関数 — 配列数式なしの条件付き最大・最小

ExcelのMAXIFS & MINIFS関数 — 配列数式なしの条件付き最大・最小

MAXIFS と MINIFS は、1つ以上の条件を満たす値のうち最大・最小のものを返します:=MAXIFS(max_range, criteria_range1, criteria1, …)。考え方の軸、SUMIF ユーザーがつまずく引数の順序、なぜ古い {=MAX(IF())} 配列数式を置き換えるのか、そして一致する行がないときに返る「静かな 0」の罠を解説します。

Henry
ExcelのCOUNT・COUNTA・COUNTBLANK — 数値・非空白・空白セルを数える

ExcelのCOUNT・COUNTA・COUNTBLANK — 数値・非空白・空白セルを数える

COUNTは数値だけを、COUNTAは空でないセルすべてを、COUNTBLANKは空のセルを数えます——1つの「いくつ?」に見えて、実は3つの別々の問いに3つの関数が答えます。テキストのIDが並ぶ列に =COUNT を使うと0が返る理由、空文字列を返す数式までCOUNTAが数えてしまう理由、そしてCOUNTAとCOUNTBLANKの合計が必ずしもセル総数と一致しない理由を解説します。

Henry
ExcelのCOUNTIF関数 — 1つの条件に合うセルを数える(そして条件の書き方の罠)

ExcelのCOUNTIF関数 — 1つの条件に合うセルを数える(そして条件の書き方の罠)

COUNTIFは1つの条件を満たすセルを数えます——`=COUNTIF(範囲, 条件)`——そして条件とは、テキストで書いた小さなテストです。演算子を引用符の中に入れる理由、& でセルの値をしきい値にする方法、テキスト照合のワイルドカード、長い数値での15桁の罠、そしてCOUNTIFSへ切り替えるべきタイミングを解説します。

Henry
Excelでユニークな値を数える方法 — 今どきのやり方と昔ながらの式

Excelでユニークな値を数える方法 — 今どきのやり方と昔ながらの式

Excelには COUNTUNIQUE 関数がないため、重複を除いた値を数える方法は2つに分かれます。今どき(365/2021)の `=COUNTA(UNIQUE(範囲))` と、古いバージョン向けの昔ながらの `=SUMPRODUCT(1/COUNTIF(範囲,範囲))` です。空白が数を1増やす理由、FILTER で空白を除く方法、昔ながらの式が #DIV/0! を出す理由、そして重複を除いた値と1回だけ現れる値の違いを解説します。

Henry
Excel の TRIM と CLEAN — 照合を狂わせる「見えないゴミ」を取り除く

Excel の TRIM と CLEAN — 照合を狂わせる「見えないゴミ」を取り除く

TRIM と CLEAN はどちらも取り込んだテキストから見えないゴミを取り除きますが、対象が違います。TRIM は余分なスペース(ASCII 32)を、CLEAN は印刷されない制御文字(0〜31)を削除します。どちらも Web や PDF の貼り付けで紛れ込む改行なしスペース CHAR(160) は消せません。これが『TRIM が効かない』最大の原因です。考え方と、すべてを一括で片づける唯一の数式を解説します。

Henry
Excel の UPPER・LOWER・PROPER — データを壊さずに大文字小文字を変える

Excel の UPPER・LOWER・PROPER — データを壊さずに大文字小文字を変える

UPPER・LOWER・PROPER はテキストの大文字小文字を変えますが、Excel における大文字小文字は表示やエクスポートの問題であって、照合の問題ではありません。= 比較も VLOOKUP も、そもそも大文字小文字を区別しないからです。本当の落とし穴は PROPER です。すべての単語の先頭を大文字にするため、McDonald を Mcdonald に、iPhone を Iphone に壊してしまいます。大文字小文字が本当に効いてくる場面と、PROPER が仕上げではなく出発点にすぎない理由を解説します。

Henry
Excel の LEN 関数 — 文字数を数え、見えないゴミをあぶり出す

Excel の LEN 関数 — 文字数を数え、見えないゴミをあぶり出す

LEN はセル内の文字数を数えますが、その真価は診断にあります。末尾のスペースや印刷されない文字まで含めてすべての文字を数えるため、『Apple』に見えるセルが実は 6 文字の『Apple 』であることを LEN が証明してくれます。検証、LEN 引く LEN の出現回数カウント術、動的な抽出、そして LEN が表示形式を無視する理由を解説します。

Henry
ExcelのVLOOKUP関数 — 使い方と、それを壊す第4引数

ExcelのVLOOKUP関数 — 使い方と、それを壊す第4引数

VLOOKUP はテーブルの左端の列を上から下へ探し、そこから右へN列数えるだけ——その一方通行の設計こそ、すべてのバグの元凶です。なぜ第4引数(range_lookup)はほぼ常に FALSE でなければならないのか、なぜ VLOOKUP は左を見られないのか、なぜ列番号をベタ書きすると列を挿入した瞬間に静かに壊れるのか、そして「見つからない」を意味する #N/A の直し方を解説します。

Henry
ExcelのINDEX & MATCH — VLOOKUPに勝つ、2つの関数による検索

ExcelのINDEX & MATCH — VLOOKUPに勝つ、2つの関数による検索

INDEX と MATCH は検索を2つの仕事に分けます:MATCH が位置を見つけ(「どの行?」)、INDEX がその位置の値を返します(「そこに何がある?」)。検索と取得を切り離すことこそ、INDEX/MATCH に VLOOKUP が欠くすべてを与えます——右と同じくらい簡単に左を見て、挿入された列に耐え、真の二次元検索をこなします。パターン、match_type の罠、そしてそれでも XLOOKUP に勝つ場面を学びましょう。

Henry
ExcelのHLOOKUP & LOOKUP — 水平検索と、引退させるべきレガシー関数

ExcelのHLOOKUP & LOOKUP — 水平検索と、引退させるべきレガシー関数

HLOOKUP は VLOOKUP を90度回転させたもの——最初の行を探して下へ読みます。LOOKUP は VLOOKUP の先祖で、その致命的な欠陥は完全一致オプションがないこと:常に近似し、ソート済みデータを要求します。水平レイアウトが HLOOKUP を正解にする場面、古典的な LOOKUP(2,1/…) の技が今も古いシートに現れる理由、そしてなぜ両者がほぼ XLOOKUP に道を譲るのかを学びましょう。

Henry
ExcelのAND & OR関数 — 条件を正しく組み合わせる(そしてExcelがショートサーキットしない理由)

ExcelのAND & OR関数 — 条件を正しく組み合わせる(そしてExcelがショートサーキットしない理由)

AND と OR は判断をしません——複数の TRUE/FALSE 判定を1つの結論にまとめ、それを IF やルールやフィルターへ渡すだけです。なぜ AND は IF の第1引数の中に入れる(ネストしたIFを包むのではなく)べきなのか、素の =AND(...) がなぜ TRUE という文字を表示するだけなのか、なぜ Excel はすべての引数を評価する(ショートサーキットしないので #DIV/0! を起こしうる)のか、そして配列マスクの +/* に切り替えるのはいつかを解説します。

Henry
ExcelのNOT & XOR関数 — 条件を反転する、そして多くの人が誤解する「1つだけ例外」のロジック

ExcelのNOT & XOR関数 — 条件を反転する、そして多くの人が誤解する「1つだけ例外」のロジック

NOT は1つの TRUE/FALSE の結論を反転し、XOR は AND や OR では表せない排他的論理和です。なぜ NOT は引数をちょうど1つしか取らない(だから複合条件には NOT(AND(...)) と書く)のか、NOT が実は <> の変装にすぎないのはいつか、ド・モルガンの法則こそ NOT の真の武器である理由、そして誰も警告しない XOR の意外な点——入力が3つ以上だと「ちょうど1つ」ではなく TRUE の個数が奇数のとき TRUE を返す——を解説します。

Henry
ExcelのIS関数 — ISNUMBER・ISTEXT・ISBLANK・ISERROR・ISNA(壊れる前に数式を守る)

ExcelのIS関数 — ISNUMBER・ISTEXT・ISBLANK・ISERROR・ISNA(壊れる前に数式を守る)

IS ファミリーはセルを調べて TRUE/FALSE の結論を返します——分類はしますが、決して変換はしません。なぜ ISBLANK は「空に見える」より厳密なのか(数式の空文字列は空白ではない)、なぜ ISERROR は本物のバグを隠し ISNA や IFNA の方がたいてい安全なのか、なぜ IF(ISERROR(x),…,x) は x を二度計算するのか、そして ISNUMBER の切り札——SEARCH をきれいな部分一致テストに変える——を解説します。

Henry
Excel TEXT 関数 — 数値を書式付きの文字列に変換する(そして合計できなくなる罠)

Excel TEXT 関数 — 数値を書式付きの文字列に変換する(そして合計できなくなる罠)

TEXT 関数は、書式コードを使って数値や日付を書式付きのテキスト文字列に変換します。=TEXT(1234.5,"$#,##0.00") は "$1,234.50" を返します。基本となる考え方(書式を実際の文字列に焼き込むのか、セルの表示専用の表示形式にするのか)、最大の罠(出力はテキストなので SUM が無視する #VALUE! の遠因)、数値と日付の書式コード速習、先頭ゼロとロケール、そしてセルの表示形式・CONCAT・ROUND のほうが適している場面を解説します。

Henry
Excel VALUE と NUMBERVALUE — テキストを計算できる数値に戻す

Excel VALUE と NUMBERVALUE — テキストを計算できる数値に戻す

VALUE は数値に見えるテキスト文字列 —— "1,234.50" や "$9.00" —— を、合計・並べ替え・グラフ化できる本物の数値に解析します。TEXT の逆関数です。基本となる考え方、現実世界での最大の原因(インポートや貼り付けの後に文字列として格納された数値)、なぜ VALUE はシステムのロケールに従うのか、そしてヨーロッパ式の "1.234,56" を NUMBERVALUE がどう解決するか、より速い数式なしの解決策(*1、二重単項マイナス、区切り位置)、そして最新の Excel が一部のテキストを暗黙変換しても SUM は決してしない理由を解説します。

Henry
Excel DATEVALUE と TIMEVALUE — テキストとして閉じ込められた日付と時刻を救い出す

Excel DATEVALUE と TIMEVALUE — テキストとして閉じ込められた日付と時刻を救い出す

Excel の日付は、実は日付書式をまとったシリアル値です。テキストとして到着した日付は、並べ替えも引き算も DATEDIF への受け渡しもできない偽者です。DATEVALUE はテキストの日付をそのシリアル値に、TIMEVALUE はテキストの時刻を 1 日の端数に解析します。基本となる考え方、テキスト日付の症状、03/04/2026 という地域依存の曖昧さの罠、日付と時刻の結合方法、DATEVALUE が文字列を解析できない場面、そして DATE(LEFT,MID,RIGHT) と区切り位置という代替手段を解説します。

Henry
Excel INDIRECT 関数 — 文字列を「生きた参照」に変える(そしてなぜ揮発性なのか)

Excel INDIRECT 関数 — 文字列を「生きた参照」に変える(そしてなぜ揮発性なのか)

INDIRECT は "A1" や "Sheet2!B3" のような文字列を、生きたセル参照に変えます。考え方の軸、最大の落とし穴(文字列は自動追従しないため、シート名を変更するとすべての INDIRECT が #REF! で壊れる)、なぜ揮発性で Excel の依存関係トレーサーから見えないのか、閉じたブックで #REF! になる罠、唯一の決定的な用途(セルに書かれたシート名から値を引く)、そしてテーブル・3D 参照・CHOOSE の方が良い場面までを解説します。

Henry
Excel OFFSET 関数 — 動く参照(そして INDEX の方が良い場面)

Excel OFFSET 関数 — 動く参照(そして INDEX の方が良い場面)

OFFSET はアンカーから決まった行数・列数だけ離れた参照を返し、必要ならブロック全体へリサイズできます。考え方の軸、なぜ値ではなく参照を返すので SUM に渡せるのか、揮発性という代償、定番の動的名前付き範囲の技とテーブルやスピル範囲が今やそれに勝る理由、端を越えると #REF! になる罠、そして肝心の判断(範囲へのインデックス取り出しには非揮発性の INDEX を使い、OFFSET は本当に動く窓のためだけに残す)を解説します。

Henry
Excel ADDRESS 関数 — セル番地を「文字列」として組み立てる(値ではない)

Excel ADDRESS 関数 — セル番地を「文字列」として組み立てる(値ではない)

ADDRESS はセル番地のテキストを組み立てます — =ADDRESS(1,1) は A1 の中身ではなく、文字列 "$A$1" を返します。考え方の軸(INDIRECT の入力側の逆)、値ではなく文字列を返すという最大の誤解、$ ロックを制御する abs_num 引数、INDIRECT や OFFSET と違ってなぜ揮発性でないのか、本当の用途(MATCH でどこに値があるか報告する・INDIRECT へ渡す参照を組み立てる)、そして現代の Excel でどれほどニッチかについての率直な見解を解説します。

Henry
Excel SUMPRODUCT関数 — 掛けてから足す、SUMIFSでは書けない条件まで

Excel SUMPRODUCT関数 — 掛けてから足す、SUMIFSでは書けない条件まで

SUMPRODUCTは配列を要素ごとに掛け合わせ、その結果を合計します。1つのセルで内積を計算する関数です。次元不一致による#VALUE!の落とし穴、なぜANDでは真偽値配列を掛け算しORでは足し算するのか(AND()/OR()を使ってはいけない理由)、二重マイナス(--)が必要になる場面、そしてSUMIFSでは今なお手が届かない加重合計と列をまたぐORの仕事を解説します。

Henry
Excel SUBTOTAL関数 — フィルターを尊重する集計(と9 vs 109の落とし穴)

Excel SUBTOTAL関数 — フィルターを尊重する集計(と9 vs 109の落とし穴)

SUBTOTALはフィルターを認識する集計です。フィルターで非表示になった行をスキップするので、リストの末尾の数字がフィルターに合わせて更新されます。function_numの一覧表、1〜11 vs 101〜111の落とし穴(手動で行を隠しても集計が変わらない理由)、SUBTOTALが他のSUBTOTALを無視して総合計が二重計上にならない仕組み、そしてエラーをスキップできない理由 — それこそAGGREGATEが作られた目的 — を解説します。

Henry
Excel AGGREGATE関数 — エラーも無視できるSUBTOTALの上位互換

Excel AGGREGATE関数 — エラーも無視できるSUBTOTALの上位互換

AGGREGATEはSUBTOTALに2つの強化を加えたものです。関数が11個ではなく19個になり、エラー値・非表示行・ネストした集計を無視できるoptions引数が付きました。function_num + optionsのグリッド、最も使われていない技 — IFERRORで掃除せずに #N/A を含む列を合計する技 — そして余分なk引数を必要とする配列形式の関数(LARGE、SMALL、PERCENTILE)を解説します。

Henry
Excel FIND・SEARCH — 内容で文字を探す(FIND と SEARCH の違い、そして

Excel FIND・SEARCH — 内容で文字を探す(FIND と SEARCH の違い、そして

FIND と SEARCH は、ある文字列が別の文字列の中で始まる位置を返します。これは MID や LEFT に渡すアンカーです。本当に重要な2つの違い(FIND は大文字小文字を区別しワイルドカード不可、SEARCH は区別せずワイルドカード可)、一致がないとなぜ両方とも #VALUE! を投げるのか、そして ISNUMBER(SEARCH()) の「含むか」判定テクニックを解説します。

Henry
Excel SUBSTITUTE・REPLACE — 内容で置き換えるか、位置で置き換えるか

Excel SUBSTITUTE・REPLACE — 内容で置き換えるか、位置で置き換えるか

SUBSTITUTE と REPLACE はどちらもテキストを置き換えますが、考え方が違います。SUBSTITUTE は内容で一致させ(すべての 'x' を、あるいは N 番目だけを置換)、REPLACE は位置で動きます(5文字目から9文字目を上書き)。どちらを使うか、なぜ SUBSTITUTE が大文字小文字を区別するのか、そして LEN 引く LEN の出現回数カウントのテクニックを解説します。

Henry
Excel ROUND 関数 — ROUND・ROUNDUP・ROUNDDOWN と「表示形式は四捨五入ではない」理由

Excel ROUND 関数 — ROUND・ROUNDUP・ROUNDDOWN と「表示形式は四捨五入ではない」理由

ROUND は格納されている値そのものを指定した小数桁に丸めますが、セルの表示形式は見た目を変えるだけです。この差が請求合計を1円ずれさせる理由、num_digits の使い分け(正・ゼロ・負)、ROUNDUP と ROUNDDOWN が ROUND とどう違うか、そしてなぜ「上下」ではなく「ゼロからの距離」で丸めるのかを解説します。

Henry
Excel MROUND・CEILING・FLOOR — 小数ではなく、最も近い倍数に丸める

Excel MROUND・CEILING・FLOOR — 小数ではなく、最も近い倍数に丸める

MROUND・CEILING・FLOOR は、小数の桁数ではなく、ある数の最も近い倍数 — 5セント、15分、1カートン丸ごと — に丸めます。第2引数が桁数ではなく倍数である理由、古い CEILING が負の数で #NUM! を出す理由、CEILING.MATH と FLOOR.MATH が安全な現代の選択肢である理由、そしてそれぞれをいつ選ぶかを解説します。

Henry
Excel INT・TRUNC・MOD — 小数を落とし、余りを求める

Excel INT・TRUNC・MOD — 小数を落とし、余りを求める

INT と TRUNC はどちらも小数を落としますが、INT はマイナス無限大の方向に丸め、TRUNC は単にゼロへ向けて切り落とすため、負の数で結果が分かれます。MOD は余りを返し、Excel では余りは数値ではなく除数の符号を引き継ぎます。1だけずれるワナ、日付と時刻の分離、シマ模様パターンを解説します。

Henry
ExcelのIF関数 — Yes/Noの分かれ道は一つ、ネストはどこで止めるか

ExcelのIF関数 — Yes/Noの分かれ道は一つ、ネストはどこで止めるか

IFは一つのYes/Noを問い、2つのうち1つの答えを返します。3つ目の引数を省くとFALSEが出る理由、ネストしたIFのピラミッドが2段を超えると崩れる理由(代わりにIFSやルックアップを使う)、ネストせずにAND/ORで条件をまとめる方法、IFの文字列比較が大文字小文字を無視する理由を解説します。

Henry
ExcelのIFS関数とSWITCH関数 — ネストIFのピラミッドなしで多分岐ロジックを

ExcelのIFS関数とSWITCH関数 — ネストIFのピラミッドなしで多分岐ロジックを

IFSは条件のリストを上から下へ確認し、最初に一致したものを返します。SWITCHは1つの値を複数のケースと照合します。バグの大半を生む2つの罠——IFSには既定値(else)がなく、振り分けを忘れると #N/A になること、そして先勝ちなので順序が命であること——に加え、IFS・SWITCH・ルックアップ表の使い分けを解説します。

Henry
ExcelのIFERROR関数 — バグを隠さずにエラーを受け止める(IFERROR vs IFNA)

ExcelのIFERROR関数 — バグを隠さずにエラーを受け止める(IFERROR vs IFNA)

IFERRORは数式のエラーをフォールバック値に置き換えますが、あらゆる種類のエラーを捕まえます——だから #REF! や #NAME? のような本物のバグまで静かに隠します。なぜルックアップにはたいてい IFNA が正しい道具なのか、すべてを IFERROR で包むのがアンチパターンである理由、そして XLOOKUP の if_not_found が両者に勝る理由を解説します。

Henry
ExcelのCOUNTIF & COUNTIFS — 条件に合う行を数える(そして ">"&A1 の罠)

ExcelのCOUNTIF & COUNTIFS — 条件に合う行を数える(そして ">"&A1 の罠)

COUNTIFSはすべての条件を満たした行を数えますが、条件を間違えるとエラーも出さずに「もっともらしいが間違った数」を返します。セルと比較するときは演算子を連結する正しい書き方、ANDは標準でORは別という仕組み、2つの日付の間を数える方法、そして重複を除いた数にはCOUNTIFSではなくUNIQUEが要る理由を解説します。

Henry
ExcelのSEQUENCE関数 — 数値・日付・連番の「生きた」配列を生成する

ExcelのSEQUENCE関数 — 数値・日付・連番の「生きた」配列を生成する

SEQUENCEは数値の配列を何もないところから生み出します。フィルハンドルの代わりではなく、動的配列の連番・日付シリーズ・グリッドを支える「エンジン」です。引数の順番(行、列、開始、増分)、生きたカレンダーの作り方、#SPILL!の直し方、ドラッグやROW()を置き換える場面を解説します。

Henry
Excel VBA の Trim — 空白が消えない理由と Chr(160) の対処法

Excel VBA の Trim — 空白が消えない理由と Chr(160) の対処法

VBA の Trim は両端だけを削り、内側の空白には触れません。さらに、Web や PDF からの貼り付けで紛れ込む非改行スペース Chr(160) も無視します。考え方の軸、使うべき正規化関数 1 つ、そしてどの関数がどの場面で勝つか。Excel 365 / 2021 / 2019 で検証済み。

Henry
VBA InputBox — 2つの InputBox と使い分け

VBA InputBox — 2つの InputBox と使い分け

VBA の InputBox は1つではなく2つあります。単純な InputBox で足りる場面、Type を付けた Application.InputBox が勝つ場面、そして両方を静かに壊す「キャンセルの落とし穴」まで。コピペで動く例、Excel 365 / 2021 / 2019 で動作確認済み。

Henry
VBA UserForm — 本格的な入力フォームを作る

VBA UserForm — 本格的な入力フォームを作る

VBA UserForm を正しく作る方法。イベント駆動の考え方、.Show のあとコードが「消える」理由、そして入力した値を読めるかどうかを決める Unload と Hide のルールまで。コピペで動くイベントコード、Excel 365 / 2021 / 2019 で動作確認済み。

Henry
Excel VBA Whileループ — Excelを固めずにループする方法

Excel VBA Whileループ — Excelを固めずにループする方法

VBAのWhileループは「必ず終わる」という約束であり、それを守るのはあなた。すべてのWhileループに必要な3つの部分、なぜDo WhileがWhile...Wendより良いのか、そして二度とExcelを固めない方法を、コピペ実例とともに。Excel 365 / 2021 / 2019で動作確認済み。

Henry
ExcelのUserFormにおけるSetFocusの完全ガイド:効率的なフォーム制御の実現方法

ExcelのUserFormにおけるSetFocusの完全ガイド:効率的なフォーム制御の実現方法

主要ポイント 1. 基本的な実装方法 UserForm_Activateでの初期フォーカス設定が重要 SetFocusメソッドを効果的に活用 TabIndexによる適切な移動順序の設定 2. 重要な改善点 エラーハンドリングの実装 パフォーマンス最適化 ユーザビリティの向上 3. 実装時の注意点 モードレスフォームでの特別な対応 イベント制御の適切な管理 フォーカス制御のタイミング

Rosa Rugosa
Excel VBAでヘッダーを配列に格納し、検索する方法

Excel VBAでヘッダーを配列に格納し、検索する方法

本記事では、Excel VBAを用いてシートのヘッダー情報を配列に格納し、さまざまな検索・管理手法を実践的に紹介しました。具体的には、MATCH関数で特定の表頭列を特定する方法、正規表現を用いた複雑な文字列マッチング、Dictionaryオブジェクトによるキーと値のペア管理などを解説しています。また、日本語ヘッダーを扱う際の注意点や、大規模データ処理を高速化するためのテクニック(スクリーン更新の停止や計算モードの最適化)も取り上げ、日々のExcel作業をより効率的かつ信頼性高く行うための実践的ノウハウを提供しています。

Rosa Rugosa