首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在vba中查找2列中的相似数字时出现问题

在vba中查找2列中的相似数字时出现问题
EN

Stack Overflow用户
提问于 2021-01-23 07:37:48
回答 2查看 40关注 0票数 0

我在vba中的代码有问题。我必须找出在第1列和第2列中有多少相似的数字,但例如第1列(6,6,34,21,23,40)和column2 (49,34,6,9,6,20)应该写成3,因为有6-6,6-6和34-34对。我知道它的解释很混乱,但我希望它能被理解。到目前为止我的代码是:

代码语言:javascript
运行
复制
Sub totolotek()
    Dim i As Integer
    Dim x As Integer
    Dim j As Integer
    Dim liczba As Integer
    Dim suma As Integer
    Dim ileLosowan As Integer
    Range("B2:C7").Interior.Color = RGB(135, 134, 125)
    Range("B2:B7").Font.ColorIndex = 3
    Range("C2:C7").Font.ColorIndex = 5
    ileLosowan = 7
    Randomize
    For i = 2 To ileLosowan
        x = Int(Rnd * (49) + 1)
        Range("c" & i) = x
    Next i
For i = 2 To 7
    liczba = Range("c" & i)
    For j = 2 To 7
        liczbe = Range("b" & j)
        If liczbe = liczba Then
            Range("c" & i).Interior.Color = RGB(255, 255, 0)
            Range("b" & j).Interior.Color = RGB(255, 255, 0)
            suma = suma + 1
        End If
    Next j
Next i
Range("c" & 9) = suma
End Sub
EN

回答 2

Stack Overflow用户

发布于 2021-01-23 09:05:11

尝尝这个。我花了一些时间并添加了几行代码。宏会查找所有的数字对。示例(6,6,3,4,2) (2,3,6,9,0) -->结果3:(6-6,3-3,2-2)

代码语言:javascript
运行
复制
Sub totolotek()
    Dim i As Integer
    Dim x As Integer
    Dim j As Integer
    Dim liczba As Integer
    Dim suma As Integer
    Dim ileLosowan As Integer
    Dim str_B As String, str_C As String, str_BC As String
    Dim max_rand As Long
    
    
    ileLosowan = 20                 ' you can change the number of element in the column
    max_rand = 49                   ' max randum number
    start_row = 2                   'start_row
    
    str_BC = "B2:C" & ileLosowan
    str_B = "B2:B" & ileLosowan
    str_C = "C2:C" & ileLosowan
    
    Range(str_BC).Interior.Color = RGB(135, 134, 125)
    Range(str_B).Font.ColorIndex = 5
    Range(str_C).Font.ColorIndex = 5


    Randomize
    For i = start_row To ileLosowan
        x = Int(Rnd * (max_rand) + 1)
        Range("C" & i) = x
    Next i
    For i = start_row To ileLosowan
        x = Int(Rnd * (max_rand) + 1)
        Range("B" & i) = x
    Next i

liczba_array = Range("B" & start_row & ":B" & ileLosowan).Value2
liczbe_array = Range("C" & start_row & ":C" & ileLosowan).Value2

ReDim ID_array(1 To 1)
ID_array(1) = max_rand + 1
Count = 1


For i = 1 To UBound(liczba_array, 1)
    For j = 1 To UBound(liczbe_array, 1)
        For k = 1 To UBound(ID_array, 1)
            If ID_array(k) = j Then
                GoTo out
            End If
        Next k
            If liczba_array(i, 1) = liczbe_array(j, 1) Then
                Range("B" & (start_row + i - 1)).Interior.Color = RGB(150 + Count * 20, 0, 0)
                Range("C" & (start_row + j - 1)).Interior.Color = RGB(150 + Count * 20, 0, 0)
                suma = suma + 1
                ID_array(Count) = j
                Count = Count + 1
                ReDim Preserve ID_array(1 To Count)
                Exit For
            End If
    Next j
out:
Next i
Range("C" & ileLosowan + 2) = suma
End Sub
票数 0
EN

Stack Overflow用户

发布于 2021-01-23 09:15:00

像这样的东西会达到你想要的效果。只是把它合并到你的代码中,因为我真的不知道那里发生了什么。

代码语言:javascript
运行
复制
Dim i As Long, j As Long, arr As Variant, Total As Integer

For i = 2 To 7 'Rows to loop through in the column
    Total = 0
    arr = Split(Range("A" & i), ",") 'Split column A using the comma
    For j = 0 To UBound(arr) 'Loop through the split values
        If InStr(Range("B" & i), arr(j)) > 0 Then 'Find if value is within other column
            Total = Total + 1 'If it is, add 1 to total
        End If
    Next j
    Range("C" & i) = Total 'Write total to another column on same row
Next i

或者,如果你想要一个可以在工作表中使用的基本函数,你可以使用这个:

代码语言:javascript
运行
复制
Public Function CountMatches(Cell As String, Rng As Range, Optional Delim As String)

Dim i As Long, j As Long, arr As Variant, Total As Integer

If Delim = "" Then Delim = ","

If Rng.Count > 1 Then
    CountMatches = "Please choose 1 cell to compare to."
    Exit Function
End If

Total = 0
arr = Split(Cell, Delim) 'Split column A using the comma

For j = 0 To UBound(arr) 'Loop through the split values
    If InStr(Rng, arr(j)) > 0 Then 'Find if value is within other column
        Total = Total + 1 'If it is, add 1 to total
    End If
Next j

CountMatches = Total

End Function

像使用=CountMatches(A1,B1,",")一样使用它

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65854186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档