在VBA数组中查找指定字符串,不存在则追加至末尾的实现问题
VBA数组查找指定字符串并添加至末尾的解决方案
原代码存在的问题
- VBA中没有
Char数据类型,需替换为String - 仅实现了存在性判断逻辑,缺少未找到时定位空闲位置并添加字符串的处理
固定长度数组解决方案
适合提前确定数组容量的场景,会检查数组中的空闲位置并添加:
Sub FindAndAddString() Dim i As Integer Dim stringToBeFound As String Dim arr(10) As Variant Dim isFound As Boolean Dim emptyIndex As Integer ' 设置需要查找的目标字符串 stringToBeFound = "目标字符串" ' 遍历数组检查目标是否存在 isFound = False For i = LBound(arr) To UBound(arr) If arr(i) = stringToBeFound Then isFound = True Exit For ' 找到后立即终止循环,提升效率 End If Next i ' 未找到时,查找第一个空闲位置并添加 If Not isFound Then emptyIndex = -1 ' 遍历数组定位第一个空元素 For i = LBound(arr) To UBound(arr) If IsEmpty(arr(i)) Then emptyIndex = i Exit For End If Next i ' 根据是否找到空闲位置执行操作 If emptyIndex <> -1 Then arr(emptyIndex) = stringToBeFound MsgBox "字符串已添加至数组位置 " & emptyIndex Else MsgBox "数组已满,无法添加新字符串" End If Else MsgBox "字符串已存在于数组中" End If End Sub
动态数组解决方案
适合需要灵活扩容的场景,无需手动查找空闲位置,直接将字符串追加到数组末尾:
Sub FindAndAddString_Dynamic() Dim i As Integer Dim stringToBeFound As String Dim arr() As Variant Dim isFound As Boolean ' 初始化动态数组,设置初始容量 ReDim arr(0 To 2) ' 可添加测试数据(可选) arr(0) = "测试1" arr(1) = "测试2" ' 设置需要查找的目标字符串 stringToBeFound = "目标字符串" ' 检查目标是否存在 isFound = False For i = LBound(arr) To UBound(arr) If arr(i) = stringToBeFound Then isFound = True Exit For End If Next i ' 未找到则扩容数组并添加到末尾 If Not isFound Then ' 保留原有数据的同时扩容数组 ReDim Preserve arr(0 To UBound(arr) + 1) arr(UBound(arr)) = stringToBeFound MsgBox "字符串已添加至数组末尾,当前数组长度:" & UBound(arr) + 1 Else MsgBox "字符串已存在于数组中" End If End Sub
内容的提问来源于stack exchange,提问作者D3merzel
相关产品推荐
相关产品推荐

