読者です 読者をやめる 読者になる 読者になる

end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転します

vbaでクリップボードの値を改行で分割し、それぞれのセルに貼り付け

先程のvbaマクロで、貼付け先のセルが、複数セルを結合したものである場合 結合されたそれぞれのセルに値がsetされるので、更に修正。

Sub AddClickMenu()
  With CommandBars("Cell").Controls.Add(Before:=1)
    .Caption = "値と数値の書式を貼り付け"
    .OnAction = "PasteValAndForm2"
  End With
End Sub

Sub DelClickMenu()
    CommandBars("Cell").Controls("値と数値の書式を貼り付け").Delete
End Sub

Sub PasteValAndForm()
    ActiveWindow.ActiveCell.PasteSpecial Paste:=xlPasteValuesAndNumberFormats
End Sub

Sub PasteValAndForm2()

    Dim newVals As Variant
    Dim clippedTxt As String

    ' New MSForms.DataObjectを使用するには、VBAのツールから
    ' 「参照設定」→更に「参照」で C:\Windows\System32\FM20.DLL の追加要
    With New MSForms.DataObject
        .GetFromClipboard    ''変数のデータをDataObjectに格納する
        clippedTxt = .GetText
        newVals = Split(clippedTxt, vbLf)
    End With

    Dim newValsSize As Integer
    newValsSize = UBound(newVals)
    
    Dim col As Integer
    Dim row As Integer
    
    col = ActiveWindow.ActiveCell.Column
    row = ActiveWindow.ActiveCell.row

    Dim i As Integer
    For i = 0 To newValsSize
        ActiveSheet.Cells(row + i, col).Value = newVals(i)
    Next
End Sub