我有一个 vba 代码,它可以抓取所有作为时间表的工作表,并将它们放入一个堆叠在一起的工作表中。我需要另一个代码来获取三个东西,即名称、小时数、百分比,名字从单元格“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。我尝试使用计数器但感到困惑。
最终解决方案感谢迈克
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