2013-02-15 2 views
0

У меня есть таблица, собранная в виде базы данных. Я пытаюсь написать макрос, чтобы найти столбец «Размер системы» в моей таблице, чтобы найти «2500», затем найти столбец «Стандарт», чтобы найти «Стандарт», а затем найти столбец «Категория», чтобы найти «FL». Затем я хочу скопировать значение из Выберите столбец «Элемент», относящийся к строке, в которой эти значения были найдены на другом листе. Например, макрос будет искать столбец E (системный размер) для всех «2500», затем он будет искать столбец F (стандартный) для всех «стандартных», затем он будет искать столбец G (категория) для всех «FL». Затем я хочу, чтобы он копировал значения из столбца C (Select Item) для каждой строки, соответствующей этим требованиям, и вставлял ее на другой лист. Ниже приведен код, который у меня есть до сих пор, но я могу получить его только для поиска по одной ячейке, а не по всему столбцу. Вероятно, есть лучший способ сделать это, но это единственный способ, который я нашел, что работает.Поиск каждой ячейки в столбце, чтобы найти определенное значение и скопировать значение из другой ячейки в строке, значение найдено в

Sub ImDoingMyBest() 
' 
' ImDoingMyBest Macro 
' 

' 
    If Sheets("Database").Range("E2").Value Like "*2500*" Then 
    Sheets("Database").Range("C2").Copy 
    Sheets("Quote Sheet").Select 
    Range("B26").Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=True 
End If 
End Sub 
+0

Изображение может быть очень полезным для описания ваших данных и того, чего вы хотите достичь. Также неясно, о чем вы спрашиваете, как вы говорите, что ваш код в настоящее время работает? Наконец, подумайте о том, чтобы посмотреть на сводные таблицы для этого, они были бы очень легкими для чего-то подобного. – Tim

+0

Используйте .'Find' для поиска значений. Вот пример http://www.siddharthrout.com/2011/07/14/find-and-findnext-in-excel-vba/. Кроме того, вы можете использовать Autofilter для фильтрации ваших данных и их копирования. См. Эту тему http://stackoverflow.com/questions/11631363/how-to-copy-a-line-in-excel-using-a-specific-word-and-pasting-to-another-excel-s –

+0

I попытались добавить изображение, но он говорит, что у меня должно быть 10 репутации или что-то в этом роде. И я говорил, что мой код в настоящее время работает для одной ячейки. Мне нужно, чтобы он просматривал весь столбец, а не только одну ячейку, но это единственный способ заставить его работать. –

ответ

0

Способ поиска по всему столбцу - использование цикла for; например:

For i = 1 To 10000 

    If Sheets("Database").Range("E" & i).Value Like "*2500*" Then 

     Sheets("Database").Range("C" & i).Copy 
     ... 
     ... 

    End If 

Next i 

В качестве альтернативы (и мое предпочтение) используют клетки (строку, столбец) формат, а не Range - это избавляет от необходимости конкатенации опорного диапазона. Это займет

Range("E" & i) 

и изменения в

Cells(i, 5) 

, который аккуратнее код (ИМО).

0

Следуя за комментариями Сиддтэта Марта, следующий код использует Autofilter для выделения строк на листе «База данных», которые соответствуют вашим критериям, а затем копирует соответствующие значения в столбце C в диапазон, начинающийся в ячейке B26 листа названный «Цитатный лист».

Sub FilterAndCopy() 

    Dim dataWs As Worksheet 
    Dim copyWs As Worksheet 
    Dim totRows As Long 
    Dim lastRow As Long 

    Set dataWs = Worksheets("Database") 
    Set copyWs = Worksheets("Quote Sheet") 

    With dataWs 
     .AutoFilterMode = False 
     With .Range("C:G") 
      .AutoFilter Field:=3, Criteria1:="2500" 
      .AutoFilter Field:=4, Criteria1:="Standard" 
      .AutoFilter Field:=5, Criteria1:="FL" 
     End With 
    End With 

    totRows = dataWs.Range("C:C").Rows.count 
    lastRow = dataWs.Range("C" & totRows).End(xlUp).Row 
    dataWs.Range("C2:C" & lastRow).Copy 
    copyWs.Range("B26").PasteSpecial Paste:=xlPasteValues 
    dataWs.AutoFilterMode = False 

End Sub 
Смежные вопросы