从工作表上的三个位置获取数据,并将其作为报表放入新工作表中



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

您可以做的一件事是首先使用代码查找 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

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

希望这有帮助!

最新更新