-2

我有一个 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
4

1 回答 1

1

您可以做的一件事是首先使用以下代码查找 O 列中的最后一行信息:

lastrow = Worksheets("Sheet1").cells(rows.count,15).end(xlup).row

有了这个,您就可以遍历包含信息的行:

for i = 6 to lastrow step 100
     ' grab the name in worksheets("Sheet1").cells(i,2) 
     ' grab the hours in worksheets("Sheet1").cells(i+41,15)
     ' and grab the percentage in worksheets("Sheet1").cells(i+42,15)
     ' saving these in the cells you wish
next i

通过首先确定最后一行,您可以确保当您通过循环时,您将在包含任何信息的最后一行结束。

希望这可以帮助!

于 2013-10-10T17:24:21.007 回答