2013-02-26 70 views
0

我有一个Excel表中有一个表,有三列。一列包含人名,第二列包含公司名称,第三列包含城市名称。如何获得满足条件的行号

Name Company City 
abc  mn  C1 
asd  th  C2 
qwe  mn  C1 
aqw  kj  C1 
ert  mn  C2 

在这里,我写了一个宏在Excel 2007/2010中获取正在为公司“mn”工作,并在“C1”城市的人的名字。

任何人都可以帮我吗?

+1

是否必须是宏?如果没有,数据透视表可以为你做这个没有任何编程! – 2013-02-26 19:56:22

+2

当然 - 你有什么尝试?发布您的现有代码以获取建议。 – 2013-02-26 19:56:28

+0

当你说“得到”这个人的名字时,你需要具体。你是否希望将它们列在另一张表上?你想隐藏一切,但这些?你想获得数组中的行号吗? – aevanko 2013-02-27 06:38:58

回答

1

我认为只需按公司对公司进行排序,然后按城市查找员工是最简单的方法。但是,这样的事情应该工作太:

Sub SearchEmployeeByCompanyAndCity(company As String, city As String, start As Range) 
    Dim i, j As Integer 
    i = 1 
    j = 1 
    While (start.Cells(i, j).Value <> "") 
     If start.Cells(i, j + 1).Value = company And start.Cells(i, j + 2).Value = city Then 
      MsgBox start.Cells(i, j) 
     End If 
     i = i + 1 
    Wend 
End Sub 

Sub Test() 
    SearchEmployeeByCompanyAndCity "mn", "C1", Worksheets(1).Range("A1") 
End Sub 
+0

+1漂亮便携的解决方案 – whytheq 2013-02-26 21:19:57

+1

我还是比较喜欢只对列进行排序:-) – cesarse 2013-02-26 21:34:52

+1

请注意,您声明我是'variant'。我想你希望它是一个“整数”。改变你的声明:'昏暗我作为整数,j作为整数' – 2013-02-26 23:45:55

0

如果表中的Sheet1这样的右上角:

enter image description here

的这样一个宏就足够了 - 但也有很多的其他方式做到这一点 - 最简单的是Pivot Table

Option Explicit 

Sub FINDemployees() 

With Excel.ThisWorkbook.Sheets("Sheet1") 
    Dim cell 
    For Each cell In .Range(.Cells(2, 1), Cells(.Rows.Count, 1).End(Excel.xlUp)) 
     If LCase(cell(1, 2)) = "mn" And LCase(cell(1, 3)) = "c1" Then 
      MsgBox cell.Value 
     End If 
    Next 
End With 
End Sub