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
列全体をコピーする場合は、次のようなことを行うことでコードを大幅に簡素化できます。
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
コピー/ペーストせずに行きます
Sheets("SheetB").Range(arr2(i) & firstrowDB).Resize(lastrow, 1).Value = .Range(.Cells(1, arr1(i)), .Cells(lastrow, arr1(i))).Value
個人的には、必要なのが列だけである場合、少し短くします。
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
にはあまり意味がありません
私も以前にこの問題を抱えていましたが、答えを見つけたと思います。
ボタンを使用してマクロを実行している場合、それは別のマクロにリンクされている可能性があります。おそらく、現在作業しているものの保存バージョンであり、気付かないかもしれません。マクロをボタンで実行するのではなく、VBA(F5)から直接実行してみてください。私の推測ではうまくいくでしょう。ボタンのマクロを実際に実行したいものに再割り当てする必要があります。
これも使えます
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
これを使用できます:
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False