• 締切済み

エクセル VBA で他の表のリストを紐付けたい

エクセル VBA で他の表のリストを紐付けるには、 どのような、コードを記入すればよろしいでしょうか? A1にBAA、A6にCAA、A11にEAAという項目があります。(図 マクロ実行前参照) 項目の下の数字を検索値として、リスト(別ワークブック)の C列とD列の値を紐付けしたいのですが、 その場合どのようなコードを記入すればよろしいでしょうか? ※リスト(別ワークブック)はBAA、CAA、EAAの3項目が全て混ざった形のため  その項目を自動認識して、数字の検索値で紐付けする事は可能でしょうか? よろしくお願い致します。

みんなの回答

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! 別Bookではなく アップされている左側の画像のSheetがSheet1・右側の表がSheet2にあるとしての一例です。 Sub test() Dim ws1 As Worksheet, ws2 As Worksheet, i As Long, k As Long, str As String Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") ws2.Columns(1).Insert k = ws2.Cells(Rows.Count, 2).End(xlUp).Row Range(ws2.Cells(2, 1), ws2.Cells(k, 1)).Formula = "=B2&""_""&C2" ws1.Columns(1).Insert For i = 1 To ws1.Cells(Rows.Count, 2).End(xlUp).Row If ws1.Cells(i, 2) <> "" Then If Not IsNumeric(ws1.Cells(i, 2)) Then str = ws1.Cells(i, 2) Else ws1.Cells(i, 1) = str & "_" & ws1.Cells(i, 2) End If End If If ws1.Cells(i, 1) <> "" Then If WorksheetFunction.CountIf(ws2.Columns(1), ws1.Cells(i, 1)) Then k = WorksheetFunction.Match(ws1.Cells(i, 1), ws2.Columns(1), False) With ws1.Cells(i, 3) .Value = ws2.Cells(k, 4) .Offset(, 1) = ws2.Cells(k, 5) End With Else ws1.Cells(i, 3) = "該当データなし" End If End If Next i ws1.Columns(1).Delete ws2.Columns(1).Delete End Sub こんな感じではどうでしょうか?m(_ _)m

n151713m
質問者

お礼

お礼が遅くなり申し訳ありません。 教えていただいたコードで勉強させていただきました。 とても勉強になりました。ありがとうございました。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

リスト(別ワークブック)を現在のブックにコピーできますか? 出来るのなら、コピーしてその表に「名前」をつける。 そうすれば、同じブック内ならVLookUpで参照可能。(範囲に上記の「名前」を指定する)

n151713m
質問者

補足

bin-chan様 回答ありがとうございます。 VLookUpで参照可能ですが、実際のリストは項目も多く手間がかかり、 VLookUpの際作業を間違える可能性があるため VBAで自動化できないかと考えました。

関連するQ&A

  • リストからデータを紐付けしたい

    エクセルで別シートのリストからデータを紐付けするには、 どのようにすればよろしいでしょうか? 関数でもVBAでも良いので教えてください。 リストのA列、B列に文字列が記入してあります。 Sheet1のB列の文字列を検索値として、 リストのA列の文字列と部分一致するものの横の列(B列)の値を Sheet1のC列に紐付けしたいのですが、どのようにすればよろしいでしょうか? ※リストの「1AA111」という文字列とSheet1の「1AA111-G」という文字列の場合    「1AA111」の箇所で紐付けしたい(図を参照下さい) エクセルは2007,2010を使用しております。 よろしくお願い致します。

  • Excelで一つのシートに複数のリストを作成し、別のところにその集計表

    Excelで一つのシートに複数のリストを作成し、別のところにその集計表を作成したいです。リスト(1)はA列に文字列(例えば社名とか)B列に数字、リスト(2)はD列に文字列E列に数字です。集計表は、G列に各リストの文字列を重複分を除いて抽出して表示させ、H列には数字(重複文字列の数字は合計します)が表示されるようにしたいです。どのようにしたらいいでしょうか?参考URLでもいいのでお願いします。

  • excel vba リストアップ?

    超初心者です。 テキストファイルからEXCELへデータを取り込み、ある列のデータより項目を抽出し、コンボボックスへリストアップしたいです。    A列 1.りんご     コンボボックス内に 1.りんご      1.りんご 1.りんご      2.みかん 2.みかん   →  5.なし   2.みかん      10.ぶどう 5.なし        と表示させたい 10.ぶどう 10.ぶどう  ・  ・ なお、A列のデータは毎回変動します。 A列のデータには頭に数字がついており、事前に昇順で並べ替えて あります。 現在、ループを使い、1列ごとに抽出していますが 動作時間の短縮を図りたくて修正しているところです。 ループを使わず、一度に処理できる方法があれば教えてください。 説明がわかりづらいときはすみません。。。

  • excelのリスト絞り込みで困っています。

    下記のようなデータがシートにあった場合 A列         B列         C列 商品コード     商品コード1     品番 AA          AA          A1 AB          AA          A2 AC          AA          A3 ZZ          AB          B1            AC          C1 D列に商品コードの入力規則によるリストを指定。 E列に品番の入力規則によるリストを指定し 選ばれた商品コードに該当する品番を E列のリストに表示したい場合はどうしたらよいのかご教授ください。 D列のリストでAAを選んだら E列の品番のリストにはA1とA2とA3が出るというイメージです。 その際にZZを選ばれた場合は、品番のリストが無いのでエラーとする方法も あわせて教えてください。

  • エクセル(vba)で教えてください。

    エクセル(vba)で教えてください。 vbaはほぼ初心者ですので、皆様のお知恵を拝借させてください 現在リストを作成しているのですが、最終更新日時を自動で取得するようにしてみたいのですが、うまくいかないです。 リストは列(項目)固定で、最終行に追加していくというものです。 1カテゴリ=1行での入力になります。 例えば、A,C列の項目のみ記入すると、その行のL列に自動で日時が入力される。 また翌日ブックを開いても、その日時は最終入力日のままだが、追加でD列の項目を 入力すると日時も更新される、というものです。 説明が足りないかもしれませんが、どなたか詳しい方よろしくお願いします。

  • エクセルのVBAについて

    エクセルのVBAに詳しい方がいらっしゃれば、助けて頂きたい事がございます! ・Sheet1(以下S1と記載)の、1列目に、A1セルより、項目として、「ID、地区、住所、電話番号、資産名、耐用年数、取得日」が記載(=S1は項目のみ) ・Sheet2(以下S2と記載)の、1列目に、A1セルより、項目(住所、設備、資産名、区域、備考)と2列目以降にそのデータが記載 【やりたいこと】 S1の項目と完全一致するS2の項目(上記では、住所、資産名のみ)の2列目以降のデータを、S1の2列目以降に張り付ける作業を自動化するコードを書きたいのですが、上手くいかず・・・ どなたかコードを記載して頂けないでしょうか?また下記の前提を考慮したコードであると、なお助かります! 【前提】 ・「S1の項目が空欄にぶつかったら、検索を終了」という事をループに入れる(S1の項目数は変動するため) ・「S2の2列目以降の全てのデータをS1に張り付ける」という事をコードに入れる(S2の2列目以降のデータの列数も変動する且つ途中に空欄も含むため) ・S1の「地区」に、S2の「区域」を反映できるようなコードを入れる 宜しくお願いいたします_(._.)_

  • Excel リスト整理のマクロ

    Excelのマクロでリストを整理したいのですが、上手いやり方が見つかりません。 以下のように2つのシートにそれぞれ項目A、項目Bがあり、数字がリストされています。 並び方は、項目Aが1であるもので項目Bの数字が小さいものから並べ、 項目Aが1のものが終われば、項目Aが2のもので同じように項目Bの数字が小さいものから 並べ、以後それを繰り返しています。 Sheet1         Sheet2 項目A 項目B 項目A 項目B  1    1        1    1  2    1        1    2  2    2        2    2  2    3        2    4                3    2  3    3        3    3 上のリストを、マクロを使って下のリストのようにしたいと思っています。 Sheet1 Sheet2 項目A 項目B     項目A 項目B  1    1        1    1                1    2  2    1        2    2        2    2  2    3                2    4                3    2  3    3        3    3 つまり、同じ項目Aおよび項目Bを持つ行はそれぞれ同じ行に並べ、 片方の項目Aおよび項目Bと同じ項目A・Bをもう片方のリストが持たない場合は その行を空白にしたいのです。  どなたかお分かりになる方いらっしゃいましたらご教授頂けますと幸いです。 よろしくお願いします。       

  • リストボックスの列見出し(ExcelのVBA)

     ExcelのVBAでのリストボックスコントロールについての質問です。  リストボックスの列見出しを作りたいのですが、なかなか上手く行きません。リストボックスに項目を設定するのはExcelのシートから… ----- WorkSheets("Sheet1").ListBox1.ListFillRange = "A1:B2"  ↑(Sheet1のA1:B2のデータをListBox1に追加する場合)↑ ----- のようにするのではなく… ----- Dim MyList(1,1) ~~~(MyList配列にデータを代入) Userform1.ListBox1.Column = Mylist() -----  というように、コードから項目を追加しています。  そこで、列見出しを追加したいと思ったのですが… ----- ListBox1.ColumnHeads = True ----- と記述しても、列見出しは真っ白で、その下に項目が表示されるだけです。  列見出し専用の配列を用意しなければならないというような事はあるのでしょうか?  もしあれば、どのように定義すればよいのでしょうか。  ちなみに、用いているExcelの環境は『Microsoft Excel 2004 for Mac (11.5.6)』、VBAの環境は『Microsoft Visual Basic (11.5)』です。  我流で覚えてきたような知識ですので、とても常識的な事を聞いているかもしれないですが、回答宜しくお願いします。

  • エクセルVBA 対比表を作りたいです。

    お世話になります。混乱を極めてしまったので、質問させて頂きます。 下記の様なリストがあります。 A列  B列 No  相手 1   1 1   2 1   3 1   5 2   1 2   2 3   2 3   3 3   4 ・  ・ ・  ・ ・ 以下、数百まであります。 上記で 「1-2」と「2-1」はありますが、「1-3」はあるけど「3-1」がありません。 (その他「1-5」無いなどです。上記は一例としてます。) この場合「1-3」の部分の「1」を「0」などに置き換えたいのですが、下記コードを 書きましたが、上手く目的の結果にたどり着けない状態になっております。 (同じ部分を検索しているだけになってしまっていて。。。) 下記はユーザーフォームからのコードになりますので、ListBoxの記載ありますが、 選択されているListBoxの値で非一致を探すって形にしようとしております。 For Each KRR In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row) If KRR = ListBox1.List(ListBox1.ListIndex, 0) Then SDF = Cells(KRR.Row, 2) For Each SRR In Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row) If Cells(SRR.Row, 1) = SDF Then SSDF = 1 End If Next If SSDF <> 1 Then Cells(KRR.Row, 1) = 0 End If SSDF = 0 End If Next 要するにA列とB列を反対にした状態で、一致する値が無い場合は、対象CellのA列に「0」を 代入したいって事を考えております。 完全に混乱してしまっているので、お助け下さい。。。

  • エクセルでこのリストの加工をしたいのですが

    A列(ID)  B列(エラーコード)  C列(日付)に A000  01;02  4/1 A019  03  4/10 A008  02;05;07  3/29 ・ ・ ・ のように入っているデータがあり、 B列には「;」セミコロンで区切られたデータが1~25個入っています。 この全リストを下記のように加工したいのですが可能でしょうか? A列  B列  C列に A000  01  4/1 A000  02  4/1 A019  03  4/10 A008  02  3/29 A008  05  3/29 A008  07  3/29 ・ ・ ・ B列のエラーコード毎(「;」毎)のレコードに加工したいのです。 (エラー数、エラー種別数ランキング等集計のため) 標準関数と多少の手作業でもマクロでもVBAでも構わないのですが、 元リストが8000レコードあるので効率よく加工する方法があれば教えてください。

専門家に質問してみよう