根据相邻单元格值更改单元格值

时间:2013-07-02 08:21:10

标签: excel vba loops

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

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

  

|港口| Port3181
  |港口| 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+"

虽然这感觉非常笨拙,也许有人知道更好的方法吗?我有多个工作表,其中最后一行变化,所以我想使循环部分以某种方式动态,所以我可以为所有工作表使用相同的宏。

编辑:

这就是我想出来的:

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除了“端口”之外还有其他东西。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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

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