- ベストアンサー
エクセルのFindメソッド?
こんばんは。お願いします。やりたいことは、[入力シート]の“記号”列に、番号と対応する記号を入れていくということです。当初簡単だと思っていたのですが、かなりハードでお手上げです。 手作業でやることを言葉にすると、 ・[入力シート]の番号をみる。(例:0001) ・[参照シート]から0001は“卵”と確認する ・[記号シート]を見て、“卵”に対応する記号は“AA”と確認する ・この結果を受けて[入力シート]の記号の列に“AA”と入力 という手順です。入力シートも、参照シートも番号はランダムに並んでいますが、0001とあれば卵、0002とあればにんじんということに必ずなっています。投稿しようとすると、列が変になるので、行列をあらわさなかったのですが、どのシートもA列、B列ということでお願いします。 Findメソッドでなんとかなると、最初簡単に考えましたが、かなり難解でした。どうぞよろしくお願いします。 [入力シート] 番号 記号 0001 0001 0002 0002 0003 0004 [参照シート] 番号 商品 0001 卵 0001 卵 0002 にんじん 0003 きゅうり 0004 ピーマン [記号シート] 商品 記号 卵 AA にんじん BB きゅうり CC ピーマン DD
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>Findメソッドでなんとかなると VBAを使わなくてもVLOOKUP関数で実現できると思いますが、あえてVBAでFINDメソッドを使うなら、こんな書き方も一例です。 (マクロは入力シートの「シート名タブ右クリック」→「コードの表示」で開く画面に貼り付けます) 参照シートのA列は「0001」となっていますが、これは文字列か数値で書式を0000にしたものか判断がつきません。入力シートと参照シートの「型」には気をつけてください Private Sub Worksheet_Change(ByVal Target As Range) Dim srch, srch2 As Range On Error GoTo end0 If Target.Column = 1 Then Set srch = Worksheets("参照シート").Columns("A").Find(Target.Value, _ LookIn:=xlValues, lookat:=xlWhole) Application.EnableEvents = False If srch Is Nothing Then Target.Offset(0, 1).Value = "参照シートに該当なし" Else Set srch2 = Worksheets("記号シート").Columns("A").Find(srch.Offset(0, 1).Value, _ LookIn:=xlValues, lookat:=xlWhole) If srch2 Is Nothing Then Target.Offset(0, 1).Value = "記号シートに該当なし" Else Target.Offset(0, 1).Value = srch2.Offset(0, 1).Value End If End If end0: Application.EnableEvents = True End If End Sub
その他の回答 (4)
- zap35
- ベストアンサー率44% (1383/3079)
#04です。貼り付けミスしました 下から4行分は以下に差し替えてください End If end0: Application.EnableEvents = True End Sub
- wisemac21
- ベストアンサー率39% (171/429)
参照セルが違っていました。訂正します。 =VLOOKUP(VLOOKUP(A2,参照シート!$A$2:$B$6,2,0),記号シート!$A$2:$B$5,2,0)
お礼
ありがとうございました。
- wisemac21
- ベストアンサー率39% (171/429)
入力シートのB2に =VLOOKUP(VLOOKUP(B2,参照シート!$A$2:$B$6,2,0),記号シート!$A$2:$B$5,2,0) 入力シートの0001で検索した参照シートの商品名を次の検索値にして記号シートの商品名から記号を抽出する
- hana-hana3
- ベストアンサー率31% (4940/15541)
>Findメソッドでなんとかなると、最初簡単に考えましたが、かなり難解でした。どうぞよろしくお願いします。 Find の場合、処理がちょっと面倒なだけで難解にはならないとおもいますが・・・。 たぶん、きちんとした処理の組み立てが出来ていないだけだと思います。 Vlookup の2段使用などの方法もあるかと思います。 ans = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.VLookup("0001",参照シート,2,false) ,記号シート,2,false)
お礼
ありがとうございました。
お礼
ありがとうございました。これ覚えさせていただきます。