プロが教えるわが家の防犯対策術!

EXCELに関して、教えていただきたいことがあり、
投稿させていただきます。

一つのセル内に・・・
A1,B1,C2 とカンマ区切りされたデータがあり、
それをVlookup関数を利用して、
佐藤さん,田中さん,鈴木さん とカンマ区切りのままで、
データ呼び出し処理をしたいと考えています。

A1,B1,C2の段階でセル分割を行い、一つずつのセルで
Vlookup関数を使えば、呼び出すことはできましたが、
扱う件数が多いため、一発処理ができればと考えております。

ご存知の方、教えていただけますでしょうか。
よろしくお願いします。

A 回答 (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
操作は面倒ですがデータが幾つに増加しても、桁が幾つに変わっても対応できる方法です。
    • good
    • 0

回答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セルには 佐藤さん,山田さん,鈴木さん と表示されます。

この回答への補足

KURUMITO様

ご回答ありがとうございます。
上手く動作しました!ありがとうございます。
ただ、元データが、
10001,10002,10003,10004,10005 など決まった数ではなく、
100001や1000008なども含まれる場合は、
対応方法ございますでしょうか。

,のあとも文字列を参照などできればと思っております。
何度も申し訳ございません。

補足日時:2010/02/25 17:56
    • good
    • 0

マクロで一気に置換かな?


カンマ区切りの文字列が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
    • good
    • 0
この回答へのお礼

mt2008様

ご回答ありがとうございます。
マクロ処理ですが、当方利用方法を理解しておらず、上手く動作させることができませんでした。
せっかくご回答いただいたのに、申し訳ございません。

お礼日時:2010/02/25 18:07

関数で一発処理は難しそうさなので


関数を作ってみました。
---
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不可ならば無視してください。
今解っている条件で簡便に作ってあります。
    • good
    • 0
この回答へのお礼

gt-t様

ご回答ありがとうございます。
上記処理ですが、当方利用方法を理解しておらず、上手く動作させることができませんでした。
せっかくご回答いただいたのに、申し訳ございません。

お礼日時:2010/02/25 18:08

例えば田中さんを検索するのでしたら


=VLOOKUP("*田中さん*",A:B,2,FALSE)
のようにすればよいでしょう。
あるいは田中さんがB1セルに有るのでしたら
=VLOOKUP("*"&B1&"*",A:B,2,FALSE)
    • good
    • 1
この回答へのお礼

早速のご回答ありがとうございます。

一つのセル内に記載されている内容としては、
10001,10003,10005 とコード化された番号となります。
(A1,B1,C2 はセル名のように見え、紛らわしい表現でした。すいません)

別シートに
A   B
10001 佐藤さん
10002 田中さん
10003 山田さん
10004 山下さん
10005 鈴木さん と一覧化したものからの呼び出しを考えております。

申し訳ございませんでした。
ご回答お待ちしております。

お礼日時:2010/02/23 16:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています