2017-06-02 5 views
-2

私は文字列の配列を持っています - それをXarrayと呼びます。私は文字列の他の3つの配列、Aarray、Barray、Carrayを持っています。 Xarrayの長さは3〜4と短いかもしれません。通常、A、B、Cの配列は長いマスターリストです(それぞれ10 +要素)。配列を複数の配列/ビンに分割する

Xarrayには、Aarray、Barray、またはCarrayに含まれる要素のみが含まれています。

Xarrayを3つのビン/アレイに分割する必要があります.XA、XB、XCと呼んでください。 XAには、AarrayにあるXarrayのエントリのみが含まれている必要があります。 XBは、BarrayにあるXarrayからのエントリのみを含むべきです。 XCは...画像を取得する必要があります。

これを行うにはどうすればよいですか?あなたの助けに感謝。

+1

あなたの問題を解決しようとする試みがありますか?あなたが噛むものを私たちに与えるなら、はるかに助けになるでしょう。 –

+0

Romcel、私はXarrayをループし、それぞれのマスター配列とマッチングすることを検討しましたが、セットや行列や配列に適用できる "ismember"の行について何かを期待していました。私はVBAに堪能ではなく、試行錯誤、助けを読むこと、ウェブを精査することなどで苦労します。私はプログラマーやIT担当者ではないことに注意してください。このタイプのコードを使用することは中心的ではありません私の仕事に。場合によっては、カスタムコードを書いただけでは、いくつかの反復的な側面に対処しやすくなります。私の心は今やさまざまな枠組みの中で何ができるのか分かりません。 – Jabberwocky

答えて

0

文字列配列が1次元であると仮定すると、このようなものがありますか? Application.Matchあなたの文字列マッチング要件に応じて

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 

はベストフィットすることが、それはループ、他の3つの配列をもする必要がないようにする良い方法だと私はそれをお勧めしたいと思ったことがありません。

+0

ありがとうございました。私はXarray要素をループして、それがどこに属しているのか把握できることを知っています。私はより直接的な方法(配列に直接適用できる "ismember"のようなもの)を見つけることを望んでいました。それにもかかわらず、これはうまくいくように見えます。私はこのことをうまく書き留める時間をとっていただき、誠にありがとうございます。 – Jabberwocky

+0

VBAで組み込みの配列を処理するのはかなり基本的ですが、通常は、さらに高度な方法で独自のメソッドをロールバックする必要があります。私は[このサイト](http://www.snb-vba.eu/VBA_Arrays_en.html)が配列を扱うのにかなり役に立ち、巧妙なトリックがたくさんあることがわかりました。 – thatandyward

関連する問題