VBAの勉強を始めてみた

色々試しています。

データを指定文字で区切ってクリップボードへ転送する

複数選択したセルのデータを指定文字列で区切って連結し、クリップボードへ転送するマクロを作ってみました。
Wordやメール、メモ帳など他のアプリケーションにコピペする際に便利です。

文章の中で、データとデータを区切るために使うのは(コロン)(読点)(カンマ)(ピリオド)(中点)(スラッシュ)(ハイフン) (スペース)あたりでしょうか。

 

ためしに、下のデータを中点で区切ってクリップボードに転送してみました。

f:id:kouten0430:20180309144810j:plain

 

f:id:kouten0430:20180309160849j:plain

 

公的にやる機会は思いつきませんが、顔文字で区切ってみました。

f:id:kouten0430:20180309154302j:plain

 

今回はこれだけです。

 

Sub 指定文字で区切りクリップボードへ転送する()
    'クリップボードへ転送したいセルを選択(複数可)した状態で実行して下さい
    'セルを選択した順にデータを右方向へ連結していきます
    'InputBoxがブランクなら、区切り文字なしで連結していきます
    Dim myRange As Range
    Dim V As String
    Dim dc As String
    Dim myLib As Object
    Set myLib = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")  '参照設定なしでDataObjectのインスタンスを生成する
    
    dc = Application.InputBox(Prompt:="区切り文字を指定して下さい。" & vbCrLf & "(改行にする場合はキャンセルして下さい)", Type:=2)
    
        If dc = "False" Then
            dc = vbCrLf   'キャンセルの場合は区切りを改行にする
        End If

    For Each myRange In Selection.SpecialCells(xlCellTypeVisible)   '可視セルのみに処理を行う
        If myRange.Address = myRange.MergeArea(1).Address Then   '結合セルの場合は左上の値のみ取り出す
            V = V & myRange.Value & dc
        End If
    Next myRange
    
    V = Left(V, Len(V) - Len(dc)) '最後の区切り文字を取り除く

    myLib.SetText V  '変数の値をDataObjectに格納する
    myLib.PutInClipboard 'DataObjectのデータをクリップボードに格納する

End Sub

※SubからEnd Subまでをコピーし、標準モジュール等に貼り付けて使用して下さい。なお、マクロで実行した処理は「元に戻す」ことができません。実行前に一旦保存しやり直しのできる状態にしておいて下さい。標準モジュールにコードを貼り付けてマクロを使用する方法はこちら