では「Excelで選択したセルの値をすべて結合して、1行の文字列にまとめてクリップボードにコピーする」実践VBAサンプルを作ります。
これを使うと、例えば表の一部を簡単にテキストとして他アプリに貼り付けられます。
選択範囲のセルを結合してクリップボードにコピーするVBA
' 参照設定が不要な簡易クリップボードコピー版
' 標準モジュールに貼って使えます
Sub CopySelectionAsText()
Dim rng As Range
Dim cell As Range
Dim result As String
' 選択範囲を取得
Set rng = Selection
' 行単位で処理
Dim r As Long, c As Long
Dim rowCount As Long, colCount As Long
rowCount = rng.Rows.Count
colCount = rng.Columns.Count
For r = 1 To rowCount
For c = 1 To colCount
result = result & rng.Cells(r, c).Value
' 列の間はカンマで区切る
If c < colCount Then result = result & ", "
Next c
' 行の最後は改行
If r < rowCount Then result = result & vbCrLf
Next r
' クリップボードにコピー
Dim DataObj As Object
Set DataObj = CreateObject("MSForms.DataObject")
DataObj.SetText result
DataObj.PutInClipboard
MsgBox "選択範囲を文字列としてコピーしました。" & vbCrLf & _
"内容はクリップボードにあります。"
End Sub
VB使い方
- Excelでコピーしたいセル範囲を選択。
- VBAで上のマクロを実行(F5)。
- 選択範囲の内容が 1行ずつ改行、列は カンマ区切り でまとめられてクリップボードに入る。
- Ctrl+V で他アプリ(メモ帳やメールなど)に貼り付け可能。
ポイント・応用
result = result & rng.Cells(r, c).Value部分を自由に変更して、文字列の前後に装飾をつけたり、タブ区切りに変えたりできる:result = result & "[" & rng.Cells(r, c).Value & "]"- 行末の改行を
vbCrLfからvbTabに変えれば、1行にまとめたタブ区切りも可能。 - 配列にまとめてから
Joinすると、大量セルの処理も高速化できる。
応用例:
- Excelの表をそのままメール本文に貼りたいとき。
- 複数シートのデータをまとめて1つの文字列にしてログやレポート用に加工。
- CSV形式で簡単にコピーして他アプリに貼り付け。
ではさらに便利に、選択範囲を自由に区切り文字(タブ、カンマ、任意文字)で1行にまとめてクリップボードにコピーする高度版VBA を作ります。
' 高度版:選択範囲を1行にまとめてクリップボードにコピー
' 区切り文字を自由に変更可能
' 標準モジュールに貼って実行
Sub CopySelectionCustomDelimiter()
Dim rng As Range
Dim cell As Range
Dim result As String
Dim delimiter As String
' 区切り文字をユーザーに入力
delimiter = InputBox("区切り文字を入力してください(例:カンマ, タブ, 空白など)", "区切り文字の指定", ", ")
If delimiter = "" Then delimiter = ", " ' デフォルトはカンマ
' 選択範囲を取得
Set rng = Selection
Dim r As Long, c As Long
Dim rowCount As Long, colCount As Long
rowCount = rng.Rows.Count
colCount = rng.Columns.Count
' 選択範囲の値を1行にまとめる
For r = 1 To rowCount
For c = 1 To colCount
result = result & rng.Cells(r, c).Value
' 最後の列以外は区切り文字を追加
If c < colCount Then result = result & delimiter
Next c
' 行の間にスペースや改行を入れたければここで変更
If r < rowCount Then result = result & vbCrLf
Next r
' クリップボードにコピー
Dim DataObj As Object
Set DataObj = CreateObject("MSForms.DataObject")
DataObj.SetText result
DataObj.PutInClipboard
MsgBox "選択範囲を1行にまとめてコピーしました。" & vbCrLf & _
"区切り文字: """ & delimiter & """"
End Sub
VB使い方
- Excelでコピーしたいセル範囲を選択。
- マクロを実行すると、区切り文字を入力するダイアログが表示される。
- 例:
,→ カンマ区切り \tまたはTab→ タブ区切り- 空白
" "もOK
- 例:
- 選択範囲の内容が、指定した区切り文字で結合され、クリップボードにコピーされる。
- Ctrl+V で他アプリに貼り付け可能。
応用例・カスタマイズ
- 改行の制御
- 行ごとに改行を入れたくなければ、
vbCrLfの部分を削除する。
- 行ごとに改行を入れたくなければ、
- 装飾の追加
- 文字列を
"[" & rng.Cells(r,c).Value & "]"のように囲むと、見やすい形式に。
- 文字列を
- 大量データの高速化
Variant型の配列に一旦読み込み、Joinで結合すると処理が高速化できる。
' 配列とJoinで高速化例(行単位でまとめる)
Dim arr() As Variant
arr = rng.Value ' 選択範囲を配列にコピー
Dim rowArr() As String
ReDim rowArr(1 To UBound(arr, 2))
For c = 1 To UBound(arr, 2)
rowArr(c) = arr(1, c)
Next c
result = Join(rowArr, delimiter)
VB- 複数行をまとめて1行にするか、行ごとに改行を入れるか は
vbCrLfを挿入する位置で調整可能。
このマクロのメリット
- 表の一部を簡単にコピーして、メールやチャットに貼り付けられる。
- 区切り文字を自由に変えられるのでCSV作成やタブ区切りデータ作成にも最適。
- 文字列加工の応用に使える基礎ツールになる。

