Article

【Excel】Ctrl+Enter で複数セルに同じ値を一括入力する 3 用途

この記事で分かること

Excel で複数セルに同じ値を入れる Ctrl+Enter を、空白セル一括埋め・数式コピー・複数シート同時入力の 3 用途で解説します。

Excel で複数のセルに同じ値を入れたいとき、1 つずつコピペするのは時間の無駄です。Ctrl+Enter を使えば、選択した複数セル全部に同じ値を一発で入力できます。本記事では Ctrl+Enter の 4 ステップ手順 を起点に、(1) 空白セルだけを一気に埋める、(2) 数式を一括適用する、(3) 複数シートに同時入力する別ルート、の 3 用途を 1 ページで網羅します。Excel 2024 で 26 通りの実機検証つき、コピペで動く 配布用 xlsx (8 シート) も用意しました。

Ctrl+Enter で複数セルに同じ値を入れる 4 ステップ

Ctrl+Enter の操作は次の 4 ステップだけです。「Enter キー単独」と動作が違うので、まずここを押さえます。

  1. 入力したいセルをまとめて選択する。連続範囲は始点クリック→Shift+終点クリック、離れたセルは Ctrl を押しながら追加クリックで選びます。
  2. アクティブセル (白く見える 1 つ) に値を入れる。選択した中で枠が太く表示されるセルがアクティブセルです。ここに値を打ち込みます。
  3. Enter ではなく Ctrl を押しながら Enter を押す。これが Ctrl+Enter 操作の本体です。
  4. 選択した全セルに同じ値が入る。アクティブセルに入れた値が、選択範囲のすべてに展開されます。

Enter キー単独との違い: 普通の Enter は「アクティブセル 1 つだけに値を確定し、次のセルへカーソルが移動」します。Ctrl+Enter は「選択中の全セルに同じ値を確定し、カーソルはそのまま留まる」動きです。コピペと違って書式は維持され、罫線や背景色が壊れません。

Ctrl+Enter の 4 ステップ手順を 4 コマで解説したスクリーンショット (選択 → アクティブセル確認 → 値入力 → Ctrl+Enter)
図 1: Ctrl+Enter の 4 ステップ手順 (Excel 2024 実機)

この「単一の値や数式を範囲全体へ展開する」挙動については、Microsoft Graph API のドキュメントでも CTRL+Enter mode に似ているものとして説明されています。出典は Working with Excel in Microsoft Graph です。

Excel の Ctrl+Enter は、Microsoft 公式が API 挙動の説明に引き合いに出すほど定着した操作です。

連続範囲・離れたセル・2 次元範囲、どれでも動く: 連続範囲 (A1:A10) でも、Ctrl で離れたセルだけを拾った選択 (A1, A3, A5) でも、四角形の範囲 (C1:E3) でも動きます。いずれの場合も Ctrl+Enter で全セルに同じ値が入ります。

空白セルだけを一気に埋める (ピボット解除後の名簿に便利)

ピボットテーブルを解除した名簿で、部署名が先頭行にしか残らない状態を見たことがあるでしょうか。これを「直上のセルの値で空白を全部埋める」のが、Ctrl+Enter の 2 つ目の用途です。

F5 からジャンプ、セル選択、空白セルを選ぶ流れを示した操作フロー図
図 2: F5 (ジャンプ) → セル選択 → 空白セル の操作フロー図 (ダイアログ選択肢は Excel 2024 で確認済み、操作順を見やすく再構成)
  1. 埋めたい範囲をまとめて選択する。たとえば部署名の列 A1:A30 を全部選びます。
  2. F5 キーを押して「ジャンプ」ダイアログを開く。左下の「セル選択」ボタンをクリック。
  3. 「空白セル」を選んで OK。これで選択範囲の中の空白セルだけが選び直されます。
  4. アクティブセルに「=A1」のように直上を相対参照する式を入力。アクティブセルが A2 なら =A1、A6 なら =A5 と「自分の 1 つ上」を指す式を書きます。
  5. Ctrl+Enter で確定。全ての空白セルに直上のセルを参照する式が入り、各セルが上の値で埋まります。
ピボット解除後の部署名簿で、空白セルが「=A1」で埋まる Before / After 比較スクリーンショット
図 3: 空白セル一括埋めの Before / After (Excel 2024 実機)

実機で確認した動作です。A1=「営業部」、A4=「総務部」、A7=「経理部」だけ値があり、A2/A3/A5/A6 が空白の状態を用意します。ジャンプから空白セル 4 個を選び、アクティブセル A2 に =A1 と入れて Ctrl+Enter を押すと、A2 と A3 は「営業部」、A5 と A6 は「総務部」で埋まります。

仕上げに「値貼り付け」で式を固定する: 上の手順で入るのは =A1 のような相対参照のです。元の値を 1 つ削除すると芋づる式に壊れるので、運用に渡す前に範囲を選択 → コピー → 同じ場所に「形式を選択して貼り付け → 値」で式を値に固定します。

「関数で空白セルを削除して詰めたい (Ctrl+Enter ではなく数式で処理したい)」場合は、配列内の空白セルを削除して左詰め・上詰めにする計算式 (TEXTJOIN と TEXTSPLIT) を参照してください。本記事は UI 操作で「上の値で埋める」用途を扱います。

数式を複数セルに一括適用する (相対参照と絶対参照の使い分け)

Ctrl+Enter の 3 つ目の用途は、選択した複数セルに数式を一括で入れることです。たとえば B 列の数値を 2 倍した結果を C 列に一気に入れたいとき、C1:C10 を選択して =B1*2 と入れて Ctrl+Enter するだけで完了します。

アクティブセルに合う式を書く (Ctrl+Enter のコツ)

Ctrl+Enter で数式を入れるときの一番のコツは、いま入力しているアクティブセルに合う式を書くことです。たとえば A1:A5 を選択し、A3 がアクティブセルなら、A3 に入れるつもりで =B3*2 と入力します。Ctrl+Enter で確定すると、相対参照がアクティブセル基準で展開されて、A1 には =B1*2、A2 には =B2*2、A3 には =B3*2、A4 には =B4*2、A5 には =B5*2 が入ります。

相対参照 =C4*2 と絶対参照 =$C$4*2 の 2 列比較スクリーンショット
図 4: 相対参照 vs 絶対参照の挙動差 (Excel 2024 実機)

相対参照と絶対参照で挙動が変わる

同じ Ctrl+Enter でも、入力する式に $ 記号を付けるかどうかで結果が全く変わります。

入力した式A1 に入る式A2 に入る式A10 に入る式意味
=B1*2=B1*2=B2*2=B10*2相対参照: 各行で同じ行の B 列を参照
=$B$1*2=$B$1*2=$B$1*2=$B$1*2絶対参照: 全行が B1 を参照 (固定値で一括計算)

「各行で同じ行の値を参照したい」(税率掛け算など) なら相対参照、「全行で固定の 1 セルを参照したい」(共通の係数など) なら絶対参照を使い分けます。

VBA で書くなら Range.Formula を使う: 同じことを VBA で再現する場合、Range("A1:A10").Formula = "=B1*2" のように「明示範囲」に対して Range.Formula を使うのが安全です。Selection.Formula 代入は UI の Ctrl+Enter と挙動が異なり、アクティブセルではなく選択範囲の左上 (A1) 起点で相対展開されます。VBA で「アクティブセル基準で広げたい」場合は、後述の h2-5 の通り対象範囲を Range で明示する書き方にしてください。

配列数式 (Ctrl+Shift+Enter) はまた別の機能で、「数式を範囲ごと配列として評価する」操作です。Ctrl+Enter は単に「同じ値を範囲に展開する」もので、混同しやすいので注意してください。既存の配列数式の範囲を一括選択したいときは 配列数式が適用されている全てのセルを一括選択する手順と効用 を参照してください。

なお、スピル配列や配列数式が広がっている範囲の一部だけを Ctrl+Enter で上書きしようとすると、「配列の一部は変更できません」というエラーで弾かれることがあります。詳しい解除手順は 『配列の一部』エラーの原因と解除方法 にまとめています。

複数シートに同時入力する別ルート (シートのグループ化)

「同じ値を 3 枚のシートの A1 に同時に入れたい」用途には、Ctrl+Enter ではなく シートのグループ化を使います (Microsoft 公式)。

Ctrl+Enter が「同一シート内の複数セル」を対象にするのに対し、シートのグループ化は「複数シートの同位置」を対象にする、別の機能です。

  1. 1 枚目のシートタブをクリックして開く。
  2. Ctrl を押しながら 2 枚目以降のシートタブをクリック。連続シートなら Shift クリックでもまとめて選べます。
  3. タイトルバーの末尾に「グループ」(英語版は「Group」) と表示されます。これがグループ化されたサインです。
  4. そのまま 1 枚目で値を入力すると、選択したすべてのシートの同じセルに同じ値が入ります。
  5. 作業が終わったら別のシートタブを右クリック →「シートのグループ解除」で解除します。
シートタブが複数白く反転し、タイトルバーに「グループ」と表示されたスクリーンショット
図 5: シートのグループ化中はタイトルバーに「グループ」と表示される (Excel 2024 実機)

UI 操作と VBA / COM では挙動が違う

注意点がひとつあります。シートのグループ化中に値を入れる操作は、UI からの入力と VBA / COM 経由のセル代入で結果が変わります

UI 入力では両シートに反映、VBA 経由の Range.Value 代入では片方のシートだけに反映、を対比した図解
図 6: 同じ「グループ化中の入力」でも、UI 操作と VBA で結果が違う (Excel 2024 実機検証に基づく図解)
経路Sheet1 + Sheet2 グループ化中の A1 への入力反映先
UI (キーボード入力)A1 に「共通値」と打って EnterSheet1 と Sheet2 の両方の A1 に「共通値」
VBA / COMSheet1.Range("A1").Value = "共通値"Sheet1 の A1 のみ。Sheet2 は空のまま

VBA で複数シートに一括で値を入れたいときは、後述の h2-5 のとおり SelectedSheets ループまたは FillAcrossSheets を使います。グループ化に頼った VBA は思わぬ事故を生むので、コードを書く側では「明示的にループする」のが安全です。

VBA で同じことをするときの定番コード

マクロから Ctrl+Enter 相当の操作をしたいときの、用途別のコードを 3 つまとめます。すべて Excel 2024 で動作確認済みです。

VBE エディタで SpecialCells(xlCellTypeBlanks) のコードを表示し、実行後の結果を並べたスクリーンショット
図 7: SpecialCells(xlCellTypeBlanks) で空白セルだけに値を代入する VBA (Excel 2024 実機)

空白セルだけを一括で埋める (UsedRange 制約に注意)

空白セルだけに「未配属」と入れる典型例です。Range.SpecialCells メソッドの xlCellTypeBlanks 指定で「空白セル」の集合を取得できます。

Sub FillBlanksWithValue()
    Dim target As Range
    Dim safeRange As Range
    Dim blanks As Range
    Set target = ThisWorkbook.Worksheets("Sheet1").Range("A1:A7")
    ' UsedRange と交差させて、データのない領域を除外する (重要)
    Set safeRange = Intersect(target, target.Worksheet.UsedRange)
    If safeRange Is Nothing Then Exit Sub
    On Error Resume Next
    Set blanks = safeRange.SpecialCells(xlCellTypeBlanks)
    On Error GoTo 0
    If Not blanks Is Nothing Then
        blanks.Value = "未配属"
    End If
End Sub

注意: SpecialCells(xlCellTypeBlanks) は「シートの UsedRange (使用範囲) と指定範囲の交差」を返します。たとえば A1:A6 を指定しても、UsedRange が A1:A4 までしかなければ、A5 と A6 は空白と判定されません。上のコードのように Intersect(target, target.Worksheet.UsedRange) を経由して、UsedRange の外側を扱わないように絞り込むのが安全な書き方です。

複数シートに一括で値を入れる 2 つの安全な経路

h2-4 で見たとおり、シートをグループ化していても、VBA / COM から Sheet1.Range("A1").Value = ... のように直接代入すると、値は Sheet1 にしか入りません。次のコードは NG 例で、グループ化中でも片方のシートしか更新されないので、複数シートに一括代入したい用途では使えません。

' NG 例: グループ化中でも Sheet1 にしか入らない
ThisWorkbook.Worksheets(Array("Sheet1", "Sheet2")).Select
ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = "共通値"  ' Sheet1 のみ反映、Sheet2 は空のまま

VBA から確実に複数シートへ一括代入したいときは、次の 2 つの安全な経路を使い分けます。どちらも Excel 2024 で動作確認済みです。

' 安全な経路 1: SelectedSheets を For Each でループする (汎用)
Sub FillSelectedSheets()
    Dim sh As Worksheet
    For Each sh In ActiveWindow.SelectedSheets
        sh.Range("A1").Value = "共通値"
    Next sh
End Sub
' 安全な経路 2: Sheets.FillAcrossSheets (公式メソッド、値・書式まとめてコピー)
Sub FillAcrossSheetsExample()
    Dim wb As Workbook
    Set wb = ThisWorkbook
    wb.Worksheets("Sheet1").Range("A1").Value = "共通値"
    wb.Worksheets(Array("Sheet1", "Sheet2", "Sheet3")).FillAcrossSheets _
        wb.Worksheets("Sheet1").Range("A1"), xlFillWithAll
End Sub

経路 1 はループで全シートに代入するシンプルな方法。経路 2 は Sheets.FillAcrossSheets という公式メソッドです。引数 xlFillWithAll / xlFillWithContents / xlFillWithFormats で「値・書式・両方」を選んでコピーできます。

VBA SpecialCells の罠の詳細VBA フィルター後の最終行は End(xlUp) だけでは危険|可視セルで取る 3 解法 でも整理しています。可視セル限定や最終行判定で同じパターンを使う場合はそちらが参考になります。

うまく動かない・想定外の結果になるときのチェック項目

結合セルを含む範囲でオートフィルを実行したときに出る警告文「この操作には、同じサイズの結合セルが必要です」の再現画像
図 8: 結合セルを含む範囲のオートフィルで出る警告文 (文言は Excel 2024 で確認、画像は再現)

UI 操作で詰まりやすいポイント

結合セルが混ざっている範囲はオートフィルや並べ替えでエラーになる: 結合セルを含む範囲でオートフィルや並べ替えを実行すると、Excel がエラーを返します。具体的な文言は「この操作には、同じサイズの結合セルが必要です」または「そのコマンドは複数の選択範囲に対して実行できません」です。詳細は Microsoft 公式日本語 を参照してください。

結合セルを含む範囲への代入自体は Range API 経由では入ることもあります(値は結合先頭のセルに格納)。ただし結合セルが混ざった範囲は別操作でエラーになりやすいので、作業前にいったん結合を解除しておくのが安全です。

フィルターで隠れている行には入らない: オートフィルターで非表示になっている行を含む範囲を選択して Ctrl+Enter で値を入れても、表示されている行にしか値は入りません。これは UI の意図どおりで、隠している行を勝手に書き換えない仕様です。「非表示行もまとめて埋めたい」ときは、いったんフィルターを解除してから操作してください。

入力規則 (リスト) が設定されているセルに違反値を Ctrl+Enter すると弾かれる: 入力規則が設定された範囲に、リストにない値を Ctrl+Enter で入れようとすると、Excel が警告ダイアログを出します。UI 操作では入力規則は尊重されます (後述の VBA 経由とは挙動が異なります)。

「007」のように先頭ゼロを残したい: 数字に見える文字列をそのまま入れると、Excel が自動で数値化してしまい先頭の 0 が消えます。UI と VBA のいずれの経路でも同じ挙動です。入れる前にセルの書式を「文字列」(NumberFormat = "@" 相当) に切り替えておけば、"007" がそのまま文字列として保持されます。日付に見える文字列 ("2026/05/16" など) も同様に自動変換されるので、コード番号や ID 番号を扱うときは事前に書式を設定します。

Ctrl+Shift+Enter (配列数式) と混同しない: Ctrl+Enter は「同じ値を範囲に展開する」、Ctrl+Shift+Enter は「数式を配列として評価する」別機能です。動的配列対応の Excel では新規入力で Ctrl+Shift+Enter を使う場面は減りましたが、古いブックを開いて見たことがある場合の区別として覚えておくと安全です。

「既存の値を一気に X 倍したい」場合はこちら: 入力済みの数値を全部 1.1 倍に上げる、といった用途は Ctrl+Enter ではなく「形式を選択して貼り付け」の演算オプションを使います。手順は セルに入力されている数値を○倍に一括更新するには にまとめています。

VBA・COM 経由ならではの注意点

VBA は入力規則を回避してしまう: UI からの Ctrl+Enter は入力規則に違反する値を弾きますが、Range.ValueRange.Formula 経由の代入では違反値もそのまま入ります。Validation.Value プロパティを読み戻すと False になり、値だけが規則違反のまま残ります。マクロで一括入力する場合は、コード側で値の妥当性チェックを入れる必要があります。

「=B1*2」のような文字列を Range.Value に代入しても数式評価される: 通常書式のセルに Range.Value = "=B1*2" を代入すると、文字列ではなく数式として評価されます。文字列のまま保持したい場合は、事前にセルの NumberFormat"@" にしてから代入します。掲載コードでは意図を明確にするため、数式を入れるなら Range.Formula、文字列を入れるなら書式 "@" + Range.Value と使い分けるのが読み手にとって安全です。

Selection.Formula 代入は UI の Ctrl+Enter と同じではない: A1:A5 を選択して A3 をアクティブセルにし、Selection.Formula = "=B3*2" を実行したとします。このとき相対参照は選択範囲の左上 A1 を起点に展開され、A1:A5 には =B3*2 〜 =B7*2 が入ります。UI の Ctrl+Enter ならアクティブセル A3 基準で =B1*2 〜 =B5*2 になるところです。掲載 VBA では Selection ではなく明示的に Range("A1:A5").Formula を使い、起点を Range の左上に合わせる前提でコードを書いてください。

シートグループ化中の代入は単一シートのみ: Worksheets(Array(...)).Select でグループ化しても、その後の Sheet1.Range("A1").Value は Sheet1 のみに反映されます。VBA で複数シートに一括代入したい場合は、h2-5 の経路 1 (SelectedSheets ループ) と経路 2 (FillAcrossSheets) を使い分けてください。

SpecialCells は UsedRange の外側を見ない: 上で触れたとおり、SpecialCells(xlCellTypeBlanks) は UsedRange と指定範囲の交差を返します。データが入っていない領域の空白セルは取得できません。Intersect(target, target.Worksheet.UsedRange) でいったん絞り込んでから SpecialCells を呼ぶのが安全テンプレです。

3 用途の使い分けと配布サンプル

Ctrl+Enter は「選択した複数セルに同じ値を一気に入れる」操作で、主な使い方は次の 3 つです。

  • (1) 同じ値の一括入力: セルを選択 → 値入力 → Ctrl+Enter (h2-1)
  • (2) 空白セルだけを上の値で埋める: 範囲選択 → F5 → 空白セル → =A1 → Ctrl+Enter (h2-2)
  • (3) 数式の相対参照を一括展開: 範囲選択 → =B1*2 → Ctrl+Enter (h2-3)

「同じ値を複数シートの同じセルに入れたい」場合はシートのグループ化、「マクロから自動化したい」場合は h2-5 の VBA テンプレを使い分けてください。コピペで動く Excel 2024 サンプルファイル (8 シート、結合セル罠も含む) を上の配布カードからダウンロードできます。

Next Read

このあと読む記事

今の内容に近い記事から、次の1本と補助記事を続けて見つけられるようにしています。

Keep Exploring

このテーマをさらに探す

同じテーマの入口記事と更新記事を、一覧の形でまとめています。

コメント