チートシート

Biscuitがよく取ってくる数式

動くリファレンスです。コピペして、自分の仕事に戻ってください。広告なし、 ポップアップなし、メールをねだるチャットボットもなし。

Biscuitからひとこと: ここではctrl+Fが味方です。15秒以内に何でも 見つけられるようにレイアウトしてあります。
セクション 1

合計とカウント

条件に合う行を数える

=COUNTIF(A:A, "Denver")

A列で「Denver」と完全一致するセルの数を返します。

ワイルドカードで数える

=COUNTIF(A:A, "*Denver*")

部分一致にはアスタリスクを使います。ExcelとGoogle Sheetsで動きます。

複数条件で数える

=COUNTIFS(A:A, ">10", B:B, "active")

各条件と範囲のペアはANDです。OR条件にしたいなら、COUNTIFSを2つ足します。

一致する行だけ合計

=SUMIF(A:A, "Denver", B:B)

A列が「Denver」に等しい行の、B列の値を合計します。

複数条件で合計

=SUMIFS(B:B, A:A, "Denver", C:C, ">=100")

SUMIFSでは値の範囲が最初、それから条件のペア。うっかり逆にしがちです。

累計

=SUM($B$2:B2)

下にドラッグ。アンカーが始点を固定して、相対参照の終点が下がっていきます。

セクション 2

検索

基本のVLOOKUP

=VLOOKUP(A2, Products!A:C, 3, FALSE)

ProductsのA列からA2を探して、3列目を返します。FALSEは完全一致の意味です。

INDEX/MATCH (こっちのほうがいい)

=INDEX(Products!C:C, MATCH(A2, Products!A:A, 0))

Biscuitはこっち派です。列の挿入に強くて、左向きの検索もできます。

XLOOKUP (新しめのExcel)

=XLOOKUP(A2, Products!A:A, Products!C:C)

モダンな置き換え。すっきりしていて、エラー処理もうまいです。Google Sheetsはまだ未対応。

近似一致 (ソート済みデータ)

=VLOOKUP(A2, Brackets!A:B, 2, TRUE)

TRUEはA2以下で最大の値を探します。税率ブラケットに便利です。

二方向検索

=INDEX(Data!B:Z, MATCH(A2, Data!A:A, 0), MATCH(B2, Data!1:1, 0))

行も列も動的にマッチさせます。

セクション 3

テキストとregex

空白を取り除く

=TRIM(A2)

前後のスペースと、内部の重複したスペースを消します。

タイトルケース

=PROPER(A2)

「hello world」が「Hello World」になります。

区切り文字で連結

=TEXTJOIN(", ", TRUE, A2:A10)

TRUEで空白を無視します。

メールからドメインを抜き出す

=MID(A2, FIND("@", A2)+1, LEN(A2))

FINDで@の位置を探して、MIDでその後ろを全部取ります。

Regex extract (Google Sheets)

=REGEXEXTRACT(A2, "[a-zA-Z0-9._+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]+")

どんなごちゃごちゃからでも、最初のメールアドレスを取り出します。

Regex replace

=REGEXREPLACE(A2, "\s+", " ")

あらゆる空白を1個のスペースにまとめます。

セクション 4

日付

今日の日付

=TODAY()

シートが再計算されるたびに更新されます。

2つの日付の間の日数

=B2-A2

日付は内部的には数値です。引き算がそのまま使えます。

日付から月名

=TEXT(A2, "mmmm")

「January」「February」などを返します。

今月の1日

=EOMONTH(TODAY(), -1)+1

EOMONTHは「月末」の意味。1か月戻して1日足します。

ISO週の始まり (月曜)

=A2-WEEKDAY(A2, 3)

WEEKDAYのタイプ3は月曜で0を返すので、引き算すれば月曜に着地します。

日付間の営業日

=NETWORKDAYS(A2, B2)

土曜、日曜、オプションの祝日を除外します。

セクション 5

配列 (Google Sheets)

列全体に数式を適用

=ARRAYFORMULA(A2:A*2)

何千行もドラッグしなくていいです。

SQL風の構文のQUERY

=QUERY(Data!A:D, "SELECT A, SUM(C) WHERE B='active' GROUP BY A", 1)

SQLを書いているつもりで。本当に動きます。

FILTER

=FILTER(A:B, B:B>100, C:C="active")

一致する行を返します。見苦しい配列数式のトリックは要りません。

UNIQUE

=UNIQUE(A:A)

A列のユニークな値を全部返します。見つけた順で、アルファベット順ではありません。

SORT

=SORT(A2:C, 2, FALSE)

2列目で降順にソートします。

セクション 6

VBAスニペット

アクティブ以外のシートを全部隠す

Sub HideOthers()
  Dim s As Worksheet
  For Each s In ThisWorkbook.Worksheets
    If s.Name <> ActiveSheet.Name Then s.Visible = xlSheetHidden
  Next s
End Sub

ブックを今触っているシートだけにさっと縮めたいときに。

使用範囲の空行を削除

Sub KillEmpties()
  Dim r As Long
  For r = ActiveSheet.UsedRange.Rows.Count To 1 Step -1
    If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
  Next r
End Sub

後ろから走っているので、削除しても行番号がずれません。

フォルダ内の全ファイルを開く

Sub LoopFolder()
  Dim f As String
  f = Dir("C:\path\to\folder\*.xlsx")
  Do While f <> ""
    Workbooks.Open "C:\path\to\folder\" & f
    f = Dir()
  Loop
End Sub

クラシックなDirループ。月次レポートが入ったフォルダにぴったりです。

欲しいものが見つかりませんでしたか?

プレイグラウンドで説明してください。Biscuitはけっこう早く覚えます。

日本語で必要なものを教えてください。数式を取ってきます。
プレイグラウンドを試す