我正在进行启发式分析,我遇到了一个问题:我希望在列D中找到与列J匹配的数字,并将它们替换为“0”。你可以看到我在这张图片上想做什么:
问题:列D每个单元格具有多个值,而列J每个单元格具有一个值。 代码的某些部分:
Dim i,j As Integer
Dim temp As String
Dim x As Integer
Dim d As String
i = Application.CountA(Range("E:E")) + 10
'number of cell with values
j = Application.CountA(Range("J:J")) + 10
For j = 11 To j
temp = Range("J" & j).Value
For i = 11 To i
d = Range("D" & i).Value
*For x = LBound(vec) To UBound(vec)
If vec(x) = temp Then
vec(x) = 0
Range("D" & i).Value = vec(x)
End If
Next
Next
Next
* - >这是问题所在,我无法弄清楚如何在D列中传递昏迷“,并存储数据。我想比较“d”上的temp和值,但是“d”可以在同一个单元格上有多个数字,比如“3,2,1”,如果有任何匹配,比如temp = 3,那么d = “0,2,1”。
英语不是我的母语,所以我希望你能理解我想要的东西。
谢谢!
答案 0 :(得分:1)
我认为你几乎只需要拆分每个单元格,然后搜索然后重新创建并替换单元格中的字符串。 请注意我没有对此进行测试。
Dim i,j As Integer
Dim temp As String
Dim x As Integer
Dim d As String
i = Application.CountA(Range("E:E")) + 10
'number of cell with values
j = Application.CountA(Range("J:J")) + 10
For j = 11 To j
temp = Range("J" & j).Value
For i = 11 To i
d = Range("D" & i).Value
Vec = split(d, ",") 'split the cell
d = "" 'clear the string
For x = LBound(vec) To UBound(vec)
If vec(x) = temp Then
vec(x) = 0
End If
d = d & vec(x) & "," 'recreate the string
Next
Range("D" & i).Value = left(d, len(d) - 1) 'save the string without the last ,
Next
Next
答案 1 :(得分:0)
您可以使用以下公式执行此操作 - 无需VBA
在新专栏中,使用此FIND和替代公式:
=IF(NOT(ISERROR(FIND(J:J,D:D))),SUBSTITUTE(D:D,J:J,"0"),D:D)
此公式在列D中的单元格中查找列J中的值。 如果找到匹配项,则用0代替找到的数字。否则,返回D列。
在 VBA 中,您有一个名为 Split(vString,delimiter)的字符串函数,它将使用指定的分隔符将字符串拆分为标记。见
的示例: