Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 将阵列拆分为多个阵列/存储箱_Excel_Vba - Fatal编程技术网

Excel 将阵列拆分为多个阵列/存储箱

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应该。。

我有一个字符串数组——称之为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中的内置数组处理非常基本,你通常需要使用自己的方法来处理更高级的东西。我发现处理数组非常有用,有很多聪明的技巧。