Excel 将阵列拆分为多个阵列/存储箱
我有一个字符串数组——称之为Xarray。我还有其他三个字符串数组-Aarray、Barray和Carray。Xarray的长度可能很小,比如3或4。A、 B、B和C数组通常是较长的主列表(例如,每个数组包含10多个元素) Xarray仅包含在Aarray、Barray或Carray中找到的元素 我需要将Xarray拆分为3个存储箱/阵列-称它们为XA、XB和XC。XA应该只包含在Aarray中找到的来自Xarray的条目。XB应该只包含在Barray中找到的来自Xarray的条目。XC应该。。。你明白了Excel 将阵列拆分为多个阵列/存储箱,excel,vba,Excel,Vba,我有一个字符串数组——称之为Xarray。我还有其他三个字符串数组-Aarray、Barray和Carray。Xarray的长度可能很小,比如3或4。A、 B、B和C数组通常是较长的主列表(例如,每个数组包含10多个元素) Xarray仅包含在Aarray、Barray或Carray中找到的元素 我需要将Xarray拆分为3个存储箱/阵列-称它们为XA、XB和XC。XA应该只包含在Aarray中找到的来自Xarray的条目。XB应该只包含在Barray中找到的来自Xarray的条目。XC应该。。
做这件事的好方法是什么?感谢您的帮助。假设您的字符串数组是一维的,您希望这样做吗
Sub ArraySlicing()
Dim Xarray() As String
Dim Aarray() As String, Barray() As String, Carray() As String
Dim XA() As String, XB() As String, XC() As String
Dim XA_RwIndexList As String, XB_RwIndexList As String, XC_RwIndexlist As String
Dim i As Long
'create test data arrays
Xarray = Split("Red,Blue,Green,Yellow,Orange,Lime,Purple,Turquoise,Pink,Brown,White,Black,Gold", ",")
Aarray = Split("Apple,Orange,Banana,Lime,Pear,Orange,Green Apple,Red Apple", ",")
Barray = Split("Pink Rose,Tulip,Daisy,Bluebell,Carnation,Marigold", ",")
Carray = Split("redwood,spruce,lime,pine,oak,lemon,chestnut,walnut,orange", ",")
'loop XArray and check for matches
For i = LBound(Xarray) To UBound(Xarray)
'note application.match is case insensitive and will only match complete words
'i.e. "orange" & "Orange" will be found, "Pink Rose" will not
If Not IsError(Application.Match(Xarray(i), Aarray, 0)) Then _
XA_RwIndexList = XA_RwIndexList & "_" & i 'index matching rows
If Not IsError(Application.Match(Xarray(i), Barray, 0)) Then _
XB_RwIndexList = XB_RwIndexList & "_" & i 'index matching rows
If Not IsError(Application.Match(Xarray(i), Carray, 0)) Then _
XC_RwIndexlist = XC_RwIndexlist & "_" & i 'index matching rows
Next i
'check if XA_RwIndexList was initialized i.e. there were matches
If Not XA_RwIndexList = vbNullString Then
'trim preceeding "_" & store row #s in XA array
XA = Split(Mid(XA_RwIndexList, 2), "_")
'loop XA and replace row # with corresponding values from XArray
For i = LBound(XA) To UBound(XA)
XA(i) = Xarray(XA(i))
Next i
End If
'check if XB_RwIndexList was initialized i.e. there were matches
If Not XB_RwIndexList = vbNullString Then
'trim preceeding "_" & store row #s in XB array
XB = Split(Mid(XB_RwIndexList, 2), "_")
'loop XB and replace row # with corresponding values from XArray
For i = LBound(XB) To UBound(XB)
XB(i) = Xarray(XB(i))
Next i
End If
'check if XC_RwIndexList was initialized i.e. there were matches
If Not XC_RwIndexlist = vbNullString Then
'trim preceeding "_" & store row #s in XC array
XC = Split(Mid(XC_RwIndexlist, 2), "_")
'loop XC and replace row # with corresponding values from XArray
For i = LBound(XC) To UBound(XC)
XC(i) = Xarray(XC(i))
Next i
End If
End Sub
根据您的字符串匹配要求
应用程序。Match
可能不是最合适的,但我认为这是一种避免同时循环其他3个数组的好方法。我可以问一下您解决问题的尝试吗?Romcel,我考虑过通过Xarray循环并匹配到每个主数组,但希望在“ismember”行中有更多的内容,可以应用于集合、矩阵或数组。我不精通VBA,只能应付各种各样的尝试/错误、阅读帮助、浏览网页等。请注意,我不是程序员或IT人员,使用此类代码并不是我工作的核心。只是在某些情况下,如果我编写一些自定义代码,处理一些重复的方面会变得更容易。我现在脑子里乱七八糟地想着在不同的框架中可以做些什么。非常感谢你。我知道我可以循环遍历Xarray元素并找出它所属的位置。我希望找到一种更直接的方法(类似于“ismember”,可以直接应用于数组)。然而,这看起来应该是可行的。我非常感谢你花时间写下这么好的东西。VBA中的内置数组处理非常基本,你通常需要使用自己的方法来处理更高级的东西。我发现处理数组非常有用,有很多聪明的技巧。