2013-02-26 8 views
0

У меня есть таблица в листе Excel с тремя столбцами. один столбец содержит имя человека, второй столбец содержит название компании, а третий столбец содержит название города.Как получить номер строки, который удовлетворяет условию

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

Здесь я написал макрос в Excel 2007/2010, чтобы получить имена данного лица, которые работают в компании «млн» и находятся в городе «С1».

Может ли кто-нибудь помочь мне?

+1

Нужно ли это быть макросом? Если нет, таблицы Pivot могут сделать это для вас без программирования !!! –

+2

Уверенный - что ты пробовал? Опубликуйте свой существующий код для предложений. –

+0

Когда вы говорите «получите» имена человека, вам нужно быть конкретным. Вы хотите перечислить их на другом листе? Вы хотите скрыть все, кроме них? Вы хотите получить номера строк в массиве? – aevanko

ответ

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

+1

Я по-прежнему предпочитаю просто сортировать столбцы :-) – cesarse

+1

Обратите внимание, что вы объявляете i как «вариант». Я думаю, вы хотите, чтобы это было «целое». Измените свою декларацию на: 'Dim i As Integer, j As Integer' –

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 
Смежные вопросы