2017-08-15 79 views
0

我需要幫助,我有兩張表,我在第一張表中記錄了針對不同數字(1到50)的時間,我想複製時間戳記到相同數字的新工作表。 表1: Sheet 1 exampleVBA - 將具體的值從一個表列複製到下一個錶行

第2頁: Sheet 2 example

請用VBA代碼有助於得到這個自動完成。

Sub mytry() 
Dim lRow As Long 
Dim lRow1 As Long 
Dim time1 As Date 

Sheets("Time").Select 

lRow = Range("A" & Rows.Count).End(xlUp).Row 

For iCntr = 2 To lRow 

num1 = Cells(iCntr, 1) 

    Sheets("Rec").Select 
    lRow1 = Range("A" & Rows.Count).End(xlUp).Row 
    For iCntr2 = 2 To lRow1 
     If Cells(iCntr2, 1) = num1 Then 
      time1 = Cells(iCntr2, 2) 
      Sheets("Time").Select 
      For t1 = 2 To 20 
      If Cells(iCntr, t1) = "" Then 
      Cells(iCntr, t1) = time1 
      End If 
      GoTo 1 

      Next t1 
      1 
      Sheets("Rec").Select 

     End If 


    Next iCntr2 

Sheets("Time").Select 
Next iCntr 

末次

+0

你到目前爲止嘗試過哪些代碼?堆棧溢出不是一個免費的代碼寫入服務... – Prebsus

+0

你有什麼代碼,爲什麼它失敗?在目前的解決方案中,你在苦苦掙扎什麼? –

+0

我已經添加了我曾嘗試的 – fouriec

回答

0

這不是我做的最漂亮的事情,但我要去嘗試......

你可能要考慮增加了一些變數,因爲你知道有些項目要上表(「REC」):

Dim i as integer 
Dim lRow as Long 'Specific to Sheets("Time") 
Dim LC1 as Long, LC2 as Long, LC3 as Long 'Up to LC9 in the example for Last Column for Row # 

以你所擁有的,並與它的滾動,遍歷表(「時代」):

lRow = Sheets("Time").Range("A" & Sheets("Time").Rows.Count).End(xlUp).Row 

For i = 2 to lRow 

我會建議避免在開始時選擇表格,並按照名稱指定表格,或者使用With語句(後者可能無法像Select Case一樣順暢地工作)。

然後,您可以在循環內部使用與您的Number數相同的Select Case,例如示例中的9。

Select Case Cells(i,1).Value 

Case 1 
    LC1=Sheets("Rec").Cells(2, Sheets("Rec").Columns.Count).End(xlToLeft).Column 
    Sheets("Time").Cells(i,2).Copy Sheets("Rec").Cells(2,LC1) 

Case 2 
    LC2=Sheets("Rec").Cells(3, Sheets("Rec").Columns.Count).End(xlToLeft).Column 
    Sheets("Time").Cells(i,2).Copy Sheets("Rec").Cells(3,LC2) 

Case 3 
    LC3=Sheets("Rec").Cells(4, Sheets("Rec").Columns.Count).End(xlToLeft).Column 
    Sheets("Time").Cells(i,2).Copy Sheets("Rec").Cells(4,LC3) 

End Select 

然後,你應該能夠讓它運行非常流暢,確保接下來我。這一切看起來像這樣:

Dim i as integer 
Dim lRow as Long 
Dim LC1 as Long, LC2 as Long, LC3 as Long 

lRow1 = Sheets("Time").Range("A" & Sheets("Time").Rows.Count).End(xlUp).Row 

For i = 2 to lRow 

Select Case Cells(i,1).Value 

Case 1 
    LC1=Sheets("Rec").Cells(2, Sheets("Rec").Columns.Count).End(xlToLeft).Column 
    Sheets("Time").Cells(i,2).Copy Sheets("Rec").Cells(2,LC1) 

Case 2 
    LC2=Sheets("Rec").Cells(3, Sheets("Rec").Columns.Count).End(xlToLeft).Column 
    Sheets("Time").Cells(i,2).Copy Sheets("Rec").Cells(3,LC2) 

Case 3 
    LC3=Sheets("Rec").Cells(4, Sheets("Rec").Columns.Count).End(xlToLeft).Column 
    Sheets("Time").Cells(i,2).Copy Sheets("Rec").Cells(4,LC3) 

End Select 

Next i 
+0

忘了提及您的iCntr沒有定義,所以我讓自己更容易,只是使用「我」循環,因爲它只是快速輸入。儘量確保Option Explicit位於模塊的頂部,以確保編碼的準確性,並確保每個部分都被定義,並且不會被意外誤認爲某些固有參考等。 – Cyril

+0

感謝您對Cyril的反饋,它是對的工作,它是從第一張紙上獲取信息,但如果您檢查我的1張樣本,您會看到第一列中的數字開始隨機變化,因此需要將時間添加到下一列中的下一張(看錶2樣本) – fouriec

+0

@fouriec我在代碼中犯了一個錯誤,並修正了它... LC2和LC3都被列爲LC1,這對於發生的事情來說是不好的。由於這是表單中3個數字的示例(「Rec」)。單元格(i,1),您需要將其他值添加到您的代碼中(從零到九)以及適當的最後一列Dims。 – Cyril

相關問題