• ベストアンサー

EXCEL でマクロを使用してのデータ統合方法について

現在マクロを利用して2つの "ブック" の sheet1 に入力されているデータを統合しようとしています。 各ブックには以下のようなデータが入力されています。 book A [名前、住所、連絡先、名前ID] book B [名前ID、所属部署、所属長] これを、名前ID をキーとして、新規 book の sheet1 に統合したいと思っています。 新規 book [名前、住所、連絡先、名前ID、所属部署、所属長] 現在、ADO を使用して2つのファイルの統合までは完了したのですが、データが以下のように入ってしまっています。。 [名前、住所、連絡先、名前ID、所属部署、所属長] aaa bbb ccc ddd --- --- --- --- --- --- ddd aaa bbb ccc *--- は、空セル これをきっちり同列に統合したいのですが、有用なマクロサンプルはございませんでしょうか?もしくは、参考 URL など御座いましたらご教授願えますと助かります。

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

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

bookAでは名前,book Bでは名前IDと名称が変わっているが、同じ氏名コードや生徒・学生番号のような、ユニークなコードですか。一方は 漢字氏名ではないでしょうね。そこが大事と思う。 同じコード体系のコードをそれぞれのファイルが持つなら (1)アクセスで氏名IDでファイルを結合 (2)エクセルで、両ファイルを名前IDでソートし、バッチ作業の定石、ファイルレコード・マッチングのロジックで(エクセルVBAのプログラムを組んで)結合できます。 アクセスVBAやエクセルVBAの質問者の経験は? >これをきっちり同列に統合したいのですが 列というのはエクセルの概念で、シートの同列に並べるというよりも 統合しないといけない。 エクセルで、関数だとシートが式だらけになるが、VLOOKUP関数でも出来るのでは。レコード数の多少が心配ですが。VLOOKUPはVBAコードの中でも使えるのをご存知かな(VBAで使えば関数式はセルに設定されない)。 ーー 質問に概数の量を書かないのも不十分。 方法の選択にも影響する。 >データが以下のように入ってしまっています。。 ADOの性ではないでしょう。やり方(コードの書き方)が不適当でしょう。この点ならその点に絞って質問したら。

haz006666
質問者

補足

回答ありがとうございます。VLOOKUP ですよね。 ちょっと考えてみます。 概数は、300件程度です。統合に掛かる時間は問われていません。 もともとは、名前ID が双方のデータで共通なので、それをキーとして並べ替えて、お互いに一致したものをコピペするというので事足りる話なのですが、どうもマクロにして一発でやるというのに作業の依頼者が拘っておられるので、分からない話になってしまいました。ご指摘ありがとうございました。 VBA経験は無いです。ADO のサンプルは、同じような質問をされていたほかの方の、以下のコードを検証に使いました。データフォルダにある book の内容ををひたすら INSERT していくという内容で、動かしたような動作になっています。。INSERT の部分を UPDATE とかにして、何とかしたいと思ったんですが、いかんせん組み方がうまく思いつきません。申し訳ないですが、何かお知恵をお貸しいただけると幸いです。 Sub Marge() Dim cn Dim rs Set cn = CreateObject("ADODB.Connection") cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & XLS & ";Extended Properties=Excel 8.0" Dim fs Set fs = CreateObject("Scripting.FileSystemObject") Dim folder Set folder = fs.GetFolder(DIR) Dim file For Each file In folder.Files cn.Execute "INSERT INTO [Sheet1$] SELECT * FROM [Excel 8.0;database=" & file & "].[Sheet1$]" Next

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

その他の回答 (5)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.6

私なら双方に重複する”名前ID”をキーとしてDictionaryオブジェクトを使いますが、 ”ADO”が必須条件になっているのであればしょうがないですけど。

全文を見る
すると、全ての回答が全文表示されます。
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#1です。 >意図するところは、マクロを一回動作させれば one step で作業が官僚できるということにあります。 一度作成してしまえば、統合したデータの表上で右クリックして、「データの更新」を行えば、一発で最新化できますよ。 なんでしたら、こんなマクロにも出来ます。 Sub test() Range("A2").QueryTable.Refresh BackgroundQuery:=False End Sub いずれにしてもお気に召さないと思いますので、現行のコードを開示されてはいかがでしょうか。

haz006666
質問者

お礼

回答ありがとうございます。 もともとのデータは非常に単純で、双方のデータの 名前 ID には規則性があるので、お互いに出力されたデータを並べ替えてコピペしてしまえば終わるような内容なのですが、できるだけ何も触りたくないというマネジメント層のわがままからこのような形での作業を考えてます。おそらく、wizard を使用するならば、マネジメント層に wizard を使って作業してくれといわなければならないという政治的な話があります。 いろいろありがとうございます

全文を見る
すると、全ての回答が全文表示されます。
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

マクロ使わない方法ですが、私なら・・・ 1、book A の4列をコピィ 新規book のSheet1に貼り付け 2、book B の3列をコピィ 新規book のSheet2に貼り付け 3、新規bookのSheet1の5列目より左にVLOOKUP関数  =VLOOKUP(D2,Sheet2!A:C,2,FALSE) とか入れておきます。 マクロにする部分は1と2の部分位で宜しいのでは。

haz006666
質問者

お礼

回答ありがとう御座います。 マクロが必須条件となっており、私も頭を抱えております。できれば、ご提示いただいたような方法でやるのがスマートだとは思っているのですが・・。

全文を見る
すると、全ての回答が全文表示されます。
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

#1です。推敲が甘くて申し訳ありません(本日2件目...) 注意 1.ウィザードからは、ひとつのワークブックしか設定できないようなので、クエリのビューを表示した後で、テーブルの追加で別のワークブックを追加する必要があります。 の間違いです。読み替えてください。

haz006666
質問者

お礼

回答ありがとう御座います。 実は、データ統合方法にマクロを使用しなければいけないというのが必須条件となっており、頭を抱えております。説明不足で申し訳ありませんでした。 意図するところは、マクロを一回動作させれば one step で作業が官僚できるということにあります。

全文を見る
すると、全ての回答が全文表示されます。
  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

データ/新しいデータベースクエリでやれば下記の様なSQLでできます。ADOでも二つのワークシートに接続して、同様にクエリが出来そうに思います。現在のコードを呈示されれば、識者のアドバイスが得られるでしょう。 SELECT `Sheet1$`.名前, `Sheet1$`.住所, `Sheet1$`.連絡先, `Sheet1$`.名前ID, `Sheet1$_1`.所属部署, `Sheet1$_1`.所属長 FROM `C:\Documents and Settings\?????\bookA`.`Sheet1$` `Sheet1$`, `C:\Documents and Settings\?????\bookB`.`Sheet1$` `Sheet1$_1` WHERE `Sheet1$`.名前ID = `Sheet1$_1`.名前ID 注意 1.ウィザードからは、ひとつのワークシートしか設定できないようなので、クエリのビューを表示した後で、テーブルの追加で別のワークシートを追加する必要があります。このとき、ドロップダウンの幅が狭く、パスが長いとファイル名が確認できないという素晴らしさ... 2.テーブル追加後、名前IDでの結合は、フィールド名のD&Dで出来ますが、追加したワークシートのテーブルの他のフィールドは表示されないので、SQLアイコンでSQL表示にして、追加してやる必要がある様です。(機能を見つけてないだけかもしれません) なお、Sheet1$_1は、msqueryが異なるワークシートのフィールドを区別するため、_1と自動的に付与したものです。

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

関連するQ&A

  • Excelシートの統合するマクロなどがありましたらお教えください。

    各支店(約200)からExcelシートで送信されてくる報告内容を別のシートに一気にまとめるマクロ等はないでしょうか?ご存知の方よろしくお願いします。 (例) A支店  項目  aaa    bbb    ccc    ddd    eee        10    20     30    0     0         8    8      0     0      0               以下約300件 B支店  項目  aaa    bbb    ccc    ddd    eee        11    22     33    0     0         9    9      0     0      0               以下約300件      別シートに 項目  aaa    bbb    ccc    ddd    eee        10    20     30    0     0         8    8      0     0      0        11    22     33    0     0         9    9      0     0      0                   以下省略           よろしくお願いします       

  • 【エクセル】空セルを埋める方法

    お世話になります。 下記のような表があります。 1行目:AAA,BBB,CCC,DDD 2行目:空セル,BBB,CCC,DDD 3行目:空セル,BBB,CCC,DDD 4行目:aaa,BBB,CCC,DDD 5行目:空セル,BBB,CCC,DDD ・・・ こんなパターンの行が結構あります。 空セル部分を下記のように埋めたいのですが 1行目:AAA,BBB,CCC,DDD 2行目:AAA,BBB,CCC,DDD 3行目:AAA,BBB,CCC,DDD 4行目:aaa,BBB,CCC,DDD 5行目:aaa,BBB,CCC,DDD てっとり早く埋める方法ありませんか? いまは、【ctrl+↓】 ⇒【↑】⇒【ctrl+D】を延々繰り返しています。 宜しくお願いいたします。

  • エクセルのマクロについて教えて下さい。

    エクセルのマクロについて教えて下さい。 Sub Ref() Dim ax As String Dim num As Integer, i As Integer Dim arr As Variant Dim tex As String Range("A1").Select ax = ActiveCell.Formula arr = Split(ax, ",") For i = 0 To UBound(arr) num = i + 1 Cells(num, 1).Value = arr(i) Next i For i = 1 To 10 ActiveCell.Offset(, 1).Select tex = ActiveCell.Formula Selection.Resize(num, 1).Select Selection.Formula = tex Selection.Resize(1, 1).Select Next i End Sub このマクロを10行ほどまで対応させたいです。 例として2行の表ですが、           A         B   C  D   E  F 1 C100,C101,C102,C103 aaa bbb ccc ddd eee 2 C104,C105,C106,C107 とうい表を、     A B  C  D   E   F 1 C100 aaa bbb ccc ddd eee 2 C101 aaa bbb ccc ddd eee 3 C102 aaa bbb ccc ddd eee 4 C103 aaa bbb ccc ddd eee 5 C104 aaa bbb ccc ddd eee 6 C105 aaa bbb ccc ddd eee 7 C106 aaa bbb ccc ddd eee 8 C107 aaa bbb ccc ddd eee という表にしたいです。 結合してから展開しようと考えたのですが 1列目の文字列の最後にカンマが無い場合、ある場合がありまして、 対応する事が出来ませんでした。 マクロ初心者なので教えてください。 よろしくお願いします。

  • EXCELで行の先頭データが同じ行の削除方法について

    EXCELで次のようなことをしたいのですがどうしたら簡単にできるでしょうか?  AAA   AAA  AAA  AAA  AAA  BBB  BBB  BBB  CCC  DDD  DDD  DDD  DDD 上ようのなデータで重複している部分を削除し、  AAA  BBB  CCC  DDD としたいのですが。 今は一行々々で確認しながら削除してます。3000行程あり困ってます。 どうしたら簡単にできるでしょうか?  

  • Excelで同一のデータを抽出して横並びに

    A     B  C     D 商品コード 注文数  商品コード 注文数 aaa     15  ccc     4 bbb      12  ddd     6 ccc     10  aaa     22 ddd     6   eee     10 eee     5   bbb     7 fff       8 kkk 9 kkk 7 lll 4 上記のようなデータを 以下のように同じ商品コードを横並びに表示させたいのですが どういったcountifとかで試したのですが上手くいかず、どのような関数を使えば可能でしょうか? A     B  C     D 商品コード 注文数  商品コード 注文数 aaa     15  aaa     22 bbb      12  bbb     7 ccc     10  ccc     4 ddd     6   ddd     6 eee     5   eee     10 fff       8 kkk 7 kkk 9 lll 4 宜しくお願い致します。

  • Excelの関数に詳しい方、お願いします。

    わかりづらい説明かもしれませんが、よろしくお願いします。 例として、 AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF AAA*BBB*CCC*DDD*EEE*FFF ・ ・ ・ といった文字列がエクセルの先頭列A1~A100までずらりと並んでいるとします。 各アルファベットには任意の数字(日付など)が入るとして、この並んだ百件のデータからCCCの部分の最大値を表示するための適切な関数があれば教えていただけないでしょうか? 現在少々急いでいるため言葉足らずで申し訳ありませんが、よろしくお願いいたします.

  • Excel2000 データの振り分けと配列変換について

    シート1にデータを一気に入力してあります。 第1段階、所属ごとに所属1は所属1のシート、所属2は所属2のシートというようにシートに振り分けをしたい。 第2段階、振り分け後データごとに2列になるように印刷をしたい。 この様に入力されているデータを A   B   C   D 番号 名前   所属  1 AAA  1  2 BBB  2  3 CCC  1  4 DDD  3  5 EEE  4  6 FFF  5  7 GGG  6  8 HHH  3  9 III  4 10 JJJ  6  ・  ・  ・ 所属ごとにシートに振り分けて、2列 任意の単位で(この場合では、5単位ごと)になるように印刷したい。 所属1のシート 番号 名前   所属 番号 名前   所属  1 AAA  1   6 FFF  1  2 BBB  1   7 GGG  1  3 CCC  1   8 HHH  1  4 DDD  1   9 III  1  5 EEE  1  10 JJJ  1 技が無いため、切り張りしていますが、なにか良い方法がありましたら教えてください。

  • エクセルで列にあるユニークなデータの個数が知りたい

    おはようございます。 エクセルでA列に以下のようなデータがあるとします。 この中で何種類のデータがあるのかを知りたいのです。 この場合は、AAA,BBB,CCC,DDD,EEEの5種類なので5という答えが欲しいのです。 ただし、A列に入るデータは非常に多岐(800種類以上)に渡ります。 また、印刷を前提としてるためソートなどはできません。 さらに1枚のシートにこのようなデータがいくつかあるので、その決まった範囲内で個数を抽出する必要があります。 なにとぞ皆様のお知恵をお貸しくださいませ。 よろしくお願いします。 AAA AAA BBB CCC AAA DDD DDD BBB DDD DDD EEE EEE

  • excel ピボットテーブルについて

    お世話になります。 Excelのピボットテーブルについてですが、例えば下記のような感じのデータを 集計したいときに、行ラベルに「名前」を持って行き、列ラベルには「日付」を持って いったとしたときに、行ラベルはAAA、BBB、CCC、DDDではなく、AAAとBBB以外は その他でまとめたいとき(AAA、BBB、その他)、どう設定すればいいか悩んでいます。 ご存知の方がいらっしゃれば教えてください。ちなみにExcel2010を使用しています。 日付 名前 個数 4/1  AAA 1 4/1  BBB 1 4/2  CCC 1 4/2  DDD 2 4/2  AAA  3 4/3  CCC 1

  • エクセルについて

     複数のエクセルファイルの中に複数のシートがあります。それを1つのエクセルファイルにまとめるフリーソフトもしくはよい方法があれば教えていただきたいのですがよろしくお願いします。              こんな感じにしたいです。 1.xls sheet1 aaa sheet2 bbb 2.xls sheet1 ccc sheet2 ddd        ↓ 統合.xls   sheet1 aaa sheet2 bbb sheet3 ccc sheet4 ddd

バリスタの選定方式について
このQ&Aのポイント
  • バリスタの選定方法を解説します。
  • AC100V入力ラインに2kVの印加電圧の場合、適切なバリスタの電圧を選ぶ方法をご紹介します。
  • バリスタは入力電圧に応じて適切な電圧を選定する必要があります。具体的な選定方法について解説します。
回答を見る

専門家に質問してみよう