• ベストアンサー

異なるシートから、文字列を検索して数字をつける

表Aの連番(385,386,387)を表Bの文字列(ms151,ms987,ms258)の一致した文字列に当てはめたいです  (表 A)        (表 B)   385  ms151      X  Y  Z 386  ms258 → ms151 ms987 ms258 387  ms987 結果として 385    387  386 ms151 ms987 ms258 としたいです  また、表A、表Bは、異なるシートで出来ています うまくいかず困っています  よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

>ココのA2とは表BのXを指すのでしょうか? その通りです、Xのセルの番地を入れてください。 =INDEX(表A!$A:$A,MATCH(A2,表A!$B:$B,FALSE)) 最後に)がひとつ漏れていましたので訂正します。 =MATCH(A2,表A!$B:$B,FALSE) だけですと B列を検索範囲でA2と同じ値がある行の番号がでます。 INDEX関数でA列指定して、検索した値がある行の値を表示するという意味です。

vvfavv
質問者

お礼

大変解かり易く、ありがとうございます こういう組み合わせとか、なかなか思いつかなくて・・・。 ありがとうございました。

その他の回答 (5)

  • QoooL
  • ベストアンサー率66% (103/155)
回答No.6

#5です。お返事遅くなってごめんなさい。 >4行目 >Range("P5:R5").ClearContents >コレをやると全部消えるのですが・・・。 >消さないと何か不具合あるのでしょうか? 説明が足りませんでした、すみません。なんの意味もない行です。指定した範囲の内容(値)をクリアにさせています。途中でエラーが起きて止まった時などのために、「これから書き込むぞ」というエリア(XからZまで)をあえて最初黒板消しで消したのですが、邪魔だったら削除してください。 私も、イメージファイルとかが貼れるサイトについては知識不足です。 Microsoftの答えてねっと、も一応Office関係で調べるときにはのぞきますが、やっぱりここの方が回答量が多いし応答も早い気がします。ファイルアップロードのサイト(cocoaなど)に登録してたら、そこのリンクを貼って、自分のファイルを外部にのぞかせることはできるでしょうね。 解決して良かったです。#1さんの方が単純明快な気もしました。

参考URL:
http://www.kotaete-net.net/
vvfavv
質問者

お礼

そう、回答量で言うと多いんですよね VBAは、根気良く続けて生きたいなと思います 今回は、ありがとうございました。

  • QoooL
  • ベストアンサー率66% (103/155)
回答No.5

#2、#4です。コマンドボタン1はSheet2にあるとしました。 Sub ボタン1_Click() KigouRetsu = "E" BangouRetsu = "D" Range("P5:R5").ClearContents For i = 16 To 18 'Pは16番目、Rは18番目 Kensaku = Cells(6, i).Value Sheets("Sheet1").Select With Range(KigouRetsu + "2:" + KigouRetsu + "4") '2~4行目の中から検索 Set Location = .Find(What:=Kensaku, LookIn:=xlValues, LookAt:=xlWhole) If Location Is Nothing Then Gyo = 0 Else Gyo = Mid(Location.Address, 4) End If End With If Gyo = 0 _ Then Kekka = "該当無" Else Kekka = Range(BangouRetsu + Gyo).Value End If '検索結果貼り付け Sheets("Sheet2").Select Cells(5, i).Value = Kekka Next i End Sub ためしてみてください。私はVBA独学のため、かなりの自己流で細かい点には気が行き届いていないと思います(よって自信も半減)。RangeとCellsがごちゃまぜで見にくいのもご勘弁ください。 検索範囲は、 Range(KigouRetsu + ":" + KigouRetsu) で列全体を探させても良いと思います。 標準モジュールなどはわかっておられるという前提で書いていますが、もしわからなかったら、私がまた返事するのが遅くなってしまったらごめんなさい。(投稿の際、タブやスペースが削除されるから不便ですね)

vvfavv
質問者

お礼

4行目 Range("P5:R5").ClearContents コレをやると全部消えるのですが・・・。 消さないと何か不具合あるのでしょうか? とりあえず、なしにしたら出来ました。 タブ スペースはやりづらいですね 質問するのに文章では、はっきり言い表せなかったので こうするしかなかったです。 jpegとか、イメージファイルとか貼れれば楽だと思うんですけど。 こういう質問がしやすいサイトとかどこかにあれば、 独学というかやりやすいかなと思いました。

  • QoooL
  • ベストアンサー率66% (103/155)
回答No.4

#2 です。お返事が遅くなってすみません。 前に私が書いたのと同じ表を使うとします。VLOOKUP の「範囲」の指定をわかりやすくするために、D列をわざと省いて書きます。  (Sheet1)      基準列         4列目 行   E    F  G   H     列 2   ms151  x   x   =D2 (385)  3   ms258  x   x   =D3 (386) 4   ms987  x   x   =D4 (387)  (Sheet2) 行   P    Q    R   列 5   ※1   ※2   ※3  6   ms151 ms987 ms258 ※1  =VLOOKUP(P6,Sheet1!$E2:$H4,4,FALSE) ※2  =VLOOKUP(Q6,Sheet1!$E2:$H4,4,FALSE) ※3  =VLOOKUP(R6,Sheet1!$E2:$H4,4,FALSE) まず※1から解説します。 すみません、前回の回答で P6 を P5 と書いてしまいました。循環参照でしたね、訂正します。 VLOOKUP とは、縦(垂直、VERTICAL)方向に、参照する、という関数です。仲間に HLOOKUP があります。 パラメータの4つ目のFALSEはこのまま覚えてください。TRUEもありますがややこしいです。E列にms258が2回出てくるときなどに処理が異なります。 次に、パラメータの2つ目のSheet1!$E2:$H4が、 ms151を探させる範囲です。シート1のE2からH4まで、ということですね。このとき、左端は必ず、ms151が含まれているE列、とするのがポイントです。 パラメータの1つ目のP6は、E列から探させる値が入ったセルです。P6のセルの中身、つまりms151を探すことになります。 ※2では Q6 (ms258) ※3では R6 (ms987) としている意味をわかっていただけますでしょうか。 パラメータの3つ目の4は、 ms151が見つかったときに、同じ行の何列目の値を返すか です。H列はE列から数えて4番目だから4にしました。F列なら2です。 まとめると※1については、範囲E2:H4の一番左の列の中から、P6(検索値)と同じ値を持つセルを探し、それと同じ行の、Eから数えて4番目の値を返す、という結果です。 Sheet1!$E2:$H4 という書き方の$は絶対参照というもので、 Sheet1!E2:H4 でも範囲は一緒なのですが、式を横にドラッグした時に範囲がずれないよう、$を入れました。 関数入力ボックスで入力する時は右側の3色のマークを押すと、直接範囲を選べます。 字数制限にひっかりそうなので、マクロについては別回答とします。

vvfavv
質問者

お礼

VLOOKUPは、わかりづらくて避けていました。 お礼が遅くなりすみません。 ご丁寧にありがとうございました。

  • QoooL
  • ベストアンサー率66% (103/155)
回答No.2

もし表Aの右と左が逆だったら、関数 VLOOKUP を使うのが一番シンプルだと思います。そこで、  (表 A)    (Sheet1)   行 D E H 列 2 385  ms151  =D2  3 386  ms258 =D3 4 387  ms987 =D4 という風に、「一致した文字列」を検索したい文字列よりも右におきます。 (表 B)のXのセル(P5としましょうか)に、 =VLOOKUP(P5,Sheet1!$E2:$H4,4,FALSE) 関数は「検索/行列」のグループの一番下にあると思います。 直接入力するのでなく、関数入力ボックスで入力するなら、 検索値  P6 範囲   E2:H4 列番号  4  (HはEから数えて4番目だから) 検索方法 FALSE と入力します。 右へドラッグすれば、Y、Zにも検索結果が入るはずです。 F2キーを押すと、どこを参照しているかわかっていただけると思います。(D列は関係ない。E列から検索範囲となっている) それとも、マクロを使ってもいいなら、FINDを使う方法もありますが?

vvfavv
質問者

補足

ご回答いただきありがとうございます 行  D    E    H  列 2  385  ms151  =D2  3  386  ms258  =D3 4  387  ms987  =D4 すみません 検索値P5、P6の辺りがちょっと理解しづらいです 小出しになって申しわけありません 不特定多数が使用するので、コマンドボタンで実行させたいです FINDを使ったものをぜひお教えていただきたく思います よろしくお願いいたします

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

シート名 表A  A B 385  ms151 386  ms258 387  ms987 として シート名 表B  A  B  C  X   Y  Z ms151 ms987 ms258 として Xには =INDEX(表A!$A:$A,MATCH(A2,表A!$B:$B,FALSE) と入れて右へコピィしてみてください。

vvfavv
質問者

補足

ご回答いただきありがとうございます =INDEX(表A!$A:$A,MATCH(A2,表A!$B:$B,FALSE)                   ↑            ココのA2とは表BのXを指すのでしょうか?

関連するQ&A