2014-05-14 76 views
1

我已經跑到牆上了。儘管SO上的帖子如this one非常類似或Kioskea上的this one,但我無法連接過濾單元格和根據公式結果進行復制之間的關係。基於其他單元格值複製/粘貼n次

 A B C  D  E  F G H 
R1 Name Num Status #Orig #InPro #Act #Rem #RemStatus 
R2 ABC 032 Complete 22 0  11 11 Purged 
R3 LMN 035 In Prog 25 21  4 21 Pending Scan 
R4 XYZ 039 Not Act 16 16  0 16 Not Active 

這描繪的紙質文件和他們的處置盒的狀態:這裏是數據表 - - 簡化我一起工作

  • 列d是箱數計劃掃描
  • E欄是盒子出用於掃描的數
  • F欄是箱數實際掃描

列G和H可以有三種含義的基礎上,狀態:

  • 如果狀態不活躍,它並沒有什麼需要列G和H匹配做
  • 如果狀態正在進行中,假設列G中的數字是等待掃描的盒子的數量(只是原始的減去實際的)
  • 如果狀態是完整的,則假定列G中的數字是不需要掃描的盒子的數量並被清除

我的代碼(如下所示)是su要做的是遍歷範圍內的每一行(A2:H61)。如果狀態爲「未激活」,則該行可以被忽略,並移至下一行。如果狀態爲「正在進行」或「完成」,則宏在其「正在讀取」的行中需要複製單元格A,B和H,並將其粘貼(列)「G」次數到另一個工作表中 - 在同一工作簿中 - 從下一個可用行開始。 深呼吸

我知道了。它也傷害了我的大腦。這裏是我到目前爲止的代碼:

Sub TEST_Copy_Process() 

Dim srcrange As Range 
Dim wb As Workbook 
Dim ws1 As Worksheet, ws2 As Worksheet 

Set wb = ActiveWorkbook 
Set ws1 = Worksheets("SIS Agregate") 
Set ws2 = Worksheets("Center Detail") 
Set srcrange = Range(wb.ws2.Cells("A2:H61")) 


For Each Row In srcrange.Rows 

If Row = "Not Active" And Row.Offset(0, 3) = SectorType Then 
Continue 
ElseIf Row = "In Progress" And Row.Offset(0, 3) = SectorType Then 

ElseIf Row = "Complete" And Row.Offset(0, 3) = SectorType Then 

End If 

    Set LastCell = wb.ws1.Cells(wb.ws1.Rows.Count, "A").End(xlUp) 
    LastCellRowNumber = LastCell.Row + 1 

Next Row 

End Sub 

有一次,我去,實際上是做繁重的工作代碼,我沒有知識,理清哪些是最好的。如上所述,this等帖子有助於我到這裏。而且我慢慢開始瞭解我在Mr. Excel上找到的內容。這個人似乎在做If/Then的工作,但我不明白它是如何複製或粘貼的。

我感謝任何和所有的幫助。即使你能指點我的資源,這將有助於解釋這一點(除了亞馬遜書:),這將是一個很大的幫助!

+1

我不清楚你究竟在問什麼。 –

回答

1

讓我們來看看這是否讓你走上正軌。你的代碼看起來對於不太瞭解的人來說非常好,所以也許你是一個快速學習:)

我很困惑你爲什麼使用.Offset(0, 3)(在你的解釋中似乎沒有提到任何地方)和還有爲什麼你要比較SectorType這是你提供的代碼中未定義的變量。 我打算假設這些是不必要的,並且無意中從其他示例中複製(請讓我知道是否我錯了)。

我沒有測試過,但我想改變這種分配:

Set srcrange = Range(wb.ws2.Cells("A2:H61")) 

這一點,如果沒有其他原因,而不是它是一個小更直接。我也將此範圍更改爲只有參考列H,因爲這是您的邏輯居中的列輪(注意:我們始終可以使用Offset和/或Resize方法訪問其他單元格)。

Set srcrange = wb.ws2.Range("H2:H61") 

您的邏輯肉是在這個塊,注意去掉Row.Offset(9, 3) = SectorType。我也將使用Select Case而不是If/Then。我發現當有一個或兩個以上的條件需要測試時,這些文件更易於閱讀/理解:

For Each Row In srcrange.Cells '## In this case, Cells/Rows is the same, but I use Cells as I find it less ambiguous 
    Select Case Row.Value 
     Case "Not Active" 
     '## If the status is Not Active, Column G and H match it, and nothing needs to be done 
      'Do nothing 

     Case "In Progress", "Complete" 
     '## If the status is In Progress or Complete, ... copy cells A, B, and H _ 
     ' and paste it (column)"G" number of times in another worksheet - _ 
     ' within the same workbook - starting in the next available row. 

     '# Get the next empty cell in column A of the ws1 
     ' I modified this to use Offset(1, 0), to return the cell BENEATH 
     ' the last cell. 
      Set LastCell = wb.ws1.Cells(wb.ws1.Rows.Count, "A").End(xlUp).Offset(1) 

     '## copy the values from columns A, B, H to ws1 
     '## Column A goes in column A 
      LastCell.Value = Row.Offset(0, -7).Value 
     '## Column B goes in column B 
      LastCell.Offset(0, 1).Value = Row.Offset(0, -6).Value 
     '## Column H goes in column C (because you did not specify) 
      LastCell.Offset(0, 2).Value = Row.Value 
    End Select 
Next Row 
+1

解釋使我能夠弄清楚什麼是代碼。感謝您的指導。你是對的,當我把它們拼湊在一起時,一些不必要的代碼被粘貼在各種來源中。我做了一些簡單的修改來移動列。我的下一個目標是根據列G中的數字重複粘貼功能。 – UserUnknown

相關問題