2013-05-15 73 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中的数据执行删除重复操作。