エクセルでデータを検索する方法としてVBAを使用する

このQ&Aのポイント
  • エクセルでデータを検索する際に、VLOOKUPの数式だけではテキストで返り、セルに数式が残ってしまうため、VBAを使用して検索処理を行うことができます。
  • VBAを使用することで、検索したい文字がSheet1のB列にあり、シート2にある膨大なデータの中から該当するデータを抽出し貼り付けることができます。
  • VBAを利用することで、検索元のデータと全く同じデータを抽出し貼り付けることができるため、数式が残らずにデータを返すことができます。
回答を見る
  • ベストアンサー

エクセルでデータを検索する際に・・・・

検索したい文字がSheet1にB列にあります。 検索元のデータは Sheet2に5行目より1データにつき横200列ほど項目があるデータが 5000千ほどあります。 検索したい文字は 検索元のデータの3列目(C列)に存在しています。 これを、Sheet1の検索したい文字の横C列から 該当データの1列目より返していきたいのですが VLOOKUPの数式ではテキストで返り、セルに数式が残ってしまうため、 ここを検索元のデータと全く同じ(フォントや数式を含む)データを 抽出し貼付けて返したいのです。 VBAなどでこの検索処理を出来ないでしょうか? 教えてください、よろしくお願いいたしますm(__)m

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

Public Sub SearchAndCopy() 検索範囲 = "sheet2!C5:C5000" '実際の範囲をセット 検索値範囲 = "sheet1!B1:B4000" For Each x In Range(検索値範囲) If x.Value <> "" Then ' 検索値がない時はスキップ Set c = Range(検索範囲).Find(What:=x.Value, lookAt:=xlPart) If Not c Is Nothing Then Range(c.Offset(0, -2), c.Offset(0, 198)).Copy '見つかったセルの前2つから200列をコピー Range(x.Offset(0, 1), x.Offset(0, 201)).PasteSpecial '検索値のセルの隣から200列ペースト End If End If Next End Sub 上記をVBEのThisWorkbookをダブルクリックした処にでも貼り付けて、マクロ実行から実行すればいいです。(あるいは、ボタンに割り当てる) 当初、数式のコピーということだったので、Formulaを使うように書いたのですが、文意からコピー・ペーストだと思うのでそうしました。 検索する値が重複している場合、最初に見つかったものが対象になります。もともとVLOOKUPでやろうとしていることからそういう動作で良いと思います。 範囲などは、実際の範囲に変えて下さい。

cleverclober
質問者

お礼

ありがとうございました。 明日職場で試してみたいと思います。 本当に感謝しております!

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

そのまま実行できるようなものっていうと、もう少し詳しく教えて欲しいのですが、 検索したい文字、sheet1のB列は、複数あって、下に延びているのですか、また、これが、検索したい場所に対応した位置にあるのですか。 検索元のデータC列は、B列の中身が文字列の一部になっているとして検索するのですか、それとも、単に一致すればいいのでしょうか。 横C列から返すデータは、検索したセルを含めて横200列全て必要なのですか。 内容でなく数式をコピーした場合、シートが変わることになりますが、シートが変わっても大丈夫ですか できれば、いくつかの具体的な内容を示して、 こうなって欲しいという具体的な内容も示して下さい。

cleverclober
質問者

補足

ありがとうございます。 検索したい文字はSheet1のB列に4000程度下に延びています。 検索したいデータは、Sheet2に A列5行目より1データが横に200項目あるものが 縦に5000ほどあります。 例: シート1のB列に「Yamada」とあった場合、 シート2のC列より「Yamada」を含む文字列を検索し (ですのでセルの一致ではなく文字列を含む一致) その「Yamada」を含んだセルの横200列のデータ全てを シート1のC列より、通常に範囲をマウスで指定し、 コピー、貼り付けした結果と同じものを返したいのです。 その際に数式やフォントがそのままコピーされ、 貼りつくことを希望します。 (文字列テキストとして貼りつかないようにしたいのです) シートが変わっても大丈夫です。 説明不足でご迷惑をおかけいたしました。 もしよろしければ教えてください。 よろしくお願いいたします。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

VBAで、数式や入力されている内容をコピーするには、 Range("sheet1!c1").Formura = Range("sheet2!c1").Formula みたいな感じで書けばいいです。 フォントなどの書式をコピーするマクロは、 [マクロの記録]で[書式のコピー:ハケのアイコン]を使って記録したものを参考にして下さい。 検索については、それぞれのセルを比較とかすればいいですね。 あとは、繰り返すだけです。

cleverclober
質問者

補足

ありがとうございます。 すみません、私自身VBAマクロの作成が難しく、 もし出来ればVBAに貼り付けてそのまま実行できるような ものを教えていただけないでしょうか? よろしくお願いいたします。

関連するQ&A

  • excelで文字列を検索する関数を教えてください。

    いつもお世話になります。 エクセルの関数で、シートAのセルA1に入っている文字列をシートBのC列から探し出し、同じ文字列があればTrueをなければFalseを返す関数を教えてください。 わからないながらも色々調べてみたのですが、検索にはVLOOKUPがよく使われているようですが、シートBのC列は、データの並べ替えができないので、VLOOKUPは、使えないのです。 よろしくお願いします。

  • Excelでキーワード検索(異なるブックで)

    現在、シートのA2にキーワード欄を設けて、A5:Z5以下にあるデータ(文字列)から 該当した文字のみサイズ変更と該当セルの色づけをVBAで行っています。 キーワードが1つずつしか検索出来ないことと、A5以下のデータ(文字列)を 別のブックから都度貼り付けることに不便を感じております。 そこでご質問ですが キーワードとデータを異なるブックで用意し、キーワード側のVBAでデータファイルを 検索し、文字サイズとセルの色づけを実施するのはVBAで可能でしょうか。 (キーワードは複数有り、増減します。) 尚、VBAは入門レベルです。 宜しくお願い致します。

  • Excel VBAを使って会員検索

    Sheet1のA列に会員番号、B列に氏名、C列にフリガナ、D列に住所といったデータがあります。 Sheet2のA列に会員番号のみがあります。 この2つのデータを照合して、一致した場合のみ、Sheet1の該当会員データの横のセルに“一致”もしくは“1”などの値(上の例だとSheet1のE列に)を入力できるようなVBAを組みたいのですが、教えていただけますでしょうか?

  • Excelでのデータ検索関数について

    Excelでのデータ検索について悩んでいます。 例えば、A列では「あ~お」、B列では「A~H」でC列ではデータが入っている場合でA列の「い」、B列の「C」のデータを検索したいときはどのように関数を組み合わせれば良いでしょうか?色々試したのですがなかなかうまくいきません。vlookup、index関数で組み合わせてできるのでしょうか?やはりVBAでしか無理なのでしょうか? どなたかご存知の方、ご教示ください。

  • Excelデータの照合

    Excelデータの照合 こちらでも色々調べさせて頂いたのですが、自分のデータにうまくあてはめられず困っています。 Excelの元データ、入力データがあります。 元データが正規のデータで、入力データにモレがないか、ミスがないかをチェックする為に 照合をしたいんですけど、どうやったらうまく出来るかわかりません。 是非ご教授下さい。 元データ、入力データ共に2列あり、どちらも A列・・・コードナンバー B列・・・コードナンバーに対応する金額 が入力されています。 これは今現在は同一シート内に抜き出してありますが、元は別シートです。 なので別シートにあるものとして回答頂いても結構です。 入力データの中から、元データのA列、B列共に一致するものだけを抽出することは出来ますか? 不一致もしくは該当するデータがないものと、一致しているものが区別で切れば形式は何でもOKです。 (作業列を増やすとか、色分けするとか、文字で表示するとか) 出来ればVBAやマクロを使わず関数のみでお願いします。 検索を使うからVLOOKUP? 複数条件だからIF?? と色々考えましたが、2つセットで検索をかけるのがどうしても出来ず・・・(-_-;) よろしくお願いします!!

  • エクセルでデータの検索

    現在 sheet1に A列 B列  C列 あ い う え お と入力されています Sheet2には A列 B列 あ りんご い ばなな あ みかん う うめ い なし と入力されています。 sheet1のA列を検索条件として A列と一致するsheet2にあるものをその横の列に表示されるようにしたいです。 A列 B列   C列 あ りんご  みかん い ばなな  なし う うめ このような場合、一致するものは複数あるため VLOOKUPは使用できません。 どのようにすれば、このような検索ができるのでしょうか?

  • EXCELのデータを変換

    こんにちは。 早速ですが質問です。 あるセルに A B 1 9:00-16:00 17:00-21:00 2 12:00-21:00 などと文字列のデータが入っていて そこから別のシートに A B 1 9:00 17:00 2 16:00 21:00 3 12:00 4 21:00 というデータに変換したいのですが どのような手順をすべきでしょうか? 数式だけでできるならありがたいです。 一応マクロやVBAも少しはわかりますが・・ 皆様よろしくお願いします。

  • EXCELマクロ 検索

    Excelマクロで 検索とその結果のコピーを行いたいのですが、全くの素人のためご教授願えればと思います。 Excel2002で 2つの表から共通する部分をKEYに付随するデータ抜き出したいと思っています。関数VLOOKUPを使えば簡単な作業かと思いますがVBAではそのVLOOKUPやFIND、それにLOOPなどの使い方が今ひとつ理解 できません。 具体例として 表1には A-Z列まで約1000行のデータが存在します。 表2は表1と同じシート上の直ぐ隣列AA-AK列まで表1より必ず多い行数のデータが存在します。また表1のA列にあるデータは すべて必ず表2のAA列に含まれます。 行いたい作業は、VLOOKUPのような検索で、表1A列と表2AA列に共通したデータがあった場合、表2の該当セルを基準としてALからBJ列セルに表1の該当行のデータB-Z列をすべてコピー貼り付けすることです。 A・AA列とも同列内では重複も空白もなくソートされています。 これら以外の列には同じValueのデータや空白が存在します。またデータ件数(行数)も表1・2とも一定ではなく都度変動します。 解りやすくご説明いただけると幸いです。宜しくお願いいたします。

  • エクセルのデータ検索について・・・

    はじめまして。 みなさまのお力が借りたく、質問いたします。 わかりずらい質問だとは思いますが、宜しくお願い致します。 例として、エクセルのファイルが2個あるとします。 A.xls B.xls とします。 AにはIDを入力するシートが1枚 BにはそのIDの人の名前・住所・生年月日などを規則性無く入れてあるシートが7枚程あるとします。 AのID列に「10」といれると Bの全7枚のシートの中から該当する人のデータを抜き出し、 Aの所定のセルに表示する。といった事は可能でしょうか? VLOOKUP関数を使ってみたのですが、検索するシートを1枚じゃないとダメみたいで・・・ シートを複数指定するとエラーになってしまいます。 問題は、抜き出したい「ID 10」が7枚のシートの中の何枚目にあるかがわからないのです。 ちなみに、該当する「ID 10」があるシートには必ず名前、住所、生年月日も同じ列に付随して存在します! このようなことは不可能なのでしょうか? もし可能ならばどうしたらいいか教えてください! 宜しくお願い致します。

  • エクセルのデータ入力をマクロで行う方法は?

    はじめまして。初めて質問させていただきます。 Excelで作業を行っていたのですが、マクロ(VBA?)で分からないことが出てきました。 Sheet1のQ6セルとQ7セルが結合されています。そこにはデータ(数式)が入力されています。 同様に、Q8とQ9、Q10とQ11・・・というように、データ(数式)が続いています。データ数は300個です。 他のシート(Sheet2)の A4セルから下に、先程のQ6セルのデータ A5セルにQ8のデータ・・・ というように書きたいのです。 これをマクロを組んで行うことは出来るのでしょうか? さらに、Sheet1で数式だったデータを文字列で保存できるとなお嬉しいです。 マクロ初心者ですいませんが、皆様のお知恵をお貸しください。よろしくお願いいたします。