• 締切済み

エクセル マクロ

以下のようなデータ1とデータ2があり、データ1を選ぶとデータ2が同時に抽出されるようにするには、どのようなマクロを組めば良いのでしょうか。 但し、データ2には重複するデータもあり、その場合は重複して、抽出されるのを避けたいのですが(下の例ですと、トヨタ、BMW)。 マクロ素人で困っており、お手数ですが、アドバイスを宜しくお願いします。 <データ1> 日本、アメリカ、ドイツ <データ2> トヨタ、日産、GM、BMW、VW、ホンダ、トヨタ、BMW、Ford、 もし、データ1で日本を選べば、結果は以下のように表示されるようにしたいです。 日本:トヨタ、日産、ホンダ

みんなの回答

noname#22222
noname#22222
回答No.2

<データ1> 日本、アメリカ、ドイツ <データ2> トヨタ、日産、GM、BMW、VW、ホンダ、トヨタ、BMW、Ford、 データ1とデータ2との間には、何の関係付けもありません。 ですから、いかなるマクロを組んでも抽出するのは不可能です。 <データ2> トヨタ(日本)、日産(日本)、GM(アメリカ)・・・ との関係付けをするのが先決です。

Ericsson55
質問者

お礼

ご指摘有り難うございます。そうですね、関連付けをしないといけないのですね。

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

Sheet1のF2:F5に 日本 米 独 韓 といれ、Sheet1のB2セルの入力規則のリストに上記範囲を指定します。 Sheet2nA2:B11に トヨタ 日本 日産 日本 GM 米 BMW 独 VW 独 ホンダ 日本 トヨタ 日本 BMW 独 Ford 米 現代 韓 と入れます。 Sheet1のシートモジュールのChangeイベントに Private Sub Worksheet_Change(ByVal Target As Range) Application.EnableEvents = False i = 2 Dim x As Range Dim xb As Range Worksheets("Sheet1").Range("B:c").Clear Set xb = Worksheets("Sheet2").Range("B2") If Target.Address = "$A$2" Then ' MsgBox Worksheets("Sheet1").Range("a2") Set x = Worksheets("Sheet2").Range("B2:B11").Find(what:=Worksheets("Sheet1").Range("a2")) If x Is Nothing Then GoTo ext Worksheets("Sheet1").Cells(i, "B") = x.Value Worksheets("Sheet1").Cells(i, "C") = x.Offset(0, -1) i = i + 1 Set xb = x p1: Set x = Worksheets("Sheet2").Range("B1:B11").FindNext(x) If x Is Nothing Then GoTo ext If x.Row <= xb.Row Then GoTo ext Worksheets("Sheet1").Cells(i, "B") = x.Value Worksheets("Sheet1").Cells(i, "C") = x.Offset(0, -1) i = i + 1 Set xb = x GoTo p1 End If ext: Application.EnableEvents = True End Sub Sheet1のA2で日本を選ぶとB2:C4 に 日本 日産 日本 ホンダ 日本 トヨタ と出る。 私はFind,FindNextを使いましたが、苦手です。 Sheet2の上記のB列を総なめで探すロジックもあります。 この類の問題は中・上級で「マクロ素人」では難しいように思います。 (注)何かの弾みで、イベントが反応しないようになったら Sub test02() Application.EnableEvents = True End Sub を実行のこと。

Ericsson55
質問者

お礼

大変有り難うございます。マクロ素人にはちょっと難しいのですが、頑張って動くようにしてみます。ここまで、丁寧に教えて頂けるとは思いませんでした。本当に感謝!

Ericsson55
質問者

補足

ちなみに、マクロを学習するのにお勧めの、参考書、HPはありますか。教えて頂けると助かります。 今までは、会社でマクロが分る人に聞いたりしていたのですが、その人も特別に詳しいわけではなく、この際、きちんと勉強しようと思います。

関連するQ&A

  • トヨタ自動車はメルセデス・ベンツのパクリです。日産

    トヨタ自動車はメルセデス・ベンツのパクリです。日産自動車はBMWのパクリです。では、本田技研工業のホンダはどこのパクリなんでしょうか? メルセデス・ベンツがトヨタ自動車に怒りの鉄槌を下さないのはなぜでしょう?ヘッドライト、ヘッドグリルをパクったり、トランクをのっぺりから出っ張りにしたらそのままパクっていきますよね? 日産自動車もBMWのデザインを1世代遅れで出していくのに独国ドイツの自動車業界の人間は日本メーカーをどう思っているのでしょう? 日本の自動車メーカーが中国の自動車メーカーにデザインをパクられたとか言っているのを見て笑えました。

  • エクセルにて複数のセルの組み合わせの重複を削除するには?

     エクセルの重複セルの削除において、通常、条件が一つの場合は出来るのですが、複数セルの組み合わせの場合、どのようにすればいいでしょうか?  例えば、下記のように項目が並んでいるとします     A     B   C    D  1 メーカー  車種  2 トヨタ  クラウン  3 トヨタ  アルファード  4 トヨタ  カローラ  5 トヨタ  クラウン  6 ホンダ  シビック  8 ホンダ  オデッセイ  9 ホンダ  アコード 10 日産   サニー 11 トヨタ  クラウン 12 日産   スカイライン 13 日産   セドリック 14 ホンダ  シビック  ↓   ↓   このような配列でデーター項目セルが1万ほどあります。  例えば、このうちメーカーがトヨタで車種がクラウン(A2+B2) の組み合わせの重複を見つけ、重複行を削除するにはどのようにすればよいでしょうか? メーカーだけの重複を見つけ、重複行の削除をするには  いつもは=IF(COUNTIF($A$2:A2)>1,NA(),"")のような方法でNA()を返し、ジャンプ→エラー値で一括削除しています。  このような2つの組み合わせの場合、どのような式を立てれば良いでしょうか?教えていただけないでしょうか?

  • エクセルのマクロについて。

    皆様、こんにちは。 以下のマクロを組みたいと考えておりますが、 浅学なこともありどのように組めばよいかわかりません。 皆様のお力をお借りしたくご教示いただけないでしょうか。 ■組みたいマクロ 【前提】 ・刻刻と変化するとある膨大なデータ(以下、元データ(1)とする)のなかから、10月1日時点について設定した条件に適合したものを抽出し、αシート(表の構成はA~C、1~10を使用、Aの欄には抽出された元データのデータ番号が入力されている)にまとめた。 ・その上で、全く別のデータ(以下、元データ(2)とする)から、元データのデータ番号に適合するそれぞれの数値をD~Eの欄に入力した。 ・後日、元データの中から、先ほどと同様の条件で抽出したところ、抽出されたデータの数(量)と数値に変更があった(そのため、抽出されたデータ番号の中には、αシートに含まれているもの、いないものが混在している。)これをαと同様にまとめたものをα’シートとする。 【組みたいマクロ】 ・αとα’シートを比較し、元データのデータ番号が一緒の列の、D~Eの欄についてはαシートの数値をα’シートに自動で転記されるようにマクロを組みたい。 ■まとめ このようなマクロの原型を教えていただけますと幸甚です。 また、今後、皆様のお手を煩わせないようエクセルにつき、深く勉強したいと考えておりますので、このようなマクロを組むために必要な本、おすすめな本も教えていただけないでしょうか。 おおざっぱな質問でわかりにくいかと存じます。 条件がもっと詳細に確定しないとマクロが作れないということがありましたら、その旨質問いただけますようお願い申し上げます。 何卒よろしくお願い致します。

  • エクセルで文字列の中からいくつかの文字列を抽出したい

    次のようなリストがあります。 A1 トヨタボクシー A2 トヨタ ヴォクシー A3 ホンダ ステップワゴン A4 本田フィット A5 アコード A6 スズキアルト A7 ワゴンR A8 日産スカイライン A9 ニッサンプレセア このリストから、抽出条件のリスト トヨタ ホンダ 本田 スズキ 鈴木 ダイハツ ・・・ を使って、メーカー名を抽出したいのですが、どのような方法があるでしょうか? 抽出元のリストには、メーカー名が入っていたりいなかったり、漢字であったりカナであったりと統一性がありません。そのリストから、「日産~」「ニッサン~」と入力されているものは、「ニッサン」として抽出したいのです。 しかも、抽出した残りの、社名「ニッサンスカイライン」の「スカイライン」を、「日産プレセア」の「プレセア」の部分をついでに抽出したいのです。 ご存じの方、よろしくお願いいたします。

  • エクセルマクロで重複数値と以外の数値を抽出する

    数値の表を作成しておりますが、 重複数値で困っております。マクロで教えてください。 A列11~20まで1.2.2.4.5.6.6.8.9.10とあるデータに 2と6が重複しています 重複数値2.6をB列2行目以降に、C列2行目以降にはそれ以外の1.4.5.8.9.10 を抽出したいのですが、マクロで教えてください。 (offsetを使ってできますか?) また、重複数値を抽出する自作関数ってできるでしょうか? よろしくお願いいたします。

  • 外国の普通の人が乗る車って・・・どんなの?

    トヨタ、ホンダ、日産などは、コンパクトカーから高級車まで販売してますが、外車ってそうじゃないですよね? ベンツやBMWは高級車しか販売してないし、その様な車を購入できるのは日本でも本場のドイツでも、お金持ちの人でしょう。 では、外国(高級車が多いドイツなど)の一般市民はどのような車にのってるんですか? もっと具体的にいうと、日本のカローラあたりの車は、外国(ヨーロッパとか)ではどんな車になるんでしょうか?

  • 重複項目を除外する

    初歩的な質問だと思いますが、A列のデータがあって、B列を出力する構文を教えて下さい。ループとかでマクロを作ってみたら無限ループに入ってしまいできませんでした。宜しくお願いします。 A 列   B列 トヨタ  トヨタ 日産   日産 ホンダ  ホンダ トヨタ  マツダ ホンダ  スバル マツダ スバル

  • エクセルのマクロで教えてください

    すみません。もし教えていただける方がいらっしゃればお願いいたします。以下のようなエクセルのデータがあるとします。 この中で,同じ担当者の最新の日付の行のみを抽出したデータのシートを作りたいのです。以下のデータであれば,2,3,5,6,8,9行目を削除するマクロを作成したいのですが,どのようなマクロを作成ればよいのでしょうか。 A     B    C 1  担当者   日付   金額 2 たなか   8/1   10,000 3 たなか   8/10   15,000 4 たなか   8/21   20,000 5 さとう    8/2    8,000 6 さとう    8/12   12,000 7 さとう    8/22   15,000 8 やまだ   8/1     9,000   9 やまだ   8/7    12,000 10やまだ   8/15   18,000

  • Excelのマクロについて

    文字列から数値だけを抽出するマクロを見つけたのですが、抽出するデータを選択してから実行しなければなりませんでした。 抽出するデータはAセル以下にしかないので、データを選択しないでも実行できるようにするにはどうしたら良いのでしょうか? 宜しくお願いします。 以下見つけたマクロです。  Sub test()  Dim mydata As String  Dim c As Range  Dim i As Integer  For Each c In Selection   mydata = ""  For i = 1 To Len(c)   If Mid(c, i, 1) >= 0 And Mid(c, i, 1) <= 9 Then   mydata = mydata & Mid(c, i, 1)    End If   Next   c.Offset(0, 1) = mydata   Next  End Sub

  • エクセルのマクロ作成で困ってます

    マクロ初心者です。 ”Sheet1にあるデータについて、複数条件で抽出後、Sheet2の表に転記” という動作をマクロで組みました。 ここまでは良かったのですが、Sheet2に転記する際、下記の様にさらに条件を付加したいと思っています。 やりたいこと(ア) Sheet1で条件によりたとえば10個のデータを抽出できたとし、 1~6個目までは、Sheet2の1行~6行に転記、 7~10個目までは、Sheet2の11行~14行に転記。 ※”6個目まで1~6行に転記”というのは決まっているのですが、  この10個というのは、例であって、5個だったり、14個だったり、  抽出したデータにより異なるので、変数です。 やりたいこと(イ)   Sheet1から、さらに別の条件で抽出したデータを、  やりたいこと(ア)の10個目を転記した行のあとすぐ(例でいうと15行目)から転記したい。  ※やりたいこと(ア)で抽出した条件が6個以下だった場合、11行目から転記。 以上の2つです。 条件の抽出までは出来るのですが、 (ア)の7個目から別のところに転記 (イ)の別の条件で抽出したデータを(ア)の次(6個以下の場合は11行目)から転記 をどうやって組んだら良いかわかりません。 もし分かる方がいらしたら、 どのようなコマンド(?)を使ったら良いのか、 ご教示いただけると助かります。 よろしくお願いします!

専門家に質問してみよう