2013-10-10 31 views
-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我嘗試使用計數器,但弄糊塗了。

最終解決THANKS 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 
+0

更好嗎?我包含了我的代碼。我不知道該網站的工作原理第一次用戶在這裏道歉 – user2867581

+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 

通過首先確定最後一行,您可以確信,當您經過循環時,您將在包含任何信息的最後一行結束。

希望這會有所幫助!

+0

非常感謝。這是你的名字是什麼意思?工作表(「Sheet1」)。單元格(i,2)=「= Sheet1!R [4] C [1]」@mike – user2867581

+0

工作表(「Sheet1」)。單元格(i,2)將包含Sheet1,所以你會想將它保存在另一張紙上的單元格中。在這種情況下,像Worksheets(「Other Sheet」)。cells(1,4)= Worksheets(「Sheet1」)。cells(i,2)。作爲一個方面說明,您會注意到在cells()語句中,單元格具有行和列的格式。所以它會是Cells(行,列)。 – Mike

+0

我已將上述問題的代碼添加到底部。代碼似乎永遠運行,並崩潰我的Excel。 @mike – user2867581

相關問題