Vba如何比较2列

时间:2013-05-16 16:49:40

标签: string excel-vba replace comparison vba

我正在进行启发式分析,我遇到了一个问题:我希望在列D中找到与列J匹配的数字,并将它们替换为“0”。你可以看到我在这张图片上想做什么: enter image description here

问题:列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”。

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

谢谢!

2 个答案:

答案 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

  1. 在D列附近的某处创建一个新列。
  2. 在新专栏中,使用此FIND和替代公式:

    =IF(NOT(ISERROR(FIND(J:J,D:D))),SUBSTITUTE(D:D,J:J,"0"),D:D)
    
  3. 此公式在列D中的单元格中查找列J中的值。 如果找到匹配项,则用0代替找到的数字。否则,返回D列。

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

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

    的示例: