• 締切済み

エクセルVBAでのデータ検索・貼り付けについて

エクセル2007でVBAを使用しての一覧表を作りたく質問させていただきます。 名簿 001 あいう 002 かきく 003 さしす  上記の様な一覧表のシートから 別のシートで A     B     C     D 002   かきく 001 A列に指定のコード002等を入れると名簿のシートから「かきく」とB列の「かきく」を表示する様に させたいと考えています。 VLOOKUPで行おうと試行錯誤しましたが、 A列の上段に002と入れた時に001が読み出せなかったり 再度002と入れても表示されないためにやりたいことが上手く出来ずに困っています。 A     B     C     D 002   かきく 002   かきく 002   かきく 001   あいう 001   あいう 001   あいう 002   かきく 003   さしす 理想は上記のような形で表示できるようにしたい為、 マクロボタンを押すと一括でA列に対応したB列の文字を名簿シートから 表示(貼付?)させれば可能なのかとも考えていますが、 正直勉強不足でそこまでの式が書けずに、 ネットで検索してそれらしいコードも探していますが、 修正して使えるようなコードが見つけられません。 この関数を使えばとか、このコードが使えますといった物を教えて頂けないでしょうか? 宜しく願いいたします。

みんなの回答

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

>VLOOKUPで行おうと試行錯誤しましたが、 >A列の上段に002と入れた時に001が読み出せなかったり Vlookup関数の最後に検索方法の指定があるのをご存知ですか。 例えの式ですが =VLOOKUP(D1,A:B,2,FALSE) と =VLOOKUP(D1,A:B,2,TRUE) では、使い方が違ってきます。 上の式では、検索値で完全一致で検索しまうので、 A列が順番に並んでいなくても大丈夫です。 下の式では、近似一致なので A列が順番に並んでいる必要があります。

fruhling
質問者

お礼

回答ありがとう御座います。 検索方法の意味を正確に把握出来ていませんでしたので、 再度TRUEに変更して試してみました。 すると一番最上部のA1が絡むと空白になる現象がでてしまいます。 それ以外はもう少しよく見てみないと分かりませんが、 上手く回避する方法はA1を最上段に入力して見えないセルにする事で使えるようにするしかないのでしょうか? 拙い説明で申し訳ありません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルVBA/抽出・貼付け

    下記を行いたいのですが、どのようなコードになるのでしょうか? シート001(入力用) (1)A1~A50、B1~B50、C1~C50、D1~D50  に数値、E1~E50に文字列 (2)F1~F50、G1~G50、H1~H50、I1~I50  に数値、J1~J50に文字列 ※空白行混在 シート002(計算用) シート001に作ったコマンドボタン:クリックにより、 シート002を表示させ、A1~E100に、 シート(1)のA1~E50とF1~J50の空白行以外を連続して 反映させたい。並べ替え用など別シートを用いずに、 VBAコード内で処理したい。

  • エクセルVBAで検索の早い方法

    こんにちは。 エクセルのVBAでお教え下さい。 シート1のA列に下記の様なデータがあって ABCDは業者コードだとおもって下さい。 A A B C D D 違うシート2に下記のように業者コードの マスターがあるとします。 A D シート1の全てのA列がシート2のマスターと 合致するかどうかで、合致しなかった場合にエラーを 表示するようなことをしたい(この場合、BCがエラー)のですが、どういうプログラムにするのが処理的に早いでしょうか? ぐるぐる順番に回す方法以外になにか良い手は ありますでしょうか? お教え下さい。よろしくお願いします。

  • VBAでソートして、貼り付けのやり方

    (条件及び操作) 1 シートが2つあります。(元データ と 名簿シート)という名前。 2 名簿シートのH2に数字を入力する。元データのシートの1行目にある、番号と一致する列を操作する。 3 元データの対象の列で、まずD列(組ごと)に、1組・2組をソートする 4 次に、対象の列(科目:国語や理科など)事に、○をソートする 5 ソート後に、番号、名前、出身と○をコピーする。 6 その後、名簿シート(1組でソートしたものは、B2、2組でソートしたものはE2)に貼り付ける 7 対象の列の科目名(国語なら国語を)をA1に貼り付ける 8 元データのソートを解除する (備考) 番号も科目も100ぐらいあります。 これらの(条件及び操作)を元に、名簿シートのH2に任意の数字を入力して、元データの対象の列を上記(1~8)の操作を行いたいと思います。 《シート名:元データ》 A列   B列   C列   D列   E列   F列   G列   H列   I列   ・・・                       1    2     3     4    5   ・・・   番号  名前   出身  組    国語  理科   英語   数学  社会  ・・・ 001 Aさん  東京    1     ○                ○   ○  002 Bさん  沖縄   1     ○                 ○   ○  003 Cさん  鹿児島  1     ○                     ○  004 Dさん  青森    1     ○                     ○  005 Eさん  北海道  2     ○          ○  006 Fさん  京都   2     ○          ○     ○ ・ ・ ・ 《シート名:名簿シート》      A列   B列   C列   D列   E列   F列   G列   H列    国語     1組              2組     番号   名前   出身  番号   名前   出身  番号入力      お忙しい中、大変申し訳ございませんが、どうぞよろしくお願いします。 また、質問の内容などがわかりづらいなどの事がありましたら、ご指摘ください。

  • エクセルVBA 検索とデータ保持の手順

    表題が何と記載すれば良いか分からなかったので曖昧な表題となってしまい 申し訳ございません。 今回は自分的には高度でどの様にしたら良いかが分からず質問させて頂きます。 シートAとシートBとシートC 及び 項目一覧シートがあると仮定します。 シートA(検索対象シート)   A~D列程度あり、行数は2000行程度を想定 シートB(ピックアップシート) A~D列程度あり、行数は2000行程度を想定 項目一覧シート(シートAの項目)開発に関する文字列     (JavaとかPHPとかの一覧になります。なので、項目数は多く200位でしょうか?) シートC(書き出しシート) (こんな感じかなと) 1.シートAのC列セル内の文字(凡そ2000文字程度入力があります)内に   項目一覧シートに羅列している文字列が含まれているかを検索。   含まれている文字列を取得し(ヒットした文字列全て)ます。   この時、複数の文字列を取得する事を想定します。 2.シートBのC列セル内の文字(こちらも2000文字程度が入力)内に   含まれている文字列から、先程取得した文字列があるかを検索。   2つ以上含まれていたら抽出する。   シートCに対象となった、シートAのA~D列の全ての行を転記、ヒットした   シートBのA~D列の全ての行を転記。   上記をシートBの入力がある全てのセルに行う。 上記を行いたいです。 ここからがデータの持ち方になるのですが、以下の感じで良いのか。。。 A2lB2lC2lD2  ← シートAから抽出したデータ   A100lB100lC100lD100   A189lB189lC189lD189   A1351lB1351lC1351lD1351 ← シートBから抽出したデータ ↑一つセルを開けるイメージです。 上記をツリー型と言うのでしょうか?ぶら下型と言った方が良いのかな?として表記させて 頂きました。 但し、エクセルのつくり上とかなどで上記はやめた方が良い場合には、お手数ですが ご教授頂けると助かります。 シートAのC列には以下の様な内容が記載あります。(内容は適当に端折ってます) ------------------------------------------------------------------------------------------------------------ 【作業内容】 広告媒体を管理するツール(Webツール)の開発 ・広告効果測定ツールとのAPI繋ぎ込みによるデータ取得 ・広告媒体とのAPI繋ぎ込みによるデータ取得 【要件スキル】 ≪求めるスキル≫ ・PHP/Javascriptを用いたWEBアプリケーション ・MySQLを使用した開発経験 ≪ 歓迎するスキル ≫ ・広告業界での開発経験 ・PHPフレームワークやCSSフレームワークを使用した開発経験 ≪ 人物像 ≫ ・ゲームが好きな方 ---------------------------------------------------------------- シートBのC列には以下の様な内容があります。 ------------------------------------------------------------------------------------------------------------ ■氏名: ■所属: ■開発経験:20年 ■スキル: 【スキル面】 基本設計~製造 VB, Java, C, PHP, HTML, JavaScript IBM Notes, SQLServer, MySQL, SQL 【人物面】 コミュニケーション能力高めです。 ■補足:PHPは1ヶ月程度の製造経験。VBとJavaScriptが得意。 ------------------------------------------------------------------------------------------------------------ 上記の場合は、PHPとJavaScriptがヒットするので、シートCへの転記をする。 (シートAのA-D列を抽出し(仮にAとします)、シートCへ転記。 及びヒットしたシートBのA-D列を抽出し(仮にBとします)、Aの下部へ転記。 複数ヒットの場合は、順次Bの下部へ転記していく) 上記の様な事はエクセルで可能でしょうか?(何とかエクセルで作り上げたいのですが。。) 宜しくお願い致します。

  • エクセル縦横検索

    エクセルの縦横検索で関数がわからず何日も悩んでいます。。 <Sheet1> は商品コード・ランクごとの単価表です。   A列    B列     C列   D列    E列  F列 1  商品コード 商品名  Sランク Aランク BランクCランク  2  00010001 AA-1111 10.00 11.00  13.00 14.00 3  00100022 AB-222  11.00 12.00  15.00 16.00 4  00200033 BDB-123 20.00 21.00  22.00 23.00 5  00300033 CA-111  9.00 10.00   11.00 12.00 …  ・・・ 10  01000033 OP-100   30.00 31.00  32.00 33.00 11  02000123 TD-358  10.00 11.00  12.00 13.00   以下5000行ほど続きます。 <Sheet2>は得意先ごとのランク表です。 商品群は商品コードの頭2桁目と3桁目(00、01等)でランクが決まっている為、1行目に2桁の数字を入れています。   A列        B列             C列   D列   E列 … 1                            00   01    02    10  20  2  得意先コード 得意先名/商品群  AA  AB   BDB   OP TD  3  11111    あああ            S    A     C    B  C 4  11222    いいい            A   C     B    S  A 5  12333    ううう              C    S      S    A   B 6  12444    えええ            A   A      B    C   C 7  12555    おおお            B   B     C    S  B …  ・・・   横に50列ほど続きます。 <Sheet3>は入力画面です。    A列       B列      C列   D列 1   得意先コード 商品コード   ランク  単価 2   11222     01000033    得意先コードと商品コードを打ち込むとC2にランク(例だとS)が出るようにしたいのですが、 VLOOKUP($A$2,Sheet2!,A1:Z100,MATCH(C2,Sheet1!A1:A5000,C1:F1)) とすると、アルファベットは出るのですが、ランク表どおりに出ません。01と10が同じ数字として認識されてしまいますし、2桁目と3桁目を認識する関数がわからないので、ここで止まっています。 ランクが出たら、隣の単価を求める関数もついでに教えていただけたらさいわいです。 よろしくお願い致します!

  • エクセルVBAの質問

    お世話になります。 下記の様な表がシート1に有り(行数は日で変動し、大体100から200行位)、F列に数字が有る場合、その行のA列、B列、E列の値をコピーして、シート2のA2からC2に貼付したいのですが、また貼付は、10行ごとに、貼付するスタート位置が変わります。 A2~A11、A16~25、A31~40という具合に10行貼り付けたら次は、5行下からまた続きを貼付ていくイメージです。 どの様な記述をしたら良いでしょうか。ご教示下さいます様宜しくお願い致します。        記 A列  B列  C列   D列   E列   F列 No  品番  品名   地区   数量  236  A6TET  みかん  市川   3本 248  A7TGR  りんご  松戸   5本 273  B9GKT  ぶどう  柏    14本   17 273  A8UFE  すいか  行徳   6本    381  C2ROF  いちご  平井   22本   20

  • エクセルの順位抽出について

    Sheet1のA列にコード、B列に商品名、C列に分類 D列に売上数、 E列に売上金額を入力した一覧表があります。 A_1:1000 B_1:牛肉 C_1:食品 D_1:20 E_1:3000 A_2:1050 B_2:お茶 C_2:飲料 D_2:18 E_2:3010 A_3:2000 B_3:鉛筆 C_3:文具 D_3:12 E_3: 900 A_4:2050 B_4:お米 C_4:食品 D_4:12 E_4:9010 A_5:3000 B_5:牛乳 C_5:飲料 D_5:25 E_5:2000 A_6:3050 B_6:定規 C_6:文具 D_6:28 E_6: 700 中略 A_300:10000 B_300:肉まん C_300:食品 D_300:38 E_300:9000 1.食品対象で売上金額の上位20のコードをSheet2のA列に表示 2.全商品対象で売上金額の上位20のコードをSheet3のA列に表示 上記の様な抽出をしたいのですがどの様な関数を使用すれば良いでしょうか? (オートフィルタを使用してのコピペという手作業をなくすためにSheet1の内容が更新されれば自動でSheet2,3の内容も更新されている のが希望です) よろしくお願いします。

  • エクセルでHLOOKUP関数の選択範囲について

    エクセルでHLOOKUP関数を使って、検索したいのですが、 シートは、一覧表のシートと データが入っているA101、B203、C305、...シートは300シートくらいあります。 一覧表のシートには、下のような表になっていて、      A列  B列  C列  D列 ...          1003、1004、1005、1006、... 2行目 A101  3行目 B203 4行目 C305       .       .       . データのはいっているシート、A101は下の表になっています。      B列 C列 D列、・・・、Z列 2行目 1004、1005、1006、... 3行目 100、 200、 150、... 一覧表のB列の2行目には HLOOKUP(B2、シートA2のB2:Z3、2行目、FALSE) という感じで、シート名をセルA2のものを参照にして 探して表示させ、B列、C列、D列の2行目から下の行も 表示させたいのですが、うめくできませんでした。 INDIRECT関数を使ってみましたが、セル範囲が無効という エラーがでてしまいます。↓こんな感じで入力してみたのですが... SUMPRODUCT((INDIRECT($A2&"!$B$2:$Z$3"))=$B$1,(INDIRECT($A2&"!$B$2:$Z$3"))) 1つづつデータを見て手打ちはデータが多く、 どんどんデータが増えていくので できれば関数を使って表示させたいと思っています。 詳しい方いらっしゃいましたら、どうか教えてください よろしくお願いします。

  • エクセルで、ある条件で検索し、対応するデーターをすべて表示させる方法を教えてください。

    こんばんは。大変お世話になっています。 エクセルでシフト表を作っています。 職員は100名ほど、勤務時間の種類は8種類ほどあります。 A列に名前が並び、B列の2行目から日付が並んでいます。       1日  2日  3日  4日  ・・・ 佐々木   A   休   C    A 佐藤    休   D   D    B 鈴木    B   B   A    休 田中    休   D   D    D 別のシートに、その日の勤務職員をシフト別にそれぞれ表示させた一覧表を作りたいのです。 =LOOKUP(F3,B2:B5,A2:A5)  (F3=シフトコードが入っている) とLOOKUP関数で入れてみたのですが、一番最初の反応する名前が表示されるだけで、すべての対応者の名前は出ませんでした。 どうすればできるでしょうか? 教えてください。 よろしくお願いします。

  • エクセルの貼り付けについて

    シート1には  A B 1あ い 2う  3え お という表があります シート2には  C 1か 2き  という表があります シート1の2行目はしばらく使わないので 非表示にして Cの列をコピーして貼り付けをしたところ 2行目に「き」と入力されてしまいました このきを3行目に表示させるコピー&ペーストの方法ありませんか? エクセル2016使用