我环顾四周,无法找到它。
所以我想说我有一系列这些独特的字符串:
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.我只是不期待自己做这个功能。
赞赏所有想法
答案 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