excel检查一行中单元格的组合是否存在于一个范围内

时间:2015-06-24 17:53:30

标签: excel vba excel-vba

我环顾四周,无法找到它。

所以我想说我有一系列这些独特的字符串:

Dim uniques(10) As String

现在每个字符串都在电子表格的A列中表示。

此外,我有一系列整数,从1到365表示B列中的唯一值。第i天

我的难题是: 我想知道是否存在A是唯一的行(1)而b是i 我希望通过所有独特的和所有可能的我来实现这个过程

我正在寻找一种有效的方法来做到这一点,对于每一天的每一个独特的环境来说,比循环通过相关范围更好。 为了记录,我的实际数据是计算一年中的每一天以及自某个事件发生以来的天数,因此我的行数可以增加到365 ^ 2,如果事件发生在一年多以前可能更多

COUNTIFS似乎工作得很好。我希望我能去:

numOfOccurences = Sheet1.Countifs(countrange,dayrange,uniques(1),irange,i)

如果numOfOccurences大于0,那么我知道它存在。

或者是否有一个函数将一个Range分成vba数组中的行? 所以它看起来像{[A2,B2],[A3,B3],...}我可以做一些损坏,因为两个列都排序,A然后B.我只是不期待自己做这个功能。

赞赏所有想法

2 个答案:

答案 0 :(得分:1)

这样的事情应该适合你,或者至少让你开始朝着正确的方向前进。它会找到10个唯一值的所有匹配项,然后从列B中获取相应的数字。我不知道你是如何填充你的唯一值的,所以我只是做了些什么。 Range.Find循环应与您相关,基本不变。

Sub tgr()

    Dim rngFound As Range
    Dim arrUnq(1 To 10) As String
    Dim varUnq As Variant
    Dim strFirst As String
    Dim strResults As String

    arrUnq(1) = "aaa"
    arrUnq(2) = "bbb"
    arrUnq(3) = "ccc"
    arrUnq(4) = "ddd"
    arrUnq(5) = "eee"
    arrUnq(6) = "fff"
    arrUnq(7) = "ggg"
    arrUnq(8) = "hhh"
    arrUnq(9) = "iii"
    arrUnq(10) = "jjj"

    For Each varUnq In arrUnq
        Set rngFound = Columns("A").Find(varUnq, Cells(Rows.Count, "A"), xlValues, xlPart)
        If Not rngFound Is Nothing Then
            strFirst = rngFound.Address
            Do
                'Here you can check what value is in column B by using rngFound.Offset(, 1).Value
                'You can use this to compare to something you're looking for, or just record the result as shown in this code

                strResults = strResults & Chr(10) & varUnq & ": " & rngFound.Offset(, 1).Value

                'Advance to the next found instance of the unique string
                Set rngFound = Columns("A").Find(varUnq, rngFound, xlValues, xlPart)
            Loop While rngFound.Address <> strFirst
        End If
    Next varUnq

    If Len(strResults) > 0 Then
        strResults = Mid(strResults, 2) 'Get rid of opening chr(10)
        MsgBox strResults
    Else
        MsgBox "No matches found for any of the 10 unique values"
    End If

End Sub

答案 1 :(得分:1)

这样的事情有效。它可能不是最佳的,但显示了如何遍历范围内的行:

Sub test()
    Dim count As Long, i As Long
    Dim myRow As Range
    Dim uniques As Variant
    uniques = Array("a", "b", "c", "d", "e", "f", "g", "h", "i") 'for example
    i = 12 'for example
    For Each myRow In Range("A1:B365").Rows
        If myRow.Cells(1, 1).Value = uniques(1) And myRow.Cells(1, 2).Value = i Then
            count = count + 1
        End If
    Next myRow
    MsgBoxS count
End Sub