- ベストアンサー
【Excel】複数あるシート上の住所録を重複なく別のシートへまとめる方法を調べています
はじめまして、こんにちは。 仕事でエクセルを使って困ってしまいました。 現在、社内の各部署が抱えている顧客住所録を、エクセルでシートごとにまとめているのですが(住所の入力フォーマットは共通です)、 これらをさらに別のシートへ重複なくまとめた「一覧表」を作成したいと思っています。 普段はコピー&ペーストでしのげるのですが、各部署の住所録は各人が随時アップデートされるため、その都度コピペをしていると手間となってしまいます。 そこで部署の住所録シートに入力があれば、自動的に「一覧表」シートへの入力も済まされている状態にしたいと考えているのですが、現在まで試行錯誤している次第です。。 そこで下記の要件を満たすにはどのようにすればよいかご指南をお願いいたします。 ・各シートにある住所録を、さらに新しい別のシート「一覧表」へまとめたい ・「一覧表」へまとめられた住所録では、重複を省きたい。 ・各シートへ新規に入力した住所は、自動的に「一覧表」へも入力されるようにしたい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#01です。 「一覧表」シート3行目以降に。他のシートの3行目以降のデータをコピーして集約するマクロです。「一覧表」というシートを作成してから動かして下さい。 マクロは「ALT+F11」でVBE画面を表示し、左上のVBAプロジェクトエクスプローラの「該当シート名右クリック」→「挿入」→「標準モジュール」を選択して開いた画面に貼り付けて下さい。 実行はシート画面に戻り、「ALT+F8」でマクロ一覧を開き、「マクロ名を選択」→「実行」ボタンです。マクロの実行結果はUNDOで戻せないので、予めSAVEしておいて下さい。 Sub Macro() Dim ws As Worksheet Dim LastR, LastR2 As Long Application.ScreenUpdating = False With Worksheets("一覧表") .Activate LastR = .Range("A65536").End(xlUp).Row If LastR > 2 Then .Range("A3:G" & LastR).ClearContents End If .Range("A3").Select For Each ws In Worksheets If ws.Name <> "一覧表" Then LastR2 = ws.Range("A65536").End(xlUp).Row ws.Range("A3:G" & LastR2).Copy ActiveSheet.Paste .Range("A65536").End(xlUp).Offset(1, 0).Select End If Next ws End With Application.CutCopyMode = False Application.ScreenUpdating = True End Sub もしブックを開いたときに自動で実行されることを希望されるなら、先頭の一行を以下に置換した上で Private Sub Workbook_Open() VBE画面で「ThisWorkBook右クリック」→「コードの表示」で開く画面に貼り付けると、ブックが開くたびに実行されます。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
(1)こんなのお金を出して、プロにやってもらうしごとですよ。 システムの経験者やアクセスでもできる人ならば、自分でやるでしょうが。「>マクロを組んだことがなく」のレベルなら、勉強する時間の、月給の方が高くつくかもしれない。 良い市販やフリーのソフトでも有ればよいですが。 自作の場合、引継ぎと、エラーが出て、業務に障害があったときの責任をかぶることを良く考えておくこと。 (2)それにデータを統合する(しないといけない)キッカケは、どういうときですか。瞬時にできている仕組みは難しいと思うので。 誰かが、自分の住所録をいじくったとき、即座にであれば、苦しい。 定期的(例月1回)にとか、必要の都度(例 年賀状を出す歳末) なら、VBAとかで組めるかもしれないが(オフライン・バッチ処理といいます)。 それに住所録作成者は何人ぐらいですか。 (3)どうしてもやるなら、マクロの記録をどう改変したらよいか 勉強する。 例えば (1)別ブックの例えば5シートを1つにまとめるVBA。 (2)氏名やIDでソートのVBA。 (3)重複分をすて、重複しない行を書き出すVBA (2)はマクロの記録どおり。 (3)は色々ロジックがあるが、(2)をやれば、全行に亘って、直前行と例えば氏名について、同じかチェックすればよいのでコードは少数で済むと思う。 ーー 本当はデータベース(住所録)を統一する(1つのものをつくり、全員で利用)方向で考えないとダメなんですが、これはシステム担当者の仕事でしょう。 ーー 当面は http://pc.nikkeibp.co.jp/article/NPC/20060214/229243/ の手作業ですね。 マクロの記録を弄くって、少しでも楽をすることを考えるとか。
お礼
imogasiさん、こんばんは。 案件のレベルをきちんと把握せずに質問してしまったようで失礼しました。 またそれにもかかわらず、本件について考えるべき点をご提示下さいまして大変感謝しております。 zap35さんの回答を元に、imogasiさんの考慮点を参考にさせていただきました^^ いいものができたかどうかは分かりませんが、マクロに取り組むきっかけができたことが今回一番の収穫だったと思っています。 どうもありがとうございました!
- zap35
- ベストアンサー率44% (1383/3079)
各シートの住所録を1枚のシートに集約して、オートフィルタオプションもしくは関数式の組合せで重複を省くのが良いのではないでしょうか。 各シートの住所録を1枚のシートに集約するのはマクロを利用するのが良いと思いますがご質問内容からではマクロは組めません。もう少し詳細なシート構成を提示してみたらいかがでしょうか。 重複を省く方法は過去の質問にたくさんの例がありますので「重複 省く」で検索すれば事例は見つかると思います。
お礼
zap35さん、ご回答ありがとうございます。 早速検索してみまして、重複を省く例はおそらくこちら(↓)でいけそうであると判断しました。 http://pc.nikkeibp.co.jp/article/NPC/20060214/229243/ またご提案いただきましたように、詳細な構成を申し上げます。 お恥ずかしいことにマクロを組んだことがなく、必要事項に欠ける点がありましたら追記いたしますのでご指摘ください。 ・まずシート構成ですが、部署AからMまでの13つのシートがあります。 ・各シートは左の列から NO、相手社名、名前、肩書、相手部署、郵便番号、住所 となっています。 ・データは1行に1つの住所で、上から3行目より実データを入力しています。
お礼
zap35さん、こんばんは。 大変丁寧なご回答をいただけ助かりました。ありがとうございます! 先日は上に泣き通し、おかげさまでなんとか今日の提出とすることができました。 またお礼が遅れて大変失礼いたしました。 これをきっかけに、私ももっとマクロについて勉強をしてみようと思います(n88BASIC時代の人間ですから・・)。 今回は本当にどうもありがとうございました!