【Excelマクロ】選択中のセルの文字列を連結してクリップボードに格納する

テーマはエクセルのマクロ Excelの話

Webなどから表をExcelに貼り付けた時に文字列が複数のセルに分かれて張り付くことがあります。そんな時に便利な複数のセルを文字列として結合して一つの文字列にまとめクリップボードに格納するマクロを紹介します。

選択中のセルの文字列を結合してクリップボードに格納する

まずは、完成版のVBAのコードです。解説は記事の後半に書いています。

Sub Combine_Strings()
'選択中のセルの文字列を結合してクリップボードに格納する
Dim out_str As String
Dim c As Range

out_str = ""
For Each c In Selection
    If out_str = "" Then
        out_str = c
    Else
        out_str = out_str & Chr(10) & c
    End If
Next

Dim clip_board As Object
Set clip_board = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
clip_board.SetText out_str
clip_board.PutInClipboard

End Sub

Excelのシートで複数のセルを選択した状態でこのマクロを実行して使います。

マクロの実行前
複数のセルを選択してマクロを実行します

すると、この選択したセルの文字列がセル内改行で結合されてクリップボードに格納されます。

次に、任意のセルで入力状態にして Ctrl+V などで貼り付けするとセルに結合した文字列が入力されます。

マクロの実行後
貼り付けると文字列が結合されています

実行時のポイントとしては、貼り付けるときは、セルを選択ではなく入力中にする必要があります。
ダブルクリックやF2キーで数式や文字列の入力状態にしてから貼り付けしてください。

コードの解説

前半:選択中のセルの文字列を結合する

コードの前半で、選択中のセルの内容を文字列として結合して変数に格納しています。

out_str = ""
For Each c In Selection
    If out_str = "" Then
        out_str = c
    Else
        out_str = out_str & Chr(10) & c
    End If
Next

8行目:結合後の文字列が空のとき、つまり最初のセルのときは改行コードを付けず、セルの文字列をそのまま格納しています。

11行目:セル内の改行コードとして「Chr(10)」を使って文字列を結合しています。

後半:クリップボードに格納する

前半で変数に格納した文字列を後半でクリップボードに格納しています。

Dim clip_board As Object
Set clip_board = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
clip_board.SetText out_str
clip_board.PutInClipboard

15行目:クリップボードの変数を宣言しています。

16行目:遅延バインディングでクリップボードにアクセスするためのオブジェクトを生成します。

17行目:変数out_str の内容をクリップボードのオブジェクトに設定します。

18行目:設定されたテキストをクリップボードにコピーします。

17行目と18行目はセットです。

まとめ

このVBAコードを使用することで、Excelのセル内のテキストデータを簡単に結合してクリップボードにコピーできます。

クリップボードに格納されるため、Excel外のメモ帳やWord、WordPressなどにも貼り付けることも可能です。

コメント

タイトルとURLをコピーしました