• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBAで、VLOOKUP関数をうまく使って見出しからデータ)

Excel VBAでVLOOKUP関数を使って見出しからデータをコピーする方法

このQ&Aのポイント
  • Excel VBAでVLOOKUP関数を使って見出しからデータをコピーする方法について解説します。VBA初心者でも簡単に実装できる方法です。
  • Excel VBAを使用して、sheet3に入力された見出しのデータをVLOOKUP関数を使ってコピーする方法を紹介します。関数を用いることで簡単に実装できます。
  • この記事では、Excel VBAのVLOOKUP関数を活用して、sheet3の見出しだけを入力した場合に、関連するデータをVLOOKUP関数を使ってコピーする方法を解説します。初心者でもわかりやすく説明しています。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

Sub macro1()  Dim h As Range, h1 As Range, h2 As Range  Dim s As Range, s1 As Range, s2 As Range  Dim Target As Range  Set Target = Worksheets("Sheet3").Range("A1").CurrentRegion  For Each h In Target   Worksheets("Sheet3").Cells(65536, h.Column).End(xlUp).Offset(1) = "-----"   If Application.CountIf(Worksheets("Sheet1").Range("1:1"), h) > 0 Then    With Worksheets("Sheet2")     Set s2 = .Range(.Cells(2, h.Column), .Cells(65536, h.Column).End(xlUp))    End With    With Worksheets("Sheet1")     Set s1 = .Cells(1, Application.Match(h, .Range("1:1"), 0))     Set s1 = .Range(.Cells(2, s1.Column), .Cells(65536, s1.Column).End(xlUp))    End With    With Worksheets("Sheet3")     For Each h1 In s1      For Each h2 In s2       .Cells(65536, h.Column).End(xlUp).Offset(1) = h1 & h2       .Cells(65536, h.Column).End(xlUp).Offset(1) = h2 & h1      Next     Next    End With   End If  Next End Sub 何をしたいか言葉で説明を試みるのも勿論大切なのですが,それよりまず目に見える「こんなデータがあります」と「こんな結果が欲しいです」の2つを正確に正しく丁寧にご相談に書いてみてください。 できたらそれらを書いたあと,ご自分の言葉の説明が,やはりご自分で提示したサンプルとちゃんと合ってるかも見直して,誰が見ても確かにこうだと判るようになってることを確信してから,ご相談として投稿してみてください。

noname#181401
質問者

お礼

ご指摘ありがとうございます。 「こんなデータがあります」というのは、実際のExcelデータをキャプチャすれば良かったです。 「こんな結果が欲しいです」も同じですね。 文章だけ正確に正しく丁寧に相談するより、画像で見てすぐにわかるようにすれば良かったと思ってます。 焦らないで相談内容を見直すようにします。 ありがとうございました。

その他の回答 (5)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.6

これで、意図している結果がなんとなくわかります。 あとはこれをどうするかですが、 今のままで、機能を一気に求めると複雑すぎてたぶん答えは出ません。 ここからは段階的に手段をクリアして、組み合わせていく方が良いと思います。 1)他シートから必要となる情報を持ってくる仕掛けを探す。 シート3のA1の「動物系」だけを例にとってみる。 シート3の値を元に シート1の値をシート4A列に列挙する、シート2の値をシート4B列に列挙する。 これならまだサンプルがどこかにありそうです。 2)必要な情報が揃ったら連結する A列1行目とB列1行目、その逆の配置 A列1行目とB列2行目、その逆の配置 A列1行目とB列3行目、その逆の配置 ・・・・ A列2行目とB列1行目、その逆の配置 A列2行目とB列2行目、その逆の配置 A列2行目とB列3行目、その逆の配置 ・・・・ これもそんなに難しくはないと思います。 3)ほかの「雑貨系」やB列「動物系」も行うにはどうするか考える。 部分的に質問すればヒントも集まりやすいのではないでしょうか。

noname#181401
質問者

お礼

ありがとうございます。 サンプルを探してみます。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.5

シート3のA1動物系から2×3の倍の12個欲しいのはわかります。A2雑貨系、B1動物系の結果がイマイチわかりません?。 いずれにしてもセルを1つずつ移動させて文字連結、また1つ移動させて文字連結、この繰り返しで関数ではなさそうです。OFFSETというのがその機能に適してますがー、縦横に並ぶもの同士の組み合わせなので難しくさせてると思います。レイアウト変えたらまだ何かヒントがもらえるのではと思います。 最初のうちはVBA回答例をもらったら説明ももらうようにして下さい。何やっているかわからないものをそのまま使うなんてのは理解できたと言わないし、かえって苦労しますよ。

noname#181401
質問者

お礼

シート1のデータはキーワードのかけあわせ予備軍みたいなもので、正確にはシート2 にある同じ列のキーワードとシート1でかけあわせたいキーワードの見出し名を入れる とかけあわさって出てくるイメージです。 わかりにくいのですが、A2の雑貨系だと「かご かわいい」とか「キーホルダー かわいい」 とかになり、B1の動物系は「パンダ ただ」「うさぎ ただ」とかになります。 VBAは説明をもらうようにして、頑張って覚えたいと思います。 よろしくお願いします。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

VLOOKUPというのは忘れてください。すみません。 シート1にあるデータとシート2にあるデータで どれくらいあるかわからない組み合わせを行い結果を出したいように見受けられます。 前に教えたサイトではここまでやりたいことに合う説明はないと 思うので最終的にはVBAかと思います。 アドバイス見つかったら回答します。

noname#181401
質問者

お礼

ありがとうございます。 シート2の同じ列のキーワードを、シート3に入れた見出しだけでシート1にある同じ見出し のキーワード群とかけあわせる方法があればと思います。 よろしくお願いします。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

補足回答もなされているが、質問の意味(したいこと)が良くわからない。 補足してほしい。 Sheet1とSheet2の関連を何で取ってSheet3に出すのか。 Sheet1のA列で言うと第2行目からは、動物の該当明細があるようだ。 Sheet2の見出しを見るとSheet1とは関係のないものがあげてあるようだ。 そうするとSheet1とSheet2を関連付けするのはどうするのか。関連はなく、別の面のデータが2つのシートに分かれているのか。 見出しを並べるだけの問題なのか。 また Sheet3は(ほしいものとして)入力するのはどの項目で、関数やVBAで採ってくるのはどの項目(行や列)か === 質問するときVLOOKUPなどの具体的方法を、質問にかかず、回答者にまかること。 それより 人間がExcelを使わず、手作業でやるときの、思考過程を文章にして質問するのが良い。 例 Sheet1のA列の中で値XXをさがす。 見つかった行のB列の値を採ってくる。 のように。探すという箇所は、人間が黙示的に探すことにしてあり、語句的でExcelで実行可能方法はとりあえずおいておく。 この際VLOOKUPで見つけて、とかは書かないほうが良い。不十分な質問者の知識で考えた方法がベスト(場合によっては実行可能か)であるかどうかわからないはずだ(いままでの質問で的外れも多かった)。虚心に回答に接し、良いと思うもの、自分の理解や力の及ぶものを実際解決には使えば良いのだ。

noname#181401
質問者

補足

補足します。 > Sheet1とSheet2の関連を何で取ってSheet3に出すのか。 sheet3の見出しを入力することで、sheet2の同じ列のキーワードとsheet1の欲しいキーワードをかけあわせたいです。 sheet3にはsheet1にあるキーワードの中から、欲しいキーワードだけ見出しを入れたら取得したいと思ってます。 > そうするとSheet1とSheet2を関連付けするのはどうするのか。関連はなく、別の面のデータが2つのシートに分かれているのか。 > 見出しを並べるだけの問題なのか。 関連は無いです。 sheet1はかけあわせたいキーワードで、sheet2にはその時にsheet1とかけあわせたいキーワード一覧があります。 > Sheet3は(ほしいものとして)入力するのはどの項目で、関数やVBAで採ってくるのはどの項目(行や列)か sheet1の1行目と同じデータを入力することで、その下の2行目から最終行までのデータを取得して、同じ列にあるデータとかけあわせて表示させたいのです。 人間がExcelを使わず、手作業でやるときの思考過程は、こんな感じになりました。 1) sheet3にsheet1から欲しいキーワードの見出しを入れる。 2) A列には「動物系」と「雑貨系」だけ欲しいので、sheet1にある同じ見出しを1行目から探して、一個下のセルから最終行までのデータ(キーワードだけ)を取得。 3) sheet2のA列(同じ列)にある「形容詞系」と"2)"で取得したキーワード連結させる。 4) 下記のようなデータがsheet3に入れた欲しい見出し一覧の一個下のセルから表示される。 パンダ かわいい かわいい パンダ パンダ かっこいい かっこいい パンダ パンダ すてきな すてきな パンダ うさぎ かわいい かわいい うさぎ うさぎ かっこいい かっこいい うさぎ うさぎ すてきな すてきな うさぎ VLOOKUPはいらなかったのかもしれません。 混乱させてすみませんでした。

  • shinkami
  • ベストアンサー率43% (179/411)
回答No.1

内容がよく把握できません。捕捉お願いします。 sheet1,sheet2の列毎(A列、B列、…)の項目は何ですか sheet3にはどのように表示したいのですか?列毎に具体的に記述してください

noname#181401
質問者

補足

わかりにくくてすみません。 > sheet1,sheet2の列毎(A列、B列、…)の項目は何ですか sheet1も2も1行名の「○○系」というのが項目です。 > sheet3にはどのように表示したいのですか?列毎に具体的に記述してください sheet3には、sheet1の欲しい項目が入っていて、sheet2の同じ列のデータと" "を付けて結合させたいのです。 sheet3のデータは、sheet2の形容詞系とsheet1の動物系、雑貨系、家電系などとだけ結合させたい。 しかしそのデータは、sheet3の欲しい見出し一覧の一個下のセルから表示させたいという意味でした。 わかりにくくてすみませんでした。

関連するQ&A

専門家に質問してみよう