Excel 2010: VBA 受信したテキストを複数選択ドロップダウン リストに変換する

Excel 2010: VBA 受信したテキストを複数選択ドロップダウン リストに変換する

私は定期的に生のエクスポート ファイルを受け取っており、それをフォーマットして操作するためのマクロを作成しました。私は Excel 2010 を使用しており、VBA にはそこそこ慣れています。

入力列の 1 つには、既知の (有限だが大きな) リストからセミコロンで区切られた名前のリストがあります。ただし、オートフィルターを使用する場合、エントリは真の複数選択のようには扱われません。

質問:Excel に「apple; grape」を「apple」と「grape」の両方の複数選択として認識するようにプログラムで指示できますか?

例:

リストには次の名前だけが含まれていると仮定します: リンゴ チェリー ブドウ オレンジ 桃

列 (A) のセルには、これらの果物が 1 つ、2 つ、... または 5 つ、任意の組み合わせで「;」で区切られて含まれる場合があります。

(A1) = リンゴ (A2) = リンゴ、ブドウ (A3) = リンゴ、桃 (A4) = チェリー、ブドウ (A5 = チェリー、オレンジ

幸運なことに、受信データは常にアルファベット順にエクスポートされます (そのため、1 つのセルに「apple; grape」が含まれ、別のセルに「grape; apple」が含まれることはありません)。

問題:オートフィルタは、可能な組み合わせがそれぞれ固有の「選択」オプションであると想定します。後の手順では、複数の条件に基づいて組み合わせ/フィルタリングする必要があり、配列- リストが大きすぎて、すべての組み合わせ順列を一意の可能性として表示することができないためです。

[たとえば、データのグループを新しいタブにコピーするようにフィルタリングしているときに、「grape」を含むものだけを新しいタブに移動することもありますが、「grape」または「cherry」を含むものがすべて同じ新しいタブにコピーされることもあります。]

私が考えすぎて、必要以上に難しくしている可能性は十分にあります。

ありがとう!

編集: 言い換えると、指数関数的に大きな組み合わせセットで Range().Autofilter Field... Criteria1:=() を合理的にループする方法がわかりません。わかりますか?

答え1

必要な数の条件を処理できるため、advancedfilterの代わりにを使用します。 次に動作例を示します。最初のスクリーンショットに示すように Excel シートを設定し、マクロを実行します。autofilter

マクロ前
ここに画像の説明を入力してください

Sub AdvancedFilterTest()

    'clear old results and old filters
    Range("C:C").Clear
    Range("D:D").Clear

    'criteria header name and data header name needs to be the same
    [C1] = [B1]

    'Split multiple criterias by semicolon and save them as array
    Criterias = Split([A2], ";")

    'write the array to cells since advancedfilter needs a range as criteria
    For i = 0 To UBound(Criterias)
        Cells(i + 2, 3) = Criterias(i)
    Next i

    'Set the cells as a range so advancedfilter can use them
    Set critrange = Range(Cells(1, 3), Cells(UBound(Criterias) + 2, 3))

    'advanced filter will filter and copy your data to a new target range
    Range("B:B").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=critrange, CopyToRange:=Sheets(1).[D1]

End Sub

マクロ後
ここに画像の説明を入力してください

きっとそのアイデアとそれをどのように応用するかがわかると思います。

関連情報