- ベストアンサー
EXCEL カンマ区切りされたデータをVlookup関数で処理
EXCELに関して、教えていただきたいことがあり、 投稿させていただきます。 一つのセル内に・・・ A1,B1,C2 とカンマ区切りされたデータがあり、 それをVlookup関数を利用して、 佐藤さん,田中さん,鈴木さん とカンマ区切りのままで、 データ呼び出し処理をしたいと考えています。 A1,B1,C2の段階でセル分割を行い、一つずつのセルで Vlookup関数を使えば、呼び出すことはできましたが、 扱う件数が多いため、一発処理ができればと考えております。 ご存知の方、教えていただけますでしょうか。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
回答No4です。番号の桁が変わった場合のご質問ですが、エクセルを使って作業をするときには出来るだけ分かりやすく簡単にすることが基本です。わざと難しくする必要はないでしょう。カンマで区切っていくつでもデータが増えたらどうしまうかなど質問はきりがありませんね。 複雑なデータに対応するためにはマクロを使われるのがよいでしょう。どうしても関数でということであれば次のようなことでもよいでしょう。 例えばA1セルにカンマで区切られた三つのデータがあるとします。B1セルに答えを表示するとしてC1セルからE1セルには三つのデータを表示させ、F1セルからH1セルにはシート2からそれぞれの名前を表示できるようにします。次にその手順を述べます。 初めにA1セルを選択してから、「データ」タブの「区切り位置」をクリックします。「カンマやタブなどの・・・・」にチェックがある状態で「次へ」、区切り文字で「カンマ」にチェックを付けて「次へ」、表示先が$A$1となっているところをC1と入力して「完了」します。 次にF1セルには次の式を入力して右横方向にオートフィルドラッグします。 =IF(ISNUMBER(C1),VLOOKUP(C1,Sheet21!$A:$B,2,0),"") 最後にB1セルには次の式を入力します。 =F1&","&G1&","&H1 操作は面倒ですがデータが幾つに増加しても、桁が幾つに変わっても対応できる方法です。
その他の回答 (4)
- KURUMITO
- ベストアンサー率42% (1835/4283)
回答No1です。 一つのセル内に3種の数値が並んで入力されているものを、3人の名前に変えて表示するにはどうしたらよいのかというご質問でしょうか? シート2にA1セルから下方に数値が、B1セルから下方に名前があるとします。 シート1のA1セルには 10001,10003,10005 のデータが入力されているとしたらB1セルには次の式を入力すればよいでしょう。 =VLOOKUP(MID(A1,1,5)*1,Sheet2!A:B,2,0)&","&VLOOKUP(MID(A1,7,5)*1,Sheet2!A:B,2,0)&","&VLOOKUP(MID(A1,13,5)*1,Sheet2!A:B,2,0) これでB1セルには 佐藤さん,山田さん,鈴木さん と表示されます。
- mt2008
- ベストアンサー率52% (885/1701)
マクロで一気に置換かな? カンマ区切りの文字列がSheet1のA列にあって、置換する対応表がSheet2のA1から入っているとして、以下でどうでしょう。 Sub SampleMacro() With Sheets("Sheet2") nLast = .Range("A1").End(xlDown).Row For i = 1 To nLast Sheets("Sheet1").Columns("A:A").Replace What:=.Range("A" & i), Replacement:=.Range("B" & i) Next i End With End Sub
お礼
mt2008様 ご回答ありがとうございます。 マクロ処理ですが、当方利用方法を理解しておらず、上手く動作させることができませんでした。 せっかくご回答いただいたのに、申し訳ございません。
- gt-t
- ベストアンサー率41% (7/17)
関数で一発処理は難しそうさなので 関数を作ってみました。 --- Function a_vlookup(s As String, r As Range, c As Integer, f As Boolean) As String Dim ss() As String Dim i As Integer Dim aa As String aa = "" ss = Split(s, ",") For i = LBound(ss) To UBound(ss) On Error Resume Next ii = CInt(ss(i)) If Err.Number = 0 Then aa = aa & WorksheetFunction.VLookup(ii, r, c, f) & "," Else aa = aa & WorksheetFunction.VLookup(ss(i), r, c, f) & "," End If Err.Clear On Error GoTo 0 Next aa = Left(aa, Len(aa) - 1) a_vlookup = aa End Function ----コード終わり---- VBA不可ならば無視してください。 今解っている条件で簡便に作ってあります。
お礼
gt-t様 ご回答ありがとうございます。 上記処理ですが、当方利用方法を理解しておらず、上手く動作させることができませんでした。 せっかくご回答いただいたのに、申し訳ございません。
- KURUMITO
- ベストアンサー率42% (1835/4283)
例えば田中さんを検索するのでしたら =VLOOKUP("*田中さん*",A:B,2,FALSE) のようにすればよいでしょう。 あるいは田中さんがB1セルに有るのでしたら =VLOOKUP("*"&B1&"*",A:B,2,FALSE)
お礼
早速のご回答ありがとうございます。 一つのセル内に記載されている内容としては、 10001,10003,10005 とコード化された番号となります。 (A1,B1,C2 はセル名のように見え、紛らわしい表現でした。すいません) 別シートに A B 10001 佐藤さん 10002 田中さん 10003 山田さん 10004 山下さん 10005 鈴木さん と一覧化したものからの呼び出しを考えております。 申し訳ございませんでした。 ご回答お待ちしております。
補足
KURUMITO様 ご回答ありがとうございます。 上手く動作しました!ありがとうございます。 ただ、元データが、 10001,10002,10003,10004,10005 など決まった数ではなく、 100001や1000008なども含まれる場合は、 対応方法ございますでしょうか。 ,のあとも文字列を参照などできればと思っております。 何度も申し訳ございません。