エクセルのVBAでデータをコピーしたい

このQ&Aのポイント
  • エクセルのVBAを使用して、名前を基準にデータをコピーする方法を知りたいです。
  • 1つのエクセルファイルには社員の名前とデータが複数書かれた行があり、もう1つのエクセルファイルには名前だけが入っています。名前を基準にして、前者のファイルから後者のファイルへ必要なデータをコピーしたいです。
  • マクロを勉強中で、両方のファイルを開いて指定したセルをコピーすることはできますが、VLOOKUPのように該当するデータを選び出す方法がわかりません。どうすればよいでしょうか?
回答を見る
  • ベストアンサー

エクセルのVBAでデータをコピーしたい

1つのエクセルファイルには名前(社員全員分)と各人のデータが 複数書かれた行が入っています。 もう1つのエクセルファイルには名前(一部社員分)だけが入っていて データの部分が空白です。 名前を基準に前者のファイルから後者のファイルへ必要なデータを コピーしたいのですが非常に手間で遅々として進みません。 後者のファイルは名前の選び方や入力したいデータの種類で 複数のパターンがあって既に定型のものが出来上がっているので 変更できません。 データを入力すべきところに値だけコピペしたいです。 マクロを勉強し始めたのですがなかなか理解が進んでいません。 両方のファイルを開いて指定したセルをコピペすることは出来るのですが、 該当するデータをVLOOKUPのように選び出すにはどうすればよいのでしょうか?

  • erara
  • お礼率37% (189/500)

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

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

VBAを始めて間もないレベルの人がやる課題ではない。 また課題を文章にして、回答者に丸投げしただけだし。 ーー まあしかし、参考までにやってみた。 下記でも、長年の勉強の結果がいっぱい詰まっています。 ーー 部分氏名と全部氏名の2つのブックがあり 部分氏名.xls 例データ Sheet1 A2:A6 橋本 茂 山田 力 近藤 健二 北野 真二 小林 雅夫 -- 全部氏名.xls 例データ Sheet1.A1:B13 氏名 データ 橋本 茂 名古屋市 奥田 一 東京都 元田 清二 横浜市 山田 力 豊田市 森野 文雄 千葉市 近藤 健二 北九州市 植山 寛 さいたま市 原田 郁夫 新潟市 北野 真二 奥州市 皆川 俊夫 甲府市 小林 雅夫 仙台市 奥 実 八王子市 ーー 標準モジュールに Sub test01() Dim bk1 As Workbook Dim bk2 As Workbook Dim sh1 As Worksheet Dim sh2 As Worksheet Set bk1 = Workbooks("部分氏名.xls") Set bk2 = Workbooks.Open("C:\Documents and Settings\xxxx\My Documents\全部氏名.xls") Set sh1 = bk1.Worksheets("Sheet1") Set sh2 = bk2.Worksheets("Sheet1") '-- d1 = sh1.Range("A65536").End(xlUp).Row MsgBox d1 d2 = sh2.Range("A65536").End(xlUp).Row MsgBox d2 For i = 2 To d1 MsgBox sh1.Cells(i, "A") x = Application.WorksheetFunction.VLookup(sh1.Cells(i, "A"), sh2.Range("A1:B" & d2), 2, False) MsgBox x sh1.Cells(i, "B") = x Next i End Sub を入れて実行。ただしXXXXのところは、ユーザー名で置き換えること。 ーー 結果  部分氏名 Sheet1A2:B6 橋本 茂 名古屋市 山田 力 豊田市 近藤 健二 北九州市 北野 真二 奥州市 小林 雅夫 仙台市 ーー 両ブックのデータで氏名の表現の不一致や、誤って違ってしまっている氏名のものは知らないよ。 骨子はこんなものと思うが、実際にあわせてコードを修正できるのかな。

erara
質問者

お礼

短時間で完璧なご回答畏れ入ります。 明日からまたコピペの為に時間を取られるかと思うと 憂鬱でした。ありがとうございます。 VLookupそのものが使えるんですね。 氏名の部分を配列に入れて順に比較しなければならないかと 悪戦苦闘していました。 実際に処理するデータは手元にないので確認できませんが、 住所だけでなく複数種類のデータを追加して試してみましたところ 同様に動作させることが出来ましたので、 明日早速試したいと思います。 ご心配いただいた修正云々は得意です。 情けない話ですが、学生時代のC++の課題も不出来な為に 先達のコードを切り貼りして漸くにして切り抜けていた有様ですから… 最後に非常にシンプルかつ明快なコード、勉強になりました。

その他の回答 (2)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

内容が、日々、頻繁に変更されるものでなければ、 後者のファイルのシート全てを、前者のファイルの別シートに コピペしてから、Vlookup関数ではだめですか。 どちらかと言うと 同姓、同名の場合 お互いのデータの氏名で、苗字と名前の間に、全角空白、半角空白など 違いがあった場合 こちらの場合は、心配ですが。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

両方のファイルを開いているなら、VBAじゃなくともファイルをまたいでVLOOK関数を使えますよ。

erara
質問者

補足

ご回答ありがとうございます。 ただ、後者のファイルについてはデータを入力するだけで 関数等を入れるわけにはいかないんです。 別シートに同じ形の表を作ってVLOOK関数を使い、 そこから値だけコピーするを繰り返している状態です。

関連するQ&A

  • データを集めるのにExcel以外の手段

    Excelのブックを複数人に分けて、それぞれ会社のメンバ内で仕事をしてもらっています。 基本的にブックのレイアウトが変わったりすることはありません。 各メンバが仕事で必要な様々なデータを入力し、終わったら私の所にメールで投げ返してきます。 私は各人に入力してもらったデータをまとめるわけですが、まとめるのはvlookupなどを使い問題なく行える作業です。 しかし、正直面倒です。 やりたいことは、ファイルは常に一つ。各人がそこにアクセスしてデータを書いて保存。 そういった事ができれば、Excelファイルをばらまいて、後でまとめるという作業がなくなります。 何か解決する方法はないでしょうか?お金はある程度使えますので、Excel以外で何か便利なツールがあれば、それを利用したいと思います。 よろしくお願いします。

  • Excelからテキストへのコピーペースト

    Excelのデータをメモ帳へコピーしたいです。 Excelのバージョンは2003です。 Excelのデータは名簿で横方向に名前や住所、電話番号等が打ち込まれています。 それをそのままコピペすると、 メモ帳側では空白が生まれてしまいます。 明らかに不自然ですし、最終的な納品形態では全てその空白を無くさなければいけません。 ただスペース的に2~3マス分ぐらい空いていても、1回バックスペースを押せば無くなりはしますが 1行に複数生じるのと 何百行とあるので、いちいち直すのは正直面倒くさいです。 セルの幅を縮めてみたら平気かなと思いましたが それでも、何マス分かの空白が生じてしまいます。 機能的に何かで対処可能ですか? (Excelは仕事で使う事も多いですが、関数等使いませんし、初歩的な事しか知りません)

  • エクセルで複数の書式データをまとめたい

     以前、同じ内容で質問をさせていただいたのですが、 詳細を載せて、また回答を頂ければと思い、投稿をさせていただきます。 現在、エクセルで複数のファイルがあります。 書式のデザイン等はみんな一緒なのですが、 中のデータはすべて違うので、よくある「統合」などとは 意味が違ってくるのですが、そのデータを 一つにまとめて活用したいのです。 一つにまとめるのはもちろんエクセルファイルでまとめる事が できれば問題ありません。 データのイメージは次のような感じです。  各ファイルには同じデザインの書式が入っており、 各人の食事の合計数を載せています。  社員番号、氏名、各日付の食事数、食事数合計といった感じになってます。 その中から「社員番号」「氏名」「食事合計数」のみを抜き出して 別のファイルにその項目を一つにまとめて それをデータとして別のソフトに取り込みをする形ができればと思っております。 書式の形は全く同じのため、各項目のセルの場所は同じとなります。 しかし、項目に入っているデータの数は違うため、空白になっている箇所も あります。 空白は後で削除すればいいと思うので、データが一つにまとめる事が できればと思います。よろしくお願いいたします。

  • エクセルで入力したデータについて質問です。

    エクセルで入力したデータについて質問です。 職場の同僚がエクセルで入力したデータが無くなったと相談してきました。 人名、年齢、日付などの簡単なもので、毎月、前月分をコピーをして 月別にファイルを起こし、必要な情報を追加して保存していました。 (シートではなく、別ファイルで名前を付けて保存) 今日、5月分を作成するために4月を開くと、 データが無くなっていたと言うんです。 枠は残っており、数値や名前の中身だけ無い。 前回、何かを間違った操作で保存したのかと思い、3月分を開いてみるも同様に無し。 それ以前の数ヶ月分のファイルを全て開きましたが、 やはり全て中身だけ消えているとのことでした。 いつも、前月分からコピーするため、数ヶ月まえのファイルは 最近はまったくいじってないというんです。 違う独立したエクセルファイルの複数のデータが 全て無くなってしまうという操作はあるのでしょうか? 私個人は「誰かの悪意ある操作」があったのでは?と考えているのですが。。。 エクセルに詳しい人がいません。(皆、入力できる程度で応用が利きません) どうぞ、よろしくお願いいたします。

  • エクセルVBAでコピーペーストのやり方を教えてください。

    エクセルの他のブックの中に複数のシートがあり、そこから任意の複数のシートの任意の範囲をコピーペーストするやり方を教えてください。できればマクロに記録したいです。 例えば、あいう.xlsというファイルにデータが入っていて、シートは、 sheet1~sheet20まであるとします。 そこから今回はsheet2のC20~E500とsheet4のC20~E500までを、かきく.xlsというファイルのsheet1にコピペしたい。 かきく.xlsのsheet1のA1~C500にあいう.xlsのsheet2のC20~E500を貼りつけ、A501~C980にあいう.xlsのsheet4のC20~E500を貼りつけるというようにしたいです。 毎回列と行の範囲はどこのシートでもC20~E500で決まっているのですが、毎回sheet2とsheet4の範囲をコピペするわけではありません。 次回はsheet1~sheet19までの範囲かもしれません。 シートを選べ、1つのシートにまとめてコピペをしてくれるようなマクロを知りたいです。 エクセルは2003もしくは2007を使っています。 よろしくお願い致します。

  • エクセルのデータを交互に1つの縦軸に貼り付ける方法ってありますか?

    数人で作ったエクセルの膨大なデータを一つにしたいと思ってるのですが、そのデータが、Aさんのデータは、A1-数字 A2-空白 A3-数字 のように、空白と数字が交互になっていて、Bさんのデータはその逆で、A1-空白 A2-数字 A3-空白 というふうになっています。そんな風に交互になってるデータを1つの縦軸に一緒にしたいのですが、そのまま範囲指定してコピペすると空白部分もコピペされてしまい、他のデータが消されてしまいます。ALTで個別に指定しても、今度は空白分のセルが詰まってしまい、同じように他のデータが消されてしまします。これをどうにかして、他のデータも残しながら簡単にコピペする方法はありませんか?うまく説明できたどうか不安ですが、ご理解された方でやり方がわかる方がいましたら、ご回答よろしくお願いします。

  • コピーも禁止できますか?(エクセル)

    記憶があいまいなのですが、自作したエクセルファイルで保護の方法があやふやなまま操作したときに、範囲指定や入力されているデータのコピーもできなくなったことがあります。(こういうことはあるんでしょうか) もしこのやり方が存在するなら、方法を教えてください。データを上書きされないようにする方法はわかったのですが、仕事上でデータそのものをコピペで新しいファイルを作られたことがあり、とても困っています。使っているのはexcel2000/2002/2003(?)です。お願いします。

  • Excel データをまとめる

    すみません。お世話になります。 エクセルでテスト結果の点数入力シートを作成、その後、複数の人間がそれぞれ別々のパソコンからテスト結果を入力し、全て入力し終わった時点で一人の人間がコピぺをして一つのファイルにまとめています。しかしそれだと時間がかかります。 エクセルの機能で便利にまとめることはできないでしょうか? 毎回毎回、同じ作業をすることになるので少しでも早く便利に作業をすませたいと思っています。 よろしくお願いします。

  • エクセルの隠しデータってある?

    エクセルの表をコピペして、別のエクセルに貼付けました。 そしたら元データにない部分が貼付け後の新しいファイルに出て来ました。 隠しデータなんでしょうか?

  • エクセルでデータが入っているか判別したい

    エクセルでデータが入っているか判別したい こんにちは 予期せぬ事態に困惑しています。 エクセルで大量(3000項目程度)のデータを、B1~B3000のセルに入れました。(これは、別のファイルから読み込ませたものです。) ちなみにこのデータは虫食いで色々なところに空白があります。 その為B1~B3000のどこににデータが入っているかを確認するためA1に =if(len(A1),1,"") と入れ連続コピーでA3000まで引っ張りました。(最終的にはvlookupで並び替えようと考えています) しかし、2000を越えたあたりで空白でも関係なく全て1が入るようになってしまいました。 これはエクセルの限界を超えたってことでしょうか? もし限界でしたら解決策を教えていただけませんか? (自分はマクロはほとんど使えませんので、マクロ以外解決できないのでしたら具体的なソースを乗せていただけると幸いです) ちなみに使用しているのはエクセル2003です。 よろしくお願いします。

専門家に質問してみよう