VBAの勉強を始めてみた

タイトルの通りVBAの勉強を始めました。効率化と暇つぶしを兼ねています。VBA以外の話題もあるよ(笑)

クリップボードのデータを結合セルへ貼り付ける

通常、クリップボードのデータを結合セルに貼り付けようとすると・・・・・・

f:id:kouten0430:20170712185819j:plain

このように、「この操作は結合したセルには行えません」等のエラーメッセージが表示され、貼り付けることができません。

 

そのようなモヤモヤを解消し、ストレスなく仕事を行うために今回のマクロを作ってみました。

 

下記のようなクリップボードのデータを・・・・・・

f:id:kouten0430:20170712190258j:plain

 

このように、結合セルに貼り付けることができます。

f:id:kouten0430:20170712190740j:plain

 

ちなみに、結合セルと単一セルが混在していても、貼り付けできます。

f:id:kouten0430:20170712191415j:plain

 

ついでに可視セルのみに貼り付ける機能も追加しました。(画面上非表示のセルには貼り付けしません)

 

 今回のマクロを使用するには、事前にVBEからMicrosoft Forms 2.0 Object Libraryを参照設定する必要があります。
(ツール→参照設定→参照からWindows\System32\FM20.DLLを選択)

 

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

Sub クリップボードのデータを結合セルへ貼り付け()
    'Microsoft Forms 2.0 Object Libraryを参照設定して下さい

    Dim Dobj As DataObject
    Dim V As Variant
    Dim i As Integer
    Dim Y As Integer
    Dim X As Integer
   
    Set Dobj = New DataObject
    With Dobj
        .GetFromClipboard
        On Error Resume Next
        V = .GetText
        On Error GoTo 0
    End With
   
    If Not IsEmpty(V) Then
        V = Split(CStr(V), vbCrLf)
        i = 0
        Y = ActiveCell.Row
        X = ActiveCell.Column

        Do While i <= UBound(V)
            If Cells(Y, X).Address = Cells(Y, X).MergeArea(1).Address _
            And Rows(Y).Hidden = False Then
                A = CStr(V(i))
                Cells(Y, X).Value = A
                Y = Y + 1
                i = i + 1
            Else
                Y = Y + 1
            End If
        Loop
    Else
        MsgBox "クリップボードにデータがありません!"
    End If

End Sub

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

 ※SubからEnd Subまでをコピペしてマクロを使用できます。使用の際は自己責任でお願いいたします。

 

下記のマクロも合わせて使うとより効果的です。 

kouten0430.hatenablog.com