タイムシートであるすべてのワークシートを取得し、それらを 1 つのワークシートに重ねて配置する vba コードがあります。名前、時間、パーセンテージの 3 つを取得する別のコードが必要です。最初の名前はセル「B6」で始まり、時間はセル「O47」、パーセンテージは「O48」です。名前、時間、パーセンテージの次の従業員情報はちょうど 100 行下にあるため、次の従業員情報は "B106"、"O147"、"O148" になります。ワークシートをループして Sheet1 と呼び、コードがセルが空白でリストの最後であることをコードが認識するまで、すべての従業員を取得するコードが必要です。
Sub Macro4()
'
' Macro4 Macro
'
'
Sheets("Sheet1").Select
For Counter = 0 To 40
With ActiveCell
.Offset(Counter, 0) = "="
Range("A2").Select
ActiveCell.FormulaR1C1 = "=Sheet1!R[4]C[1]"
Range("B2").Select
ActiveCell.FormulaR1C1 = "=Sheet1!R[45]C[13]*Sheet1!R[46]C[13]/100"
Range("C2").Select
ActiveCell.FormulaR1C1 = "=Sheet1!R[46]C[12]"
Range("A3").Select
ActiveCell.FormulaR1C1 = "=Sheet1!R[103]C[1]"
Range("B3").Select
ActiveCell.FormulaR1C1 = "=Sheet1!R[144]C[13]*Sheet1!R[145]C[13]/100"
Range("C3").Select
ActiveCell.FormulaR1C1 = "=Sheet1!R[145]C[12]"
End Sub
6行を約30回繰り返す代わりに、効率的な方法はありますか? 場所の違いは、行とその 99 だけです (つまり、行が 4 から 103 にジャンプするのがわかります。counter を使用しようとしましたが、混乱しました。
最終的な解決策ありがとうマイク
Sub Macro1()
a = 1
lastrow = Worksheets("Sheet1").Cells(Rows.Count, 15).End(xlUp).Row
For i = 6 To lastrow Step 100
Worksheets("Sheet2").Cells(a, 1) = Worksheets("Sheet1").Cells(i, 2)
Worksheets("Sheet2").Cells(a, 2) = Worksheets("Sheet1").Cells(i + 41, 15)
Worksheets("Sheet2").Cells(a, 3) = Worksheets("Sheet1").Cells(i + 42, 15)
a = a + 1
Next i
End Sub