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などにも貼り付けることも可能です。
コメント