excel - 使用vba获取excel列中的所有唯一值
问题描述
我正在尝试过滤我的数据以将每个组的数组中的非重复值写入它们所属的白色。我遇到了错误 ByRef 参数类型不匹配。这是我的代码:
Sub Start_Time2()
Dim UGs(1 To 3) As Long
Dim r1 As Range
Set r1 = Worksheets("s1").Range("F:F")
UGs(1) = 480
UGs(2) = 490
UGs(3) = 455
Size = 1
For Each ug In UGs
For Each row In r1
Dim sng() As String
If IsInArray(ug, sng) = True Then
ReDim Preserve sng(Size)
sng(Size) = row
Size = Size + 1
End If
Next row
Next ug
End Sub
我正在使用我在网上找到的自定义函数 IsInArray 来检查该值是否已经在我的数组中,但似乎我的 ug 变量不起作用。
Public Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
Dim i
For i = LBound(arr) To UBound(arr)
If arr(i) = stringToBeFound Then
IsInArray = True
Exit Function
End If
Next i
IsInArray = False
End Function
解决方案
至于 ByRef 参数类型不匹配错误 - 它发生是因为ug
具有Variant
类型(未声明的变量默认具有 Variant 类型)并且stringToBeFound
参数具有String
类型。要消除此错误,请指定,例如:
Public Function IsInArray(stringToBeFound As Variant, arr As Variant) As Boolean
使用Option Explicit
模块第一行的指令自动检查变量声明。
此外,要处理 range F:F
,即 1048576 个单元格似乎是多余的,应该指定它。
当然,像@Kin Siang 所写的那样,使用Dictionary 对象或Collection选择唯一值会更好。
推荐阅读
- azure-devops - 使用 Power Automate 将项目从 Jira 迁移到 Azure DevOps
- html - CSS 页面大小和 Chromium 打印 PDF
- solidity - 无法转移代币 [Solidity][OpenZepplin]
- python - 是否可以在云计算服务器上使用 pandas 打开或读取 Excel 文件?
- r - 如何创建茎叶图问题
- sql - 将奇数行和偶数行显示为 2 个单独的列
- django - 异步 Django Rest 框架示例
- javascript - 基于值的 Typescript 所需类型
- java - Sping webServiceTemplate 的 setTimeout 不起作用
- swift - XCode如何在代码结构视图中显示扩展信息?