gpt4 book ai didi

vba - 计算包含文本的唯一值的数量

转载 作者:行者123 更新时间:2023-12-03 00:25:35 26 4
gpt4 key购买 nike

我有以下代码,用于计算包含字符串“ABC-QR”的列中的单元格数量:

Ctr = Application.WorksheetFunction.CountIf(Sheet1.Range("D4:D1500"), "*ABC-QR*")
EU.Cells(16, 3) = Ctr

我使用了“ABC-QR”,因为这是数据中不会改变的部分。例如,这些单元格中的真实数据是“ABC-QR00012345”,或者它可能具有的任何数字。我想修改我的代码,使其在计数时不包含重复项

最佳答案

Firstly, you must enable 'Microsoft Scripting Runtime' from within Tools --> References within the Visual Basic Editor.

将工作表中的数据分配到一个数组中;然后将符合字符串条件且不重复的所有内容导入到 dictionary 中。您可以使用.Exists method检查字典中的重复项。 .

编辑: 正如 @Zev 在评论中指出的,您甚至不需要使用 .Exists 方法。您可以将数组元素分配给字典的键,并将项目值分配为1。数组中的任何重复值都会覆盖以前的键,因此重复项将被自动处理。

将所有不重复的内容导入字典后,您就可以使用字典上的 .Count 属性。这将告诉您在传递到数组的范围内有多少记录符合您的字符串条件并且不重复。

Option Explicit
Sub countNonDuplicates()
Dim wb As Workbook, ws As Worksheet
Dim dict As Scripting.Dictionary
Dim myValues() As Variant
Dim lRow As Long, i As Long

Set wb = ThisWorkbook
Set ws = wb.Sheets(1)
Set dict = New Scripting.Dictionary
lRow = Cells(Rows.Count, 1).End(xlUp).Row
myValues = Range(Cells(1, 1), Cells(lRow, 1))

For i = 1 To UBound(myValues, 1)
If InStr(myValues(i, 1), "ABC-QR") Then dict(myValues(i,1)) = 1 'arbitrary value
Next i
MsgBox (dict.Count)
End Sub

上面当前获取Column A的最后一行,然后获取范围并将其分配给数组。如果您希望使用不同的列,请使用所需的列号更新以下语句(下面的示例现在使用Column D)

lRow = Cells(Rows.Count, 4).End(xlUp).Row
myValues = Range(Cells(1, 4), Cells(lRow, 4))

此外,它当前正在 Sheets(1) 上执行上述操作。将工作表编号更改为您需要的编号。

On 100,000 records this took 0.2 seconds to produce the count.

关于vba - 计算包含文本的唯一值的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31639324/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com