範囲をループする際に条件のセットに基づいて行の特定のセルをコピーするExcel VBAコードがあります。下のコードはちょうど見つける、私はそれを構築するクリーナーの方法があるのだろうか?クリーナーはコピーと過去のループコードを書きますか?
Dim sh1 As Worksheet, sh2 As Worksheet
Dim LastRow As Long, i As Long, j As Long
With ThisWorkbook
Set sh2 = .Sheets.Add(After:=.Sheets(.Sheets.Count))
sh2.Name = "Upload"
sh2.Range("A1").Value = "Date"
sh2.Range("B1").Value = "Ledger Acct"
sh2.Range("C1").Value = "Department"
sh2.Range("D1").Value = "Cost Center"
sh2.Range("E1").Value = "Purpose"
sh2.Range("F1").Value = "Account Name"
sh2.Range("G1").Value = "Transaction Text"
sh2.Range("H1").Value = "Line Amount"
sh2.Range("I1").Value = "Currency"
End With
Set sh1 = Sheets("Remaining for Uploads")
'This will find the last used row in a column A on sh1'
With sh1
LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
'First row number where the values will be pasted in Upload'
With sh2
j = .Cells(.Rows.Count, "A").End(xlUp).Row
End With
For i = 2 To LastRow
With sh1
If Not (IsEmpty(.Cells(i, 7))) And Not (IsEmpty(.Cells(i, 8))) And Not (IsEmpty(.Cells(i, 9))) And Not (IsEmpty(.Cells(i, 10))) Then
.Cells(i, 7).Copy
sh2.Range("B" & j).PasteSpecial xlPasteValues
.Cells(i, 8).Copy
sh2.Range("C" & j).PasteSpecial xlPasteValues
.Cells(i, 9).Copy
sh2.Range("D" & j).PasteSpecial xlPasteValues
.Cells(i, 10).Copy
sh2.Range("E" & j).PasteSpecial xlPasteValues
.Cells(i, 13).Copy
sh2.Range("H" & j).PasteSpecial xlPasteValues
j = j + 1
End If
End With
Next i
実際にはコピー/ペーストしないでください。セルに直接値を割り当てることができます。あなたの最初のものは 'sh2.Range(" B "&j)= .Cells(i、7)'です。私はあなたの 'With..EndWith'をループの外側に移動します。それが内部にある必要はありません、私はあなたが内部に持っているいくつかの利益を取り去っていると信じています。 – Kyle