2013-07-02 14 views
0

У меня есть таблица, где столбец B имеет данные, некоторые из которых являются «Порт». Столбец C имеет спецификацию. Мне нужно сделать макрос, который выполняет итерацию через столбец B и для тех ячеек, которые содержат «Порт». И этот порт отличается от 22, 3181 или 3389, он меняет значение ячейки в столбце B на «Порт +».Изменение значения ячейки на основе смежного значения ячейки

форматирования в колонке с меняется, так что он может быть "Port22, port22, port_22" и т.д. Пример ниже:

| Порт | Порт3181
| Порт | port_3389
| URL | abcd
| SQL | qwerty
| Порт | Порт 5900
| Порт | Port22

У меня есть часть кода, которая работает для определенного порта, но я не знаю, как это сделать, чтобы включить все 3 из вышеуказанных портов в критерии.

If ActiveCell Like "Port" And Not ActiveCell.Offset(0, 1) Like "*3181*" Then ActiveCell.FormulaR1C1 = "Port+" 

Это кажется довольно неуклюжим, хотя, может быть, кто-то знает лучший способ это сделать? У меня есть несколько листов, в которых изменяется последняя строка, поэтому я хотел бы сделать секцию цикла как-то динамичной, поэтому я могу использовать один и тот же макрос для всех листов.

EDIT:

Ну вот что я придумал:

Dim i As Integer 
i = 1 

Do 
i = i + 1 

If InStr(1, ActiveCell.Value, "Port", vbTextCompare) > 0 And ActiveCell.Offset(0, 1) Like "*22*" _ 
Or ActiveCell.Offset(0, 1) Like "*3181*" Or ActiveCell.Offset(0, 1) Like "*3389*" _ 
Then ActiveCell.FormulaR1C1 = "Port" Else ActiveCell.FormulaR1C1 = "Port+" 

ActiveCell.Offset(1, 0).Select 

Loop Until i = 40 

Он сейчас работает в том смысле, что она изменяет ячейку в столбце B в Порт +, когда порт что-то другое, чем 3. Однако он также меняет записи, не связанные с портами, где столбец B имеет что-то еще, кроме «Порт» для порта +.

ответ

0

вы не предоставили много кода, чтобы идти дальше, а

If UCase(ActiveCell.value) Like "*PORT*" 

или

If Instr(1, Activecell.value, "Port", vbtextcompare) > 0 

бы оба обеспечивают нечувствительны к регистру сравнения

для различных строк, если есть столбец, который должен всегда имеется данные в наличии Вы можете использовать

Cells(rows.Count, "A").end(xlup).row 

, чтобы получить последнюю заполненную строку при условии, что вы знаете, что данные не отфильтрованы

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