2013-05-15 102 views
0

我正在處理這個Excel報告。沒有在這裏附上一個例子,有點難以解釋。所以,我會盡量把它放在手動...讓我們把這個工作表答:如何自動讀取excel單元格並跳過重複?

ENV SYSTEM ACTION  CRQ 
-------------------------------- 
PROD RAC2  PATCH  12345 
DEV te2ds  STAGE  34672 
DEV te2ds  PATCH  34294 
PROD PRAC5  STAGE  47382 
PROD hq2/DBNAME PATCH  47389 

etc.... 

這只是一小部分,我有Excel表格中。 而且,還有另一個工作表X:

SYSTEM DBNumber 
-------------------- 
RAC2  30 
te2ds  10 
PRAC5  12 
hq2  3 

etc... 

所以,我想要做到的是,我要某種類型的代碼(最好,EXCEL formula..which我懷疑幫助很多在這種情況下),以自動'進入 - >從Worksheet A中讀取單元格,SYSTEM列 - >從Worksheet X中找到該名稱 - >將DBNumber下的相對數字放入新工作表(或我指定的工作表)下的單元格中,在其正確的系統名稱旁邊。 - >如果該系統名稱/號碼已被複制,則跳過該單元。 它有道理嗎?感謝所有的投入!我真的需要一些幫助。 :)

回答

2

以下應爲你工作:

  1. 先通過在工作表中
  2. 「系統」列的列表中創建獨特的系統名稱的陣列查找在價值
  3. 片X
  4. 在從Z複製的相對價值

您可以使用下面的代碼:

Sub unique() 

     Dim systemNameCollection As New Collection 
     Dim systemNames() As Variant 
     Dim i As Long 
     Dim rRng As Range 

     'Define the range and assign Values to Array 

     ThisWorkbook.Sheets("Sheet1").Select 
     Set rRng = ThisWorkbook.Sheets("Sheet1").Range("A2", Range("A65536").End(xlUp)) 
     systemNames() = rRng.Value 

     On Error Resume Next 

     'Add values in Collection 

     For Each a In systemNames 
     systemNameCollection.Add a, a 
     Next 

     'run following code to take the unique value from Sheet1 - Lookup for value in Sheet2 
     'and copy relative number in sheet2 to sheet3 

     ThisWorkbook.Sheets("Sheet2").Select 
     Set rRng = Range("A2", Range("A65536").End(xlUp)) 

     ThisWorkbook.Sheets("Sheet3").Select 

     For i = 1 To systemNameCollection.Count 
      For Each Value In rRng 
      If systemNameCollection(i) = Value Then 
       Range("A65536").End(xlUp).Select 
       ActiveCell.Offset(1, 0).Value = systemNameCollection(i) 
       ActiveCell.Offset(1, 1).Value = Value(1, 2) 
       Exit For 
      End If 
      Next 
     Next  
End Sub 
+0

感謝您的幫助! – duper

+0

你能解釋一下這條線嗎? 「Set rRng = ThisWorkbook.Sheets(」Sheet1「)。Range(」A2「,Range(」A65536「)。End(xlUp))」 – duper

+0

#這行代碼將在表單1中選擇範圍。從單元格A2開始直到A列中的最後一個非空單元。 #範圍(「A65536」)。結束(xLUp) - 將訣竅找到列A中的最後一個非空單元格地址 #如果你知道你的範圍..你總是可以靜態定義範圍範圍(「A2:A10」) – MrPandav

0

由於您需要數字的唯一系統名稱在SheetX中,因此這是限制因素。您可以將整個系統列從SheetX複製到新工作表中,然後使用VLOOKUP函數與IF語句組合以獲取相應的數字。

例子:

  1. 複製SheetX,系統欄並粘貼到一個新的SheetY
  2. 要SheetY,系統欄的右側,加被叫號碼的另一列。
  3. 使SheetY中的信息成爲表格(假設它是本例中的Table1)。
  4. 對於SheetY每個小區編號列中,插入式:

= IF(ISNA(VLOOKUP(表1 [系統],希達$ B,1,FALSE)), 「」,VLOOKUP (表1 [系統],SheetX $ A:$ B,2,FALSE))

這個公式說...

  • 首先看是否在SheetY系統值在希達列表。
  • 如果不是,則跳過該單元格。
  • 如果是,則從SheetX中找到相應的編號。

最後一步:如果您擔心在SheetY中有重複的鍵值對,請執行步驟1-4,然後對SheetY中的數據執行刪除重複操作。