2

我正在进行启发式分析,但遇到了一个问题:我想在 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”上的值进行比较,但是“d”可以在同一个单元格上有多个数字,比如“3、2、1”,如果有任何匹配,比如 temp = 3,那么 d= “0,2,1”。

英语不是我的母语,所以我希望你能理解我想要的。

谢谢!

4

2 回答 2

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
于 2013-05-18T00:45:03.123 回答
0

您可以使用以下公式执行此操作 - 不需要 VBA

  1. 在 D 列附近的某处创建一个新列。
  2. 在您的新列中,使用此查找和替换公式:

    =IF(NOT(ISERROR(FIND(J:J,D:D))),SUBSTITUTE(D:D,J:J,"0"),D:D)
    

此公式在 D 列的单元格中查找 J 列中的值。如果找到匹配项,则用 0 替换找到的数字。否则,返回 D 列。

  • 如果需要,您可以隐藏 D 列以避免混淆。

VBA中,您有一个名为Split(vString, delimiter)的字符串函数,它将使用指定的分隔符将字符串拆分为标记。看

例子:

于 2013-05-16T19:29:56.840 回答