• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのマクロについて(オートフィルタ&シート分け等))

エクセルのマクロでオートフィルタ&シート分け、担当者の列を削除する方法について教えてください

このQ&Aのポイント
  • エクセルのマクロを使用して、オートフィルタをかけて各担当者にデータを分ける方法や、各担当者のシートを自動で作成する方法について教えてください。
  • また、分けた後、担当者の列を削除する方法もわかれば教えてください。
  • マクロ初心者なので、詳しい手順や具体的な操作方法を教えていただけると助かります。

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

  • ベストアンサー
  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.2

以下を、VBAの標準モジュールに貼り付けて実行してみてください。 「管轄」がA列、「担当者」がB列、「店名」がC列、「販売数」がD列に入っているものとします。元のデータが入っているシート名を「元データ」としています。 '---ここから--- Sub 担当別シート作成() Application.ScreenUpdating = False For i# = 2 To Worksheets("元データ").Cells(2, 2).End(xlDown).Row j# = 1 '検索中の人のシートが既にできているかを判断する。 For Each sheet_name In Worksheets If sheet_name.Name = Worksheets("元データ").Cells(i, 2).Value Then j = 2 Exit For End If Next '検索中の人のシートがない場合、新規に作成する。 If j = 1 Then Worksheets.Add After:=Worksheets(Worksheets.Count) Worksheets(Worksheets.Count).Name = Worksheets("元データ").Cells(i, 2).Value For j = 1 To 4 Worksheets(Worksheets.Count).Cells(1, j).Value = Worksheets("元データ").Cells(1, j).Value Next j End If 'データのコピー For j = 4 To 1 Step -1 Worksheets(Worksheets("元データ").Cells(i, 2).Value). _ Cells(Worksheets(Worksheets("元データ").Cells(i, 2).Value). _ Cells(65535, 1).End(xlUp).Row + 1, j).Value = Worksheets("元データ").Cells(i, j).Value Next j Next i 'それぞれのシートの列幅を最適化します。 For Each sheet_name In Worksheets sheet_name.Columns("A:D").AutoFit Next '元データのB列(担当者)を消します。 Worksheets("元データ").Columns("B:B").Delete Application.ScreenUpdating = True End Sub '---ここまで--- 「標準モジュールに貼り付ける」方法がわからないときは、以下の方法でお試しを。 1) ツール-マクロ-マクロの記録 で出てきたウィンドウの、「マクロ名(M)」と書かれた欄に、「担当別シート作成」と書き込んで、「OK」をクリックしてください。 2) 何も操作せずに、マクロの記録を終了してください。 3) AltキーとF8キーを同時に押して「マクロ」ウィンドウを開きます。 4) 「担当別シート作成」を選択し、右の「編集(E)」ボタンをクリックしてください。 5) 「Microsoft Visual Basic」というウィンドウが新たに立ち上がり、  Sub 担当別シート作成()   '   ' 担当別シート作成 Macro   ' マクロ記録日 : 2005/2/15 ユーザー名 : ○○ ○○   '   '  End Sub と表示されているはずです。 6)このSub 担当別シート作成()と書かれている行と、End Subと書かれている行の間に、上のソースをコピーして貼り付けます。 7) Microsoft Visual Basicウィンドウを閉じます。 8) 後はマクロを実行するのみ。 ただし上のマクロは「担当者」列を消去する上に、「元に戻す」コマンドで復活しないので、必ずバックアップを取ってから行ってください。

miechin
質問者

お礼

お礼が遅くなりましたが、とても丁寧にお教え下さってありがとうございました。 実際にやってみました。No.4のお答えの自動記録の方は日頃使っているので大丈夫なのですが、実際VBAを一から作るとなると難しくわかりません。大変助かりました。 申し訳ないのですが、再度新しい質問が発生しましたので、よろしければまたご回答よろしくお願いします。

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

その他の回答 (3)

  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.4

#2のmatsu_junです。 #3に対して回答いたしますが、質問者のmiechin様にもお役に立つことができたら幸いです。 #2の下の部分と合わせてお読みください。 Excelのマクロとは、Excelの操作手順を憶えさせ、次回から同じ手順の操作を自動的に実行する機能だということはご存知でしょうか? ということは、Excelのメニューの中にマクロの記録、すなわち操作手順を憶えさせる動作を開始するコマンドと、マクロの再生、すなわち記憶した動作を再生させるコマンドがあるはずですよね。 前者の「マクロの記憶」はExcelのメニュー(画面上段左から、ファイル(F) 、編集(E)、表示(V)・・・と書かれている部分です)から、「ツール(T)-マクロ(M)-新しいマクロの記録(R)」で呼び出すことができ、後者の「マクロの再生」は同じくExcelのメニューから、「ツール(T)-マクロ(M)-マクロ(M)」で呼び出すことができるわけです。(後者は「Alt」キーを押しながら「F8」キーを押してもOKです) ちなみにExcel2003などでは使っていないメニューが隠れてしまっているので、メニューを開いた時の一番下の矢印をクリックしてくださいね。 さて、ツール(T)-マクロ(M)-新しいマクロの記録(R) を選んだら、「マクロの記録」という名前の小さなウィンドウが表示されませんでしょうか?そこで最初の設定をして、「OK」をクリックすると記録が始まります。つまり、その後の操作をExcelがどんどん憶えていくわけです。 マクロは何種類でも記憶できますので、ここで、後から分かりやすいようにマクロ名(M)を設定するわけです。マクロ名は、何もしない状態では「Macro1」となっています。別にこのままで問題があるわけではないのですが、後から判別できるように名前をつけます。そのほかの設定項目は今のところ何かを知る必要はありません。ここを設定・変更すると後から別のことで困ることが発生することがありますので、ある程度慣れた人向けのものです。 で、「OK」をクリックすると、いよいよマクロの記録が始まります。と同時に、■と何か表っぽいアイコンの2つのボタンだけがある小さなウィンドウが画面上に表示されますね。このうち左側の■がが記録の終了をさせるときのボタンになります。これをクリックするまでの作業が記録されます。 試しに記録を開始した状態で今開いているシートのセルA1に「3」という数字を入力してみて、マクロを終了しましょう。セルA3に合わせてマウスをクリックし、3を入力、Enterキーを押したら、上で説明した■ボタンをクリックしてください。 これで、「今開いているシートのセルA1に3を入力する」マクロの完成です。 一度A1のセルの中身を消去して、メニューの「ツール(T)-マクロ(M)-マクロ(M)」を選択して表示される「マクロ」というウインドウから、先ほど作ったマクロを選択して、右側の「実行(R)」ボタンをクリックしてみてください。自動的にA3のセルに3が入力されましたか? できましたら先に進みましょう。 「今開いているシートのセルA3を選択し、そこに3という数字を入力する」という操作を、人間(とはいっても英語を理解する人)とパソコンが共に理解できるように記述したのがVBAなのです。試しに上で登録したものがVBAではどのように表現されているのかを見てみましょう。 Excelのメニューから「ツール(T)-マクロ(M)-マクロ(M)」を選択し、「マクロ」ウィンドウを表示させます。先ほど作ったマクロ(Macro1)を選択して、今度は右側の「編集(E)」をクリックしてください。すると、画面右側の白い部分に以下のように表示されませんか? Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2005/2/20 ユーザー名 : ○○○ ' ' Range("A1").Select ActiveCell.FormulaR1C1 = "3" Range("A2").Select End Sub ○○○の部分には貴方の名前が入っていると思います。これについて1行ずつ内容の説明をしていきます。 1行目の「Sub Macro1()」というのは、ここからMacro1という名前のマクロの動作説明を行いますよという宣言行と考えます。行頭の「Sub」や、行末の「()」というのは、VBAをより深く勉強する中で自然と意味の理解できるものですが、今のところはお約束でつくものだと考えてください。 2行目以下、しばらく「'」で始まります。これをコメントと呼び、「この行についてここから後ろはコンピュータは理解する必要はありませんよ」という記号です。だから、人間が後から参照した時、何のことについて書いたかとか、いつこれを記録したとか、そういう覚え書きみたいなことを記述するためのものです。実際4行目には、何年何月何日に誰が記録したという、マクロを再生する上でどうでもいい記述がなされていますよね。 8行目「Range("A1").Select」には、「セルA1を選択(select)する」と書かれています。例えばA列全体を選択していればこの行には「Range("A:A").Select」と書かれますし、セルA1からE5までをドラッグしていた場合は「Range("A1:E5").Select」と記載されます。Rangeを「範囲」と翻訳すれば、Rangeと書く意味が分かると思います。 9行目「ActiveCell.FomulaR1C1 = "3"」とは、要するに現在入力をしようとしているセルに、「3」と入力する。と書かれてあります。ActiveCell「活性化されたセル」、要するに上の行で選択したセルである「A1」を指していますね。「FomulaR1C1」はさっきからA1、A1と言っているのが、R1C1形式で表示した時のセル名を示しているのだよという、ぶっちゃけおせっかいな説明です。R1C1形式って、あの、よく表の上のA列、B列というのが数字になって困ってしまったという話をよく聞きますよね。列名を数字でなくてアルファベットで表示した通常の形式をR1C1形式といいます。 10行目「Range("A2").Select」は、「セルA2を選択する」という意味ですね。これは、マクロを記録した時にEnterキーを押して、結果的にA2を選択していることから表記されています。 11行目「End Sub」というのは、「ここまでがMacro1の操作内容です」という意味です。拝啓に対する敬具のような存在です。 試しに8行目を Range("A5").Select と書き換えて保存してください。Excelに戻って「ツール(T)-マクロ(M)-マクロ(M)」でMacro1を選択して「実行(R)」ボタンをクリックしてください。セルA5が3になりましたか?そして、セルA2が選択された状態になっていませんか? これで解説は終了です。#2の下半分の説明を元に、'---ここから--- という行から '---ここまで--- という行までを貼り付けて実行してみてください。あえて言えば「Sub 担当別シート作成()」の下の「Application.ScreenUpdating = False」から、「End Sub」の上の「Application.ScreenUpdating = True」までをコピーしてやればよいことになります。では今後の学習にお役立てください。

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

miechinさん matsu_jun さん 誠に申し訳ございません。実は私も同じ質問をしたいところでした。でも、VBAの標準モジュールの貼り付け方がわかりません(^_^;)大変お手数ですが、もう少しわかりやすくご教示いただけないでしょうか? ちなみにEXCELは使えますが、マクロは苦手です。よろしくお願いします。

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

はじめまして。 読解能力がないのか、イマイチやりたいことがよくわかりません。ごちゃ混ぜになっているデータを担当者ごとに別シートにしたいってことですかね? 以下のような感じ。 --------------------------------------- [元データ] 管轄 担当者 店名 販売数 東京 佐藤  ●●店 100 東京 佐藤  ××店 120 東京 佐藤  △●店  50 大阪 山本  ▲△店  83 大阪 山本  △▲店  15 大阪 山本  ●△店  30 福岡 川田  ◎×店  68 福岡 川田  □×店  24 --------------------------------------- sheet1 [佐藤さん担当分] 管轄 担当者 店名 販売数 東京 佐藤  ●●店 100 東京 佐藤  ××店 120 東京 佐藤  △●店  50 --------------------------------------- sheet2 [山本さん担当分] 管轄 担当者 店名 販売数 大阪 山本  ▲△店  83 大阪 山本  △▲店  15 大阪 山本  ●△店  30 --------------------------------------- >担当者の列を削除したいのですが 整理完了後、ごちゃ混ぜデータは1件も なくなるってことですかね?? もう少し、情報をいただけるとうれしいです。

miechin
質問者

お礼

すいません表現がうまくできず・・・ ご回答ありがとうございます。 sheet1、sheet2・・・・のイメージはその通りです。 >担当者の列を削除したいのですが このことは、追加されるシートの担当者の列を削除したく、ごちゃ混ぜのデータはそのままでも結構です。 ついでに、sheet1、sheet2と追加されるシートのシート名を担当者名に変更したいです。 よろしくお願いします。

miechin
質問者

補足

補足をお礼のところに記入してしまいました。 sheet1、sheet2・・・・のイメージはその通りです。 >担当者の列を削除したいのですが このことは、追加されるシートの担当者の列を削除したく、ごちゃ混ぜのデータはそのままでも結構です。 ついでに、sheet1、sheet2と追加されるシートのシート名を担当者名に変更したいです。 よろしくお願いします。

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

関連するQ&A

  • Excel マクロのオートフィルターについて

    オートフィルターのコピーについて 下記の表で、「種類:空白」と「進捗:良」でオートフィルターで 絞ります。 ※リンゴとバナナが空白です。 <出荷シート> 製品名 種類 担当者 進捗 金額 リンゴ A 良 300 みかん 国産 B 良 100 なし 外国産 B 悪 150 バナナ C 良 80 絞った内容のみ、となりの「果物シート」のA2に貼り付ける場合に どのようなマクロになりますか。 また、7行目以降に行が追加されても対応できるマクロを考えています。 アドバイスお願いいたします。

  • エクセルVBAについて(オートフィルタ&シート名変更&コピー&貼り付け)

    sheet1にデータがあります。sheet2にフォーマットがあります。 sheet1は、 A1:店名 B1:種別 C1:管轄 D1:9時 E1:10時 F1:11時・・・R1:23時 ●●店 新規  東京  0 5 3・・・2 ●●店 解約  東京  1 2 1・・・0 ▲▲店 新規  大阪  0 1 1・・・2 ▲▲店 解約  大阪  0 1 3・・・1 ◆◆店 新規  福岡  1 3 0・・・2 ◆◆店 解約  福岡  0 1 1・・・0 ↓ずらっと各店舗毎のデータが並んでいます。 sheet2は、フォーマットになっているので、 まず、sheet2のフォーマットのシートをコピーし、 sheet1のデータをフィルタで検索し、そのセルD1:R1の項目データをコピーし、 sheet2の決まった場所(セルD33:R34)へ値貼り付け、シート名を店名に変更し、ファイル名は管轄名で保存する。 これを自動で全データ分ファイル分けしたいです。数が多くて一つ一つしていくと時間がかかりとても時間がかかりすぎます。 データから店舗名分シートを増やしていき、各データを値貼り付け、最終的には管轄でまとめて保存したいのです。 自動記録までわかるのですが、一つの自動記録を繰り返すことが、初心者でしてわかりません。VBAを使って訂正することが難しいので、どうぞよろしくお願い致します。

  • エクセルでのオートフィルタに関して(マクロ)

    1行目にタイトルがある表がありましてその表に オートフィルタを掛けて条件を複数指定して検索・・・ここまで手作業。 その後マクロでヒットした行をコピーして別のシートにコピーしたり、ということを行っています。 もともとの表のデータ数は日々増減していて ほしい行の行数も毎回変わってきます。 検索した行をコピーするために選択すると Rows("2809:2809").Select こんな具合に 行番号で指定されるのでデータ数が増減すると うまくいきません。 検索条件を指定して検索した行を うまくマクロで指定することは出来るのでしょうか? 良い方法がありましたら御教授願います。 もう一点ですが 自動記録でオートフィルタの画面を開いたままでは「記録終了」できないですよね? マクロでフィルタ画面を開いて 検索条件を指定するところから手作業でするのは可能でしょうか? あわせてよろしくお願いします。

  • EXCELのオートフィルターマクロについて

    初歩的な質問で恐縮です。 sheet1にデータ一覧を作成(仮にシート名を「データシート」とします)し、 sheet2へ検索条件を入力するセルとコマンドボタンを配置し、sheet1のデータを「オートフィルタで検索」するマクロを作成しました。 マクロの検証も行い動作の確認も行いマクロの実行してみると、ちゃんとフィルタ処理されており全て完璧!となりました。 ところが、他人への配布も予定していたので、データの改ざんを防止するため、データシートをシート保護して実行したところ、「ロックされているため実行できません」旨のエラーになってしまいました。 やはり、シートの保護を行なってしまうと、マクロであってもオートフィルタ機能は使用できないのでしょうか? 何か解決(保護状態でもオートフィルタ機能が使用可能)方法はありませんでしょうか? ご教授お願いいたします。

  • 《エクセル》 オートフィルタで指定した行だけ指定するマクロ

    いつもお世話になります。 「オートフィルタで条件を指定して行を抽出し、その行のデータを削除する」 というマクロを作成したいのですが、うまく行きません。 そのようなマクロの式か、もしくはオートフィルタを使う以外で、同じ機能を果たせるマクロがあれば、教えていただけますでしょうか。

  • Excel2003でシート保護(オートフィルタ使用にはチェック)するとマクロのオートフィルタでエラーになる

    QNo.3901563で回答いただき、Excelの試用で保護後のオートフィルタは使えないのはわかりました。 そこで予めオートフィルタを設定し、シートに保護をかけました。 Excelの画面上ではオートフィルタは使用できます。 マクロよりオートフィルタの抽出条件を変更するコマンドを実行すると「保護されたシートに対して、このコマンドは実行できません」と表示されます。コマンドは新しいマクロの記録で操作を記録したものです。記録したときは特にエラーはでませんでした。 Selection.AutoFilter Field:=2, Criteria1:="AAA" マクロのコマンドでは保護のかかったシートのオートフィルタの抽出条件を変更することは出来ないのでしょうか。 マクロの前後にシート保護を解除するコマンドを入れようかとも思ったのですが、保護にパスワードがかかっており、本末転倒となるもので。

  • エクセル2000のオートフィルター

    エクセル2000のオートフィルターについてです。 そんなに詳しくないですが。。。 表を作成して、顧客リストをつくりました。 シート1には全リストを打ち込んでいます。 オートフィルターと言う機能を知って、担当者別にシートを分けたいのです。(シート2担当:山田)(シート3:鈴木) それで、CSVで保存したいのですが。。。 挑戦しても、CSVに保存した瞬間、担当者別にしていたのに、リストが全て表示されてしまいます。 不可能なんですか?

  • エクセルのオートフィルタ

    同じ内容のシートがあって、両方オートフィルタをかけたのに、片方だけ5行分くらいしかフィルタがかからないのですがどうしたら直せますか? エクセルは2000です

  • エクセル オートフィルタについて

    オートフィルタのボタンの位置について質問です。 シートの1行目を見出しとし、range("A1")を選択。 そこでフィルタをかけると通常1行目にボタンが出現すると思いますが、 なぜか2行目にボタンが出現します。 全てのシートではなく、特定のシートのみに起こるようです。 原因がわからないため、こちらで質問させていただきました。 よろしくお願い致します。

  • オートフィルタ後の、マクロでの値の参照に関して

    オートフィルタ後の、マクロでの値の参照に関して 下記を悩んでいます。教えて頂ければ幸いです。 マクロで、あるデーター表から、オートフィルタを使用し、必要なデーターを 抽出し、マクロ内に戻し、その後の計算で使用したいと考えています。 A列、B列、C列にそれぞれ、検索条件を指定し、オートフィルタ後、下記のような状態になります。 参照したい値は、D列になります。 下記のような例では、2.5と2.7の値をマクロ内に戻したいです。 (例:オートフィルタ後) 1行  A▼  B▼  C▼  D 16行 **  **   **  2.5   20行 **  **   **  2.7 *2~15行目は見えなくなっています。 *17~19行目は見えなくなっています。 セルを参照し、マクロ内に戻すには、どのような構文(マクロ)の記述が必要でしょうか? 【備考】 ・上記の例では、セルはD16、D20となりますが、抽出条件によっては、行番号が変わってしまいます。 ・抽出後のD列のデーター数は、常に2つです。 よろしくお願いします。

専門家に質問してみよう