• ベストアンサー

エクセルの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

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.4

>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

reprogress
質問者

お礼

ありがとうございました。これ覚えさせていただきます。

その他の回答 (4)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.5

#04です。貼り付けミスしました 下から4行分は以下に差し替えてください  End If end0:  Application.EnableEvents = True End Sub

  • wisemac21
  • ベストアンサー率39% (171/429)
回答No.3

参照セルが違っていました。訂正します。 =VLOOKUP(VLOOKUP(A2,参照シート!$A$2:$B$6,2,0),記号シート!$A$2:$B$5,2,0)

reprogress
質問者

お礼

ありがとうございました。

  • wisemac21
  • ベストアンサー率39% (171/429)
回答No.2

入力シートのB2に =VLOOKUP(VLOOKUP(B2,参照シート!$A$2:$B$6,2,0),記号シート!$A$2:$B$5,2,0) 入力シートの0001で検索した参照シートの商品名を次の検索値にして記号シートの商品名から記号を抽出する

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>Findメソッドでなんとかなると、最初簡単に考えましたが、かなり難解でした。どうぞよろしくお願いします。 Find の場合、処理がちょっと面倒なだけで難解にはならないとおもいますが・・・。 たぶん、きちんとした処理の組み立てが出来ていないだけだと思います。 Vlookup の2段使用などの方法もあるかと思います。 ans = Application.WorksheetFunction.VLookup(Application.WorksheetFunction.VLookup("0001",参照シート,2,false) ,記号シート,2,false)

reprogress
質問者

お礼

ありがとうございました。

関連するQ&A

  • エクセルで入力規則やVLOOKUPで参照できない

     会社で出荷表出力するのに困ってます! お助け願います 商品ブック内に下記2シート存在します 商品入荷シート A列 日付/B列 商品番号/C列 個数 出荷履歴シート A列 出荷日付/B列 出荷商品番号 -------------------------------------- 入荷シートには、商品分類関係なく、渡された伝票を元に 各部署から毎日追加入力されます 履歴シートは、その日出荷の商品番号のみを入力、プリントアウトです -------------------------------------- やりたいこと 履歴シートの商品番号セルに入力した際に、 入荷シートB列を参照して、商品番号が存在するか?を判別したいです セルの色が反転するとか、エラーMSGとか・・・ VLOOKUPやMacth、入力規則など自分でいろいろ試しましたが、 他のシートやブックは参照できません。。などとエラーでできません 他に方法はあるのでしょうか、単に自分が記述ミスなのでしょうか アドバイス願いますm(__)m

  • 【エクセル】他のBookの、シート名を抽出したい

    ブックA,Bがあって、 ブックAのSheet1に「商品名、シリアル番号、商品サイズ・・・」とい ったような項目の表があります。また、Sheet1の表を基にして、数値の 違う表がSheet30まであります。 ブックBのSheet1のA列にはブックAのデータに対応するシリアル番号が ずらっと並べてあります(抜けてたり、多かったりするかもしれません)。 そこで、隣のB列に、A列に書いてあるシリアル番号をブックAから参照 (検索?)して、同じシリアル番号が入力されたセルのあるシートの、 シート名を表示したいです。おねがいします。 VLOOKUPで対応するシリアル番号のセルを探し出して、そのシートを表 示させるようなことを考えていたのだけど、参照するデータの列が左端 ではないし、検索するシートがたくさんあるし、ぜんぜんわかりませ ん。マクロを使用すれば出来るのでしょうか? エクセル2003を使用しています。 長文になってしまい、わかりにくいかと思いますが回答お願いします。

  • エクセルのイベントを教えてください

    次のようなことをイベントでできないかと考えています。 ■ダブルクリックすると、別シートの表を参照して、対応する商品名 を表示する というものです。 少し具体的に書くと Sheet1 A4以下に商品番号が書き込まれます。(A4以下、行可変) C4以下をダブルクリックするとA列に対応する商品名を表示する。(C4以下、行可変) Sheet2 表が作成されています。 A2:J○→→行が変化する(表のデータが大くなったり変化します)のでそれに対応したい。 Sheet2の表を参照してA列の商品番号に対応する商品名を表示 というものです。 一度VLOKOOKUPで商品名を取り出す→値にする というようなものでしょうか? 教えていただけるでしょうか?

  • エクセルの関数

    宜しくお願い致します。 エクセルで以下の関数を入力したいのですが、ご存知のかた教えて頂けませんでしょうか。 WIndows8, エクセル2013 です。 シート1、 シート2と、2つございます。 どちらのシートもA列に商品管理番号が入力されております。 ただ、並び順がバラバラで、列の数もあっておりません。 シート1は商品数10000、 シート2は8000で、どの商品が少ないのか分からない状態です。 シート2のB列にだけ、仕入れ金額が入力されております。 やりたいことは シート2のA列の中から一緒の管理番号を探し、B列の仕入れ金額を 引っ張ってきて、シート1のB列に仕入れ金額を入力したいです。 宜しくお願い致します。

  • Excelで楽にコードを当てる方法

    初めまして、Excel初心者です。初めてデータベースを作ってみようと考えています。 まず手始めにコード化をしようと思うのですが、違ったジャンルのアイテムに識別用のアルファベットプラス数字4桁の形にしたいと思っています。例えば、野菜(にんじん、きゅうり)ならそれぞれV1001、V1002、もし肉(鶏肉、豚肉)ならM1001、M1002、もし魚(さんま、たい)ならそれぞれF1001、F1002、といった具合です。 ここで、すでにアイテムのリストが出揃っていれば楽だと思うのですが、違うジャンルが入り組んでしまったり途中でアイテムを足さなければならない場合はどうするのが一番手っ取り早く次のコードを振れますか? つまり     A    B 1  V1001 にんじん 2  V1002 きゅうり 3  M1001 鶏肉 4  F1001 さんま 5  M1002 豚肉  6   ?? ピーマン となっている場合、例えばピーマンをデータベースに加えようと思ったときに、わざわざ前回の野菜(Vから始まる番号)の最後に振られた番号を自分で確認して手作業で次に振る番号を決めるのでは大変面倒くさいなと。 例えば、Vから始まっている最大の数に1を足した数字を入力できる、とかそれに近い関数なんてものがあれば教えていただけませんか?

  • エクセルってファジーに貼り付け出来ないでしょうか

    設備が出力するログの形式はCSV形式で、何列かはどのような検査をしたかなどが入り、何列か空けたところからの列に結果が出るような形式になっています。 1アクションずつ、ログが出るため、1つの製品の1台分のログでも数百行から数千行あります(製品によって違います)。 顧客にこのログを指定されたフォーマットの様式で送らないといけないので、エクセルで作っています。 製品毎にブックを作って運用しています。 ですが、新機種立ち上げとなると、落ち着くまで検査ログが変わります。 ほぼ、行が増えたり、減ったりします。 何列かの内容を確認しながら、必要なデータの位置を調べ、それを参照する計算式を作って、所定のフォーマットになるように、再参照させています。 1シート目は、ログを貼り付け用 2シート目は、ログの参照用 3シート目は、顧客の指定する様式に合わせた表 1シート目にログを貼り付け、3シート目をコピーし、報告用ブックに値貼り付けをしています。 この報告用ブックを顧客に送付しています。 初回は、下記場所が必要なのが入っているセルだとしても AA107 AA137 AA148 AA157 AA231 これが、落ち着くまでは、 AA140に1行入ったり、AA160に2行入ったりします。 これらデータを貼り付けたら、行が増えているので、別の場所を参照してしまい。 見比べながら、行挿入をしたりしています。 落ち着いたら、変更はないので、機械的に貼り付けだけの作業でいいのですが、 落ち着くまでは、これが、ほぼ、毎日です、中には数千行を見比べないとならないため、とても大変です。 エクセルってファジーに張り付いてくれないのでしょうか?

  • Excel VBA Find関数の使い方

    下記のようなマクロを作りたいと思います。 <シート名:元データ> B列(商品番号)がA列(ファイル名)に含まれていれば、 A列のファイル名をC列(チェック)に転記するものです。 <シート名:完成形> やりたいことの完成形がこちらのシートです。 詳しいデータは画像データを添付しました。 Findを使用するところまでは調べたのですが、VBA初心者のため シンプルな方法があれば教えてください。

  • IFの入れ子7個以上をEXCEL2003で使いたい

    EXCEL2003でIFの入れ子が7個までしか使えませんが、 関数またはVBAを使って7個以上の入れ子を機能させるには どうしたらいいでしょうか。 やりたいことは、ピボットテーブルで使いやすいように 文字列データを別の列にコピーしたいのですが、 元データにはいろいろな文字列が順不同で入っており、 それを取り出すのにIFの入れ子を多様しています。 たとえばこんなデータなのですが、 商品番号 商品タグ          売上金額 No1    ■果物■りんご       1000 No2    ■野菜■きゅうり      2000 No3    ■果物■みかん       1000 No4    ■野菜■にんじん      2000 No5    ■果物■りんご       1000 No5    ■果物■りんご       1000    No6    ドリンク          1000    商品タグには 大カテゴリ 果物、野菜 中カテゴリ 果物の場合、りんご、みかん       野菜の場合、きゅうり、にんじん と分類されています。 一つのセルに大カテゴリと中カテゴリの両方が入ります。 これを中カテゴリをキーにしてピボットテーブルで集計したい場合、 下記の様もう一つ列を作り、そこに集計したいものだけが入った データを作らなければなりません。    A     B             C     D 1商品番号 商品タグ          売上金額 中カテゴリ 2No1    ■果物■りんご       1000   りんご 3No2    ■野菜■きゅうり      2000   きゅうり 4No3    ■果物■みかん       1000   みかん 5No4    ■野菜■にんじん      2000   にんじん 6No5    ■果物■りんご       1000   りんご 7No6    ドリンク          1000   その他 商品タグは実際にはこの前後にたくさんの文字列があり、 文字数も決まっていませんので、文字列を取り出すには search関数やmid関数などを使って取り出しています。 また、取り出したい文字列が含まれていない場合は すべて「その他」と入力したいのです。 セルD2には下記の式を入れています。 =IF(ISERROR(MID(B2,SEARCH("■りんご",B2),3)=TRUE), IF(ISERROR(MID(B2,SEARCH("■みかん",B2),4)=TRUE), IF(ISERROR(MID(B2,SEARCH("■きゅうり",B2),5)=TRUE), IF(ISERROR(MID(B2,SEARCH("にんじん",B2),5)=TRUE),"その他","にんじん"),"きゅうり"),"みかん"),"りんご") これをIFの入れ子7個以上でも使えるようにするには、どうしたらいいでしょうか。

  • エクセルの関数、お願いします<(_ _)>

    AのシートのE列に数百種類の記号が入力されています。 BのシートのC列に都度、記号を入力した際に、AのシートのE列にその記号があれば「入力済み」と表記されるには、どのような関数をどのように使用すればよろしいでしょうか? 宜しくお願いします。

  • Excelの関数で項目を抽出する

    excelの関数で悩んでおります。 例: ■シート1 連番 項目 金額 1 トマト \100 2 きゅうり \0 3 レタス \0 4 たまご \180 シート1は、A列連番、B列に項目、C列に金額を記載しています。 これにシート2を作成します。 シート2は、シート1を参照して、 「¥0の項目は、その項目の行を表示させない」 「表示しない項目は行を削除する」 「表示していない項目は連番をつけない」ということをしたいです。 オートフィルタを使わず(且つ自動で)、関数若しくはVBAを利用したいと思っています。 ■シート2の結果 連番 項目 金額 1 トマト \100 2 たまご \180 よろしくお願いします。

専門家に質問してみよう