2013-07-09 3 views
0

У меня нет опыта работы с VBA, но меня попросили на работе решить проблему.
У меня есть лист, который имеет данные, как так:Поиск столбца в листе для значения; если обнаружены копии первых двух значений столбца и заголовка столбца

Название ..... Дата Changed ....... 01/01/13 ...... 01/02/13 ........ 01/03/13

Joe ............ 02/05/13 .............. ....... Late

Значения верхней даты - это дата, в которой счет должен быть выставлен на счет, а значение даты (1/05/13) - это дата изменения векселя. Мне нужно найти каждый столбец дат (1/1-1/3) и слово «Late», если оно найдено. Мне нужно скопировать и вставить имя и дату, измененную и причитающуюся дату, на другой рабочий лист. В этом примере я бы скопировать значения:

Джо ........ 02/05/13 ......... 01/01/13

В другом листе. Буду признателен за любую помощь.

ответ

3

Вам не нужно использовать VBA для этого. Используйте функции INDEX и MATCH для поиска, где Late падает.

Позже вы можете фильтровать только для отображения строк, которые имеют поздние столбцы 1/1-1/3.

Адаптируйте, если хотите, но вот основная идея.

Вставьте столбец между «date changed» и 1/1/2013 и назовите его «Date Due» (это будет теперь столбец c).

Если в ячейке C2 введите =IFERROR(INDEX($D$1:$F2,1,MATCH("Late",$D2:$F2,0)),"")

Перетаскивание в колонке C

This is what it should look like

+0

Я собирался предложить один и тот же ответ ... так что я голосую за то, один вверх! Keep It Simple - это правило –

+0

Правильно. И улучшение в VBA означает знание, когда использовать его, но также, когда НЕ использовать его! –

+0

Большое вам спасибо за помощь. Это было намного проще, чем я думал и работал отлично. Я использую одно и то же решение для решения следующей проблемы. – user2533762

0

Попробуйте это ... Это поиск столбца «C» для слова «Late», и если он там, он копирует всю строку и вставляет ее в новый лист, он будет зацикливаться на всех данных, которые у вас есть, и вставьте все строки с поздним новым рабочим листом. Он не делает то, что вам нужно, но является хорошей отправной точкой.

Dim j As Integer 
Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets("sheet1") 
Dim ws2 As Worksheet: Set ws2 = ThisWorkbook.Sheets("sheet2") 

For j = 2 To ws1.Range("C65536").End(xlUp).row 
    If ws1.Cells(j, 2) = "late" Then ws1.Rows(j).Copy ws2.Rows(ws2.Cells(ws2.Rows.Count, 2).End(xlUp).row + 1) 
Next j 
Смежные вопросы