2016-05-04 2 views
1

У меня есть файл, который имеет два листа. Мне нужно запустить макрос, который смотрит вниз на столбец A на листе2, пока он не будет пустым. Он должен искать значение из ячейки в столбце A листа 2 на листе1. Если найдено, измените значение столбца AP. Если не найден, перейдите к следующему поиску следующего значения.Excel VB Macro, чтобы найти значение из другого листа, затем изменить значение ячейки в текущем листе

Это то, что у меня есть до сих пор. Я смог зафиксировать его там, где я больше не получаю ошибок, но у него также нет результатов. Он отображается и, кажется, запускается, но никаких изменений в ячейке («AP», «найденное значение строки») на листе 1 не производится.

Sub dataChange() 
    Dim myRow As Integer 
    Dim srch As Integer 
    On Error GoTo Err_Execute 
    myRow = 1 
    srch = 1 
    While Sheet2.Cells(myRow, 1).Value <> "" 
     If Sheet1.Range("A" & CStr(srch)).Value = Sheet2.Cells(myRow, 1).Value Then 
      Sheet1.Range("AP" & CStr(srch)).Value = "HOUSTON" 
     End If 
     srch = srch + 1 
     myRow = myRow + 1 
    Wend 
Err_Execute: 
    MsgBox "An error occurred." 
End Sub 
+0

Соответствуют ли строки? Кроме того, проще использовать «клетки» (для меня все равно). – findwindow

+0

Я пробовал код, и он работает. Хотя вам нужно 'Exit Sub' перед' Err_Execute: ', поэтому вы не получите сообщение об ошибке, даже если все выполнено просто отлично. И вы должны определенно изменить объявления переменных с 'Integer' на' Long'. Целые числа могут содержать только номера до 32767. Плохая идея использовать те, которые пересекают более 1048576 строк. Итак, поскольку все работает - в чем же проблема? – Leviathan

+0

Лучше всего предоставить образец ввода, ожидаемый результат и какие результаты вы не получите. Я собираюсь угадать, что вам нужен вложенный цикл - srch - внешний, а myRow - внутренний. – OldUgly

ответ

0

Ваш код сравнения A1 от Sheet1 к A1 в Sheet2. Я думаю, вы хотите сравнить A1 в Sheet1 со всеми ColumnA в Sheet2. Поэтому вам нужен внешний цикл.

Ниже приведен ваш код, измененный для достижения этого. Он также включает комментарий Левиафана для изменения Integer - Long и вставил Sub Sub в соответствующее место.

Когда Sheet2 выглядит так ...

enter image description here

Я получаю этот результат на Лист1 ...

enter image description here

Код ...

Sub dataChange() 
    Dim myRow As Long, srch As Integer 
    On Error GoTo Err_Execute 
    myRow = 1 
    srch = 1 
    Do While Sheet1.Cells(srch, 1).VALUE <> "" 
     Do While Sheet2.Cells(myRow, 1).VALUE <> "" 
      If Sheet1.Cells(srch, 1).VALUE = Sheet2.Cells(myRow, 1).VALUE Then 
       Sheet1.Range("AP" & srch).VALUE = "HOUSTON" 
       Exit Do 
      End If 
      myRow = myRow + 1 
     Loop 
     myRow = 1 
     srch = srch + 1 
    Loop 
    Exit Sub 
Err_Execute: 
    MsgBox "An error occurred." 
End Sub 
Смежные вопросы