![1 文字列の検索:](https://rvso.com/image/1542109/1%20%E6%96%87%E5%AD%97%E5%88%97%E3%81%AE%E6%A4%9C%E7%B4%A2%3A.png)
ユーザーグループとそれぞれのユーザー名の大きなリストがあります。今、それらをさらにフィルタリングしたいです。各ユーザーのユーザーグループはすべて 1 つのセル (ユーザー名 - ユーザーグループ) にあるので、1 つのセルに 10 ~ 15 のユーザーグループがあることになります。必要なのは「WTS」で構成される行だけなので、次に「WTS」で構成されるユーザーグループの行を新しいセルに配置します。
これをどうやって実行すればいいのでしょうか?
サンプルデータ:
ユーザーグループ 1 WTS_A、BTS_B、WTS_C、
WTS_AとWTS_Cが欲しいです。
答え1
あなたの質問を理解した上で、2 段階の解決策を提案します。
ステップ1- Excel の「テキストを列に分割」機能を使用して、単一列のテキストを複数列に変換します。区切り文字としてスペースとカンマの両方を使用します。
ステップ2- カスタム VBA 関数を使用して、目的のセルのみをコンマで区切られた 1 つのセルに結合します。
テキストを列に分割するプロセスが完了したら、シート上で ALT + F11 を押して VBA エディターを開きます。挿入メニューからモジュールを挿入します。Module1 が作成され、そのコード エディターが開きます。作成されていない場合は、左側のペインで Module1 をダブルクリックしてコード エディターを開きます。
次のコードを同じ場所に貼り付けます。
Public Function TXTJOIN(argument1 As Range) 'Accept input range
result = ""
colcounter = argument1.Columns.Count
rowcounter = argument1.Rows.Count
If rowcounter > 1 Then
TXTJOIN = CVErr(xlErrValue) 'If row counter > 1 return #VALUE! Error
Exit Function
End If
If colcounter > 255 Then
TXTJOIN = CVErr(xlErrValue) 'If col counter > 255 return #VALUE! Error
Exit Function
End If
For Each element In argument1
If Left(element, 3) = "WTS" And Len(element) > 3 Then
result = result & element & ","
End If
Next element
If result = "" Then
TXTJOIN = result
Else
TXTJOIN = Left(result, Len(result) - 1)
End If
End Function
これにより、開始文字列が「WTS」であるかどうかをチェックし、カンマで区切られたすべての列を結合するカスタムTXTJOIN関数が作成されます。
保存して VBA エディターを終了します。ワークシートに戻り、右端の列に移動して、該当する列範囲を指定してこの関数を入力します。該当する行の長さに沿ってコピーまたはドラッグします。それぞれのセルに目的の文字列が表示されます。他の場所に値のみをコピーし、残りの列を削除してシートをクリーンアップします。
次のような状況では、この関数から #VALUE! エラーが返されます。
多次元配列を渡します(例:A1:D12)
255 を超える列範囲を渡します。
複数行の配列を渡します(例:A1:A12)
これがうまくいくかどうか教えてください。
制限事項 - ユーザー ID はスペースまたはカンマで区切られていることを前提としています。2 つのユーザー ID がカンマまたはスペースなしで一緒になっている場合、この関数は 2 つを個別に識別しません。
答え2
有効な(興味深い)データを検索し、それをフォーマットするという 2 つのタスクがあります。
1 文字列の検索:
WTS などの文字列の検索は、関数 Find または Search で実行できます。どちらも、文字列が見つかったときに数値を表示します。例: FIND("WTS";A1) または SEARCH("WTS";A1)
最初の行に対してこれを行います。数式のコピーを含むセルを選択し、その下のセルにあるすべてのデータ行を選択して貼り付けます。数式は自動的に FIND("WTS";B1)...FIND("WTS";C1)... に更新されます。
この時点で手動でフィルタリングして、エラー #VALUE! が発生する行を非表示にすることをお勧めします。
結果が得られない行を削除するだけです。
2 ユーザーグループデータを分割します。
セル内に文字列 (ダッシュ「-」など) で区切られた複数のエントリがある場合は、セルを選択し、「データ」->「テキストを列に」->「区切り」->「区切り文字を追加」を使用して、「その他」を選択し、ダッシュを入力します。
これにより、データが取得され、Usergroup1 Usergroup2 Usergroup3 のように複数のセルに配置されます...
3 ボーナスヒント:
分割した複数のセルに対して検索機能を使用する場合は、セルを 1 つのセルに連結し (基本的には分割を逆にします)、連結された値を検索します。A7 = CONCATENATE(A1;A2;A3) A8 = FIND("WTS";A7)