0

我有一张表,其中 B 列有数据,有些是“端口”。C列有一个规范。我需要创建一个遍历 B 列的宏,对于那些包含“端口”且端口不同于 22、3181 或 3389 的单元格,它将 B 列中单元格的值更改为“端口 +”。

c 列中的格式各不相同,因此可以是“Port22、port22、port_22”等。示例如下:

|港口 | 端口3181
|端口 | port_3389
|网址 | abcd
|SQL | qwerty
|港口| 端口 5900
|端口 | 端口 22

我有一段适用于特定端口的代码,但我不知道如何将上述所有 3 个端口包含在标准中。

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

不过,这感觉很笨拙,也许有人知道更好的方法吗?我有多个工作表,其中最后一行有所不同,所以我想让循环部分以某种方式动态化,这样我就可以对所有工作表使用相同的宏。

编辑:

好吧,这就是我想出的:

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

它现在正在工作,因为当端口不是指定的 3 时,它将 B 列中的单元格更改为 Port+。但是,它也将非端口条目更改为 B 列除了“端口”以外的其他内容到端口+。

4

1 回答 1

0

你没有提供太多的代码,但是

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

或者

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

都将提供不区分大小写的比较

对于不同的行,如果有一列应该始终包含数据,您可以使用

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

假设您知道数据未过滤,则获取最后填充的行

于 2013-07-02T08:30:59.693 回答