VBAの勉強を始めてみた

タイトルの通りVBAの勉強を始めました。仰々しくなく、シンプルな形で効率化を図ることを目指しています。VBA以外の話題もあるよ(笑)

CSV形式でクリップボードにコピーする

今回は、選択した範囲のデータをCSV形式にしてクリップボードへコピーするマクロを作ってみました。
こんな感じです。

CSV形式でコピーしたい範囲を選択し、マクロを実行します。

f:id:kouten0430:20170914221826j:plain


こんな感じでCSV形式でコピーされます。

f:id:kouten0430:20170914222050j:plain


メモ帳などに貼り付けて、拡張子を.csvとして保存すればCSVファイルとして保存することもできます。

 

しかし・・・・・・、それだけでは面白みがないので結合セルのデータに対しても同様にCSV形式でコピーできるようにしてみました。

f:id:kouten0430:20170914222419j:plain

f:id:kouten0430:20170914224601j:plain

このように余分な空白、改行の無い状態でクリップボードへコピーできます。

 

単一セルと結合セルが混在した範囲ではデータがいびつになるので、単一セルのみ、または結合セルのみの範囲で使用していただければ幸いです。

 

***************************************

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を選択)。参照設定の方法はこちら