web-dev-qa-db-ja.com

Excel VBA Copy Paste Values only(xlPasteValues)

SheetAの列全体をSheet Bにコピーしようとしています。sheetA列には、formulsで形成された値があります。 xlPasteValuesのみを使用してSheetA列の値をコピーしています。ただし、値を別のsheetBに貼り付けることはありません。 sheetBの列は空です。私のVBAコード

    Public Sub CopyrangeA()

    Dim firstrowDB As Long, lastrow As Long
    Dim arr1, arr2, i As Integer

    firstrowDB = 1
    arr1 = Array("BJ", "BK")
    arr2 = Array("A", "B")

         For i = LBound(arr1) To UBound(arr1)
        With Sheets("SheetA")
           lastrow = Application.Max(3, .Cells(.Rows.Count, arr1(i)).End(xlUp).Row)
           .Range(.Cells(1, arr1(i)), .Cells(lastrow, arr1(i))).Copy
           Sheets("SheetB").Range(arr2(i) & firstrowDB).PasteSpecial xlPasteValues
        End With
    Next
    Application.CutCopyMode = False

End Sub
27
sam

列全体をコピーする場合は、次のようなことを行うことでコードを大幅に簡素化できます。

Sub CopyCol()

    Sheets("Sheet1").Columns(1).Copy

    Sheets("Sheet2").Columns(2).PasteSpecial xlPasteValues

End Sub

または

Sub CopyCol()

    Sheets("Sheet1").Columns("A").Copy

    Sheets("Sheet2").Columns("B").PasteSpecial xlPasteValues

End Sub

または、ループを維持する場合

Public Sub CopyrangeA()

    Dim firstrowDB As Long, lastrow As Long
    Dim arr1, arr2, i As Integer

    firstrowDB = 1
    arr1 = Array("BJ", "BK")
    arr2 = Array("A", "B")

    For i = LBound(arr1) To UBound(arr1)

        Sheets("Sheet1").Columns(arr1(i)).Copy

        Sheets("Sheet2").Columns(arr2(i)).PasteSpecial xlPasteValues

    Next
    Application.CutCopyMode = False

End Sub
40
OSUZorba

コピー/ペーストせずに行きます

      Sheets("SheetB").Range(arr2(i) & firstrowDB).Resize(lastrow, 1).Value = .Range(.Cells(1, arr1(i)), .Cells(lastrow, arr1(i))).Value
11
robotik

個人的には、必要なのが列だけである場合、少し短くします。

For i = LBound(arr1) To UBound(arr1)
    Sheets("SheetA").Columns(arr1(i)).Copy
    Sheets("SheetB").Columns(arr2(i)).PasteSpecial xlPasteValues
    Application.CutCopyMode = False
Next

このコードスニペットのように、lastrowまたはfirstrowDBにはあまり意味がありません

2
bmgh1985

私も以前にこの問題を抱えていましたが、答えを見つけたと思います。

ボタンを使用してマクロを実行している場合、それは別のマクロにリンクされている可能性があります。おそらく、現在作業しているものの保存バージョンであり、気付かないかもしれません。マクロをボタンで実行するのではなく、VBA(F5)から直接実行してみてください。私の推測ではうまくいくでしょう。ボタンのマクロを実際に実行したいものに再割り当てする必要があります。

1
Blake Turner

これも使えます

Sub CopyPaste()
Sheet1.Range("A:A").Copy

Sheet2.Activate
col = 1
Do Until Sheet2.Cells(1, col) = ""
    col = col + 1
Loop

Sheet2.Cells(1, col).PasteSpecial xlPasteValues
End Sub
1
nishit dey

これを使用できます:

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
0
akallali