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

时间:2013-10-10 14:53:27

标签: excel vba excel-vba

我有一个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.我尝试使用计数器,但感到困惑。

最终解决方案感谢MIKE

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

1 个答案:

答案 0 :(得分: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

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

希望这有帮助!