Excel2003で2つのファイルデータを自動的にひとつにする方法

このQ&Aのポイント
  • Excel2003で2つのファイルデータを自動的にひとつにする方法について教えてください。
  • ファイルAとファイルBに同じ名前のデータがあります。ファイルAの名前を参照して、ファイルBの該当する行のデータを自動でコピーする方法を教えてください。
  • Excel2003を使用して、ファイルAの名前を参照してファイルBの該当する行のデータを自動でコピーする方法を教えてください。アクセスを使用する方法も教えてください。
回答を見る
  • ベストアンサー

Excel2003で2つのファイルデータを自動的にひとつにする方法

エクセルで2つのファイルを自動的にひとつにしたいのですが、できますでしょうか? ファイルA、ファイルBに【名前が同じ】データがあるとします。  ※ファイルAはA列に名前があります。  ※ファイルBはAB列~AP列までのどこかにファイルAと同じ名前があります。 ファイルAの【名前】を参照して、ファイルBの【名前】がある行のデータを丸ごと、ファイルAの【名前】が一致する行へ自動でコピーできますか? ちなみにファイルAにはA~DP列までデータが入っていますので、それ以降にファイルBのデータの行を自動コピーされるようにしたいです。 データが1000件以上あり、地道にコピペするのは少し大変なので自動でできる簡単なやり方があったら、ぜひ教えてください。 アクセスを使うと簡単にできると、聞きましたが良くわかりませんでした。 エクセル。アクセスどちらでも良いので二つのファイルをひとつにする方法を教えてください。 ちなみに私はエクセルはあまり使いませんし、アクセスはまったくの初心者です。 本日は5時以降パソコンの前にいられないので、明日にお返事致します。 以上よろしくお願いします。

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

  • ベストアンサー
  • x0000x
  • ベストアンサー率52% (67/127)
回答No.1

こんばんは。 こんな感じで同でしょうか? ファイルAのA2から名前を格納。⇒Annnまで ファイルBのファイル名を"book2.xls"としています。(適当に置き換えてください) ファイルBは、ファイルAと同じフォルダーに格納されているか、予めOPENしてから以下のマクロを実行します。 ファイルAのA列の名前がファイルBのAB列~AP列で最初に発見した行をファイルAのDQ列以降にCOPYしています。 Sub findJoin() On Error GoTo err Dim st1 As Worksheet Dim st2 As Worksheet Set st1 = ActiveSheet Workbooks.Open ("BOOK2.xls") Set st2 = Workbooks("book2.xls").Sheets(1) Dim st1MaxRow As Long Dim st2Maxrow As Long st1MaxRow = st1.Cells(st1.Rows.Count, "A").End(xlUp).row st2Maxrow = st2.Cells(st2.Rows.Count, "AB").End(xlUp).row Dim R As Long For R = 2 To st1MaxRow Dim nmRng As Range Set nmRng = st2.Range("AB2:AP" & st2Maxrow).Find(st1.Cells(R, "A").Value, LookIn:=xlValues) If Not nmRng Is Nothing Then '発見した。 st2.Range("AB" & nmRng.row & ":AP" & nmRng.row).Copy Destination:=st1.Range("DQ" & R) End If Next st1.Activate Set st1 = Nothing Set st2 = Nothing Exit Sub err: MsgBox Error End Sub お試し下さい!!

aisu_san3
質問者

お礼

ありがとうございます。 上のマクロで大体やりたいことができました。 下のようにABをAに直したら思ったとおりのものになりました。 st2.Range("A" & nmRng.row & ":AP" & nmRng.row).Copy Destination:=st1.Range("DQ" & R) お返事が遅くなり申し訳ありませんでした。 また何かありましたらよろしくお願いいたします。

関連するQ&A

  • エクセルでファイル間での表のコピーを自動で行いたいのですが。

    エクセルでファイル間での表のコピーを自動で行いたいのですが。 エクセルで別ファイルに表のコピーを自動で行いたいのですが。 AファイルとBファイルに同じ表が作成されていて (まったく同じではありません、例えばBファイルの表には最後の列や行には合計行があるとか) Aファイルの表が変更された場合Bファイルの表も自動的に変更されて欲しいのですが 表の中の値だけでなく 表の行や列が増えたり減ったりという事も変更したいのですが

  • パート3★Excelで2つのファイルデータをマクロで自動的にひとつにする方法

    こちらで色々と教えていただき、大分解決してまいりましたが まったくの素人でマクロがわからないので是非、教えてください。 また、教えてばかりで申し訳ないので自分で少しマクロを勉強してみたいのですが どこか良いサイトまたは本など、ありましたら教えてください。 エクセルで2つのファイルを自動的にひとつにしました。 ファイルA、ファイルBに【名前が同じ】データがあるとします。  1.ファイルAはA列に【名前】があります。  2.ファイルBはAB列~AP列までのどこかにファイルAと同じ【名前】があります。  3.ファイルAの【名前】を参照して、ファイルBの【名前】がある行のデータを丸ごと   ファイルAの【名前】が一致する行へコピーします。  4.また、ファイルBに同じ【名前】が2つ以上登録されていた場合   ファイルAへコピーするときに、上書きされてしまう恐れがあるので   ファイルAへコピーされる時に行を追加、すぐ下の行にその内容を追加したい。  5.ファイルAの名前が必ずしもファイルBにあるとは限りません。   ファイルAの名前がファイルBにない場合は無視し(空白になる)、次の行へ移動し検索コピーの作業を続けたい。   ファイルBの名前がファイルAにない場合にファイルBの名前の行を丸ごとファイルAの最後の行に追加したい。   ただし、そのファイルBは【太郎】という文字を含むもの(例・山本太郎や山田太郎など)のみにしたい。 ちなみにファイルAにはA~DP列までデータが入っていますので、それ以降にファイルBのデータの行を自動コピーされるようにします。 データが1000件以上あります。 私が今使用しているマクロを下記に記述します。 わかる方いましたら教えてください。 説明がわかりにくくて申し訳ないです。 以上よろしくお願いします。 Sub sample1() On Error GoTo err Dim st1 As Worksheet Dim st2 As Worksheet Set st1 = ActiveSheet Workbooks.Open ("sample1.xls") Set st2 = Workbooks("sample1.xls").Sheets(1) Dim st1maxRow As Long Dim st2maxRow As Long st1maxRow = st1.Cells(st1.Rows.Count, "A").End(xlUp).Row st2maxRow = st2.Cells(st2.Rows.Count, "AB").End(xlUp).Row Dim InsertRow As Long Dim R As Long R = 2 While R <= st1maxRow Dim nmRng As Range If st1.Cells(R, "A").Value <> Empty Then Set nmRng = st2.Range("AB2:AP" & st2maxRow).Find(st1.Cells(R, "A").Value, LookIn:=xlValues) If Not nmRng Is Nothing Then '発見した。 InsertRow = findLoop(st1, st2, R, st2maxRow, nmRng) st1maxRow = st1maxRow + InsertRow - 1 '終了行数を補正 R = R + InsertRow - 1 '検索位置補正 Else Set nmRng = st2.Range("AB2:AP" & st2maxRow).Find("太郎", LookIn:=xlValues) If Not nmRng Is Nothing Then '★ 太郎を発見 InsertRow = findLoop(st1, st2, R, st2maxRow, nmRng) st1maxRow = st1maxRow + InsertRow - 1 '終了行数を補正 R = R + InsertRow - 1 '検索位置補正 End If End If End If R = R + 1 '繰り返し回数を更新 Wend st1.Activate Set st1 = Nothing Set st2 = Nothing Exit Sub err: MsgBox Error End Sub '★ 同じ名前が有る場合行を下に追加してコピー Function findLoop(ByVal st1 As Worksheet _ , ByVal st2 As Worksheet _ , ByVal R As Long _ , ByVal st2maxRow As Long _ , ByVal nmRng As Range) As Long On Error GoTo err findLoop = 0 '追加行数を初期化 Dim stopAddr As String stopAddr = nmRng.Address 'Findの終了判定アドレス Do findLoop = findLoop + 1 '発見回数をカウント If findLoop > 1 Then '複数発見した場合に行を追加 st1.Rows(R + 1).Insert Shift:=xlShiftDown R = R + 1 'ファイルAの格納位置は追加行へ End If '発見した行をCopy st2.Range("A" & nmRng.Row & ":AP" & nmRng.Row).Copy Destination:=st1.Range("DQ" & R) '次を検索 Set nmRng = st2.Range("AB2:AP" & st2maxRow).FindNext(nmRng) If nmRng Is Nothing Then '発見できないので終了 Exit Do End If Loop While nmRng.Address <> stopAddr Exit Function err: MsgBox Error End Function

  • エクセルのA列に入力したデータを別シートと連動させる方法

    エクセル2000です。 A列   B列   C列 言葉   意味   例文 とシート1に入ってるデータがあります。 500行程入っているのですが、A列のデータだけをシート2にコピーして一覧で見られるようなシートを作りたいと思っています。 でもA列だけだと縦長でとても見づらいため、B列以降も使い全て20行位にしたいのですが、A列だけをコピーしてシート2に貼り付けた時に自動で各列20行位に収まるような関数やマクロの方法ってありますでしょうか? また今後もシート1、A列の言葉が増えた時にシート2も関連して増えるようにすることも出来ますでしょうか? どうか教えて下さい!

  • データの抽出

    エクセルの使用方法で、質問です。 一つのファイルに入っているデータB  ×××   ○○○   △△ 1------   ------   ---- 2------   ------   ---- 3------   ------   ---- 4------   ------   ---- ・ ・ ・ と、もう一つのファイルに入っているデータA  ×××   ○○○   △△  ■■■ 1------   ------   ---- 2------   ------   ---- 3------   ------   ---- 4------   ------   ---- ・ ・ ・ の△の行のマッチングを行い、重複している列に、データBの該当している列のコピー■の行に 書き出したいのですが、何かいい方法はないでしょうか。 よろしくお願いいたします。

  • 「Excel」で、異なるブックのデータを一つにまとめたい。

    「エクセル2000」を使用しています。 異なるブックのデータを、うまく一つにまとめる 方法があるかどうか、お教え頂きたいのですが…。 「Book1.xls」には A列に名前 B列に部署名 が、それぞれ入っています。 「Book2.xls」には A列に名前、 B列に内線番号 が入っているとします。 そこで、「Book1」のそれぞれの名前の行に 「Book2」の「内線番号」を表示させたいのですが… そんな事は可能でしょうか? 「Book1」と「Book2」の「名前」のデータは、 ほぼ同じものが入っているのですが 並び順は異なっています。 (「並べ替え」を行ったとしても、 「Book2」の方が遥かにデータ量が多いので、 どうしても行は一致しません) 「同じデータを探して貼り付ける」 という作業が必要になると思うので、 やはり難しいでしょうか…。 ご助言願います。

  • エクセル 非表示行を上書きせずにコピーする方法

      エクセル2010を使っております。 例えば、 A列とB列にデータが入っており、B列のデータをそのままA列に平行移動で上書きコピーしたいのですが、 条件がありまして、 特定の行(ここでは10行目から15行目としますが)を非表示状態にしております。 この非表示行を飛ばして上書きしたいのです。 ですから、結果としては ・A列の1~9行目まではB列の1~9行目のデータが入っていて ・A列の10~15行目までは元のA列の10~15行目までのデータが入っていて ・A列の16行目以降にはB列の16行目以降のデータが入っている、 ということになります。 可視セルを使ってもみたのですが、 どうしてもA列の10行目以降にB列の16行目以降のデータが入ってしまいます。 どのように処理したらよいかアドバイスよろしくお願いします。

  • 【EXCEL】 (マクロを含む)ファイル内のデータを分割保存する方法

    いつもお世話になっております。 EXCELのことで、お聞きたいことがあり、質問させていただきます。 今手持ちのデータには、すこし種類が違うものが混ざっています。そして、A列にはデータ全体の通し番号が1~10000行までと連続的にふってあり、B列には種類ごと「1」からと新しく番号がふってあります。 ですので、たとえば、1~150行までが一種類のデータで、151行~500行までは別の種類のデータだとすると、それぞれのB列は、1~150、1~350というふうになっています。ただ、「1」が始まるところは規則的ではありません。 そこでですが、そのB行の番号が新しく1から始まるところから次の1が始まる直前のところまでを、まとめて、一つのファイルとして保存したいです。そうすることで、1~10000行をもつデータ全体は、いくつかのファイルに分割され、別々に保存されることになると思います。 ただ、このデータには、マクロ(this bookと標準モジュールに)も含まれており、それも一緒にファイルごとに保存したいです。 現時点では、上の行から下の行へと順番に「1」が始まるところを目で追って探し、いちいち切り取りしながら、手作業でやっていますが、データ量がかなり多くて、困っております。 なにか、より能率のいい方法はないでしょうか。 お忙しいところすみませんが、ご存じの方にはぜひとも教えていただければと思います。よろしくお願いいたします。

  • データのテキストファイル抽出

    データの抽出に困っています。 エクセルデータにてA~Lのフィールドに値が入っていて、1000レコード程のデータを ・1レコードずつ ・A列のフィールドをファイル名に ・テキストファイルに出力 ・テキストファイルには1レコードを縦に、フィールドごと改行して並べる 上記のようにして作成する必要があります。 今までは、 A B C...K L となっているデータの列と行を入れ替えて A B C . . K L としてテキストファイルを作成し、セルAのフィールドをファイル名にして、 手作業で1列ごとにコピー&ペーストして行っていました。 非常に効率が悪いので、全自動化もしくは一部自動化出来ないかと試行錯誤していますが 良い方法が見つけられません。 何か良い方法をご存知の方がおりましたら教えて下さい。

  • エクセルファイルを別名でたくさん作る方法

     エクセルファイルでの質問です。 現在「A-1」と言う名前のエクセルファイルが有ります。 これをコピーして「A-2」と言うファイルを作ります。 最終的に列が1から10まであり、行がA~Pまであります。 ファイル数は全部で約160個になります。 1個1個名前を変えてコピーしていたのでは時間が掛かるので、BATファイルを作ってコピーできればと思っています。 しかし、やり方が分からなくて困っています。 教えて下さい。 よろしくお願い申し上げます。

  • エクセルのデータ加工

    エクセルのセルで、縦に1行目名前A、2行目住所A、3行目電話番号A、4行目名前B、5行目住所B、6行目電話番号B・・・、という具合に並んでいるデータを横に1列目1行目名前A、1列目2行目名前B、2列目の1行目住所A、2列目の2行目住所B、3列目の1行目電話番号A、3列目の2行目電話番号B、という風に加工したいのですが、一つ一つセルを移動するのではなく、なにか良い方法はありませんでしょうか?ちなみにデータは1000件ほどあるのですが。

専門家に質問してみよう