CSV形式でクリップボードにコピーする
今回は、選択した範囲のデータをCSV形式にしてクリップボードへコピーするマクロを作ってみました。
こんな感じです。
CSV形式でコピーしたい範囲を選択し、マクロを実行します。
こんな感じでCSV形式でコピーされます。
メモ帳などに貼り付けて、拡張子を.csvとして保存すればCSVファイルとして保存することもできます。
しかし・・・・・・、それだけでは面白みがないので結合セルのデータに対しても同様にCSV形式でコピーできるようにしてみました。
このように余分な空白、改行の無い状態でクリップボードへコピーできます。
単一セルと結合セルが混在した範囲ではデータがいびつになるので、単一セルのみ、または結合セルのみの範囲で使用していただければ幸いです。
***************************************
Sub CSV形式でクリップボードに格納()
'Microsoft Forms 2.0 Object Libraryを参照設定して下さい
'正方形または長方形のような連続した選択範囲とする
'結合セルも単一セル同様のCSV形式にします(ただし、結合セルと単一セルを混在すると歪になります)
Dim i As Long
Dim j As Long
For i = Selection.Row To Selection.Rows(Selection.Rows.Count).Row
For j = Selection.Column To Selection.Columns(Selection.Columns.Count).Column
If Cells(i, j).Address = Cells(i, j).MergeArea(1).Address And _
Rows(i).Hidden = False And Columns(j).Hidden = False Then '結合セルの場合は左上の値のみ取り出す。非表示セルは処理しない
If Cells(i, j).MergeArea(1).Address = Cells(i, Selection. _
Columns(Selection.Columns.Count).Column).MergeArea(1).Address Then
'選択範囲の最終列(最終列を含む結合セル)であれば末尾に改行を追加
V = V & Replace(Cells(i, j).Value, vbLf, "") & vbCrLf
Else
'選択範囲の最終列(最終列を含む結合セル)以外は末尾にカンマを追加
V = V & Replace(Cells(i, j).Value, vbLf, "") & ","
End If
End If
Next j
Next i
V = Left(V, Len(V) - 2) '最終行の改行区切りを取り除く(CrLfは2文字)
With New MSForms.DataObject
.SetText V '変数の値をDataObjectに格納する
.PutInClipboard 'DataObjectのデータをクリップボードに格納する
End With
End Sub
***************************************
※SubからEnd Subまでをコピーし、標準モジュール等に貼り付けて使用して下さい。なお、マクロで実行した処理は「元に戻す」ことができません。実行前に一旦保存しやり直しのできる状態にしておいて下さい。標準モジュールにコードを貼り付けてマクロを使用する方法はこちら。
※上記のマクロは外部ライブラリを使用します。VBEでMicrosoft Forms 2.0 Object Libraryを参照設定して下さい(ツール→参照設定→参照からWindows\System32\FM20.DLLを選択)。参照設定の方法はこちら。