この状況について
四半期レポートの列A、C、Eなど、複数の離れた範囲をCtrlキーを押しながら選択し、セルの結合、並べ替え、または書式の適用を試みると、Excelは即座に次のエラーを表示します:
This action won't work on multiple selections.
ハイライトが消え、何も適用されません。これは、レポートの整理作業の途中で突然直面するExcelの制限のひとつです。
Excelがこの操作をブロックする理由
根本的な原因は「形状」にあります。Excelは連続範囲(A1:C10のような一つの矩形)と非連続選択(Ctrlキーで繋いだ離れた領域)を明確に区別しています。「結合」や「並べ替え」のような操作は、単一の明確な矩形を必要とします。列Aと列Cを別々に選択した場合、Excelは結合セルをどこに配置すべきか、または並べ替えの表がどこから始まりどこで終わるかを判断できません。
非連続選択でこのエラーが発生する操作:
- セルを結合して中央揃え — 単一の矩形が必要
- 並べ替え — 連続した単一のデータ範囲が必要
- 行または列の挿入・削除 — 選択範囲が異なる行や列にまたがる場合
- 貼り付け → 行列を入れ替える
- 行・列のグループ化(データ → グループ化)
- テーブルの作成(Ctrl+T)
非連続選択で有効な操作:基本的な書式設定(太字、塗りつぶしの色、フォントサイズ、表示形式)、内容のクリア、Deleteキーによるセル内容の削除。
簡単な解決策:範囲を一つずつ操作する
最も手早い回避策は、最初の範囲をクリックして操作を実行し、次の範囲に移動することです。列が8つある場合は手間がかかりますが、データが壊れるリスクはゼロです。
結合に限っては、代わりに選択範囲内で中央揃えを試してみてください。見た目は結合セルと同じですが、実際には結合しないため、エラーを完全に回避できます。
- 中央揃えにしたいセルを選択する
- Ctrl+1 → 「配置」タブ
- 横位置:選択範囲内で中央揃え
- OK
各セルのIDが維持されるため、数式、並べ替え、フィルターはすべて正常に機能します。
VBAによる修正:すべての領域に操作を適用する
この作業を繰り返し行う場合は、Selection.Areasをループする短いマクロで対応できます。各Areaは、非連続選択内の個別の連続サブ範囲で、個々のピースを表すExcelの内部的な仕組みです。
例:非連続の各ブロックを個別に結合する
Sub MergeEachArea()
Dim area As Range
For Each area In Selection.Areas
With area
.Merge
.HorizontalAlignment = xlCenter
End With
Next area
End Sub
例:各エリアを個別に並べ替える
Sub SortEachArea()
Dim area As Range
For Each area In Selection.Areas
area.Sort Key1:=area.Cells(1, 1), Order1:=xlAscending, Header:=xlYes
Next area
End Sub
例:すべてのエリアに表示形式を適用する
Sub FormatAllAreas()
Dim area As Range
For Each area In Selection.Areas
area.NumberFormat = "#,##0.00"
Next area
End Sub
実行方法:Alt+F11 → 挿入 → 標準モジュール → コードを貼り付け → F5、またはリボンのボタンに割り当てる。
非連続範囲への形式を選択して貼り付け
ここでの貼り付けエラーは、通常、ソースだけでなく貼り付け先が非連続であることが原因です。貼り付け先に空白がある場合、Excelはコピーされた各セルを明確な配置先にマッピングできません。
対処法は二つあります:最初の貼り付け先範囲に貼り付けてから、以降の範囲それぞれにCtrl+Y(繰り返し)を使用するか、一時的な連続ブロックに貼り付けてから、実際の貼り付け先に一つずつ切り取って貼り付けます。
書式のコピーによる回避策
書式のコピーは複数の選択範囲を問題なく扱えます。ブラシをダブルクリックしてロックし、対象の範囲を順番にクリックします。終わったらEscキーを押します。純粋な書式設定作業であれば、コードなしでエラーを回避できます。
ワークフローの恒久的な改善
毎週この問題に直面する場合は、VBAマクロを個人用マクロブック(PERSONAL.XLSB)に保存しておくと、現在のファイルだけでなくすべてのファイルで利用できます。さらに、クイックアクセスツールバーのボタンに割り当てておきましょう。
- PERSONAL.XLSBを開き(Alt+F11 → VBAProject (PERSONAL.XLSB) → 挿入 → 標準モジュール)、Areaループマクロを貼り付ける
- ファイル → オプション → クイックアクセスツールバー → コマンドの選択:マクロ
- マクロを追加し、表示名とアイコンを設定する
次回以降:Ctrlキーを押しながら非連続範囲を選択し、ツールバーボタンを一度クリックするだけで完了です。
動作確認
- VBAループの実行後、各エリアをクリックして操作が適用されていることを確認する — 結合、並べ替え、または書式設定が期待通りに行われているか確認する
- 結合の場合:結合されたエリア内のセルをクリック → 名前ボックス(左上)がA1だけでなくA1:C1のような範囲を表示しているか確認する
- 並べ替えの場合:ヘッダー行が正しい位置にあり、データ行が昇順になっているか確認する
- エラーダイアログが表示されなければ成功。サイレントな失敗を検知するためにエラーハンドリングを追加する:
Sub MergeEachAreaSafe()
Dim area As Range
On Error Resume Next
For Each area In Selection.Areas
area.Merge
If Err.Number <> 0 Then
MsgBox "Merge failed on " & area.Address & ": " & Err.Description
Err.Clear
End If
Next area
End Sub

