• ベストアンサー

エクセルで一枚のシートに入力したものを自動分割するには?

エクセルで顧客名簿をつくっています。担当者は5名ほどで担当名もそのつど入力しております。日付順に毎日入力していますが月末に担当者ごとのシートを自動的に作成できるようなマクロはないでしょうか?

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

  • ベストアンサー
回答No.2

こんなのではどうでしょうか? 同じブック内の担当者名のシートに振り分けます。 前もって定数部(const)の4行を設定しておいてください。 尚、顧客名簿シートの1行目は、見出しだとしています。 Sub sample() Const masterSheet = "顧客名簿" '顧客名簿のシート名 Const errorSheet = "エラー" '担当者名が担当者名リストに無かった場合のエラー出力用シート名(前もってエラー出力用シートを作っておいてください) Const tantouColumn = 3 '顧客名簿のシート上での担当者名の列番号 A列なら1,B列なら2,C列なら3,... Const tantouName = "山田一郎,山田二郎,山田三郎,山田四郎,山田五郎" '担当者リスト(前もって担当者名のシートを作っておいてください) Dim sheetName() As String Dim sheet As Worksheet Dim i As Integer Dim s As String Dim r As Long '各シートの存在チェック 'ブック内のシートの名前を取得 s = "," For Each sheet In Worksheets s = s & sheet.Name & "," Next '必要なシート名を配列に取得 sheetName = Split(masterSheet & "," & tantouName & "," & errorSheet, ",") 'チェック For i = 0 To UBound(sheetName) If InStr(s, "," & sheetName(i) & ",") = 0 Then MsgBox sheetName(i) & " シートが無いか、名前が間違っています。" Exit Sub End If Next '各シートのクリア sheetName = Split(tantouName & "," & errorSheet, ",") For i = 0 To UBound(sheetName) 'クリア Sheets(sheetName(i)).Cells.Clear 'シート見出しコピー Sheets(masterSheet).Rows(1).Copy Destination:=Sheets(sheetName(i)).Cells(1, 1) Next 'データのコピー For r = 2 To Sheets(masterSheet).UsedRange.Rows.Count '担当者名の取得 If InStr("," & tantouName & ",", "," & Sheets(masterSheet).Cells(r, tantouColumn) & ",") = 0 Then '担当者名が担当者リストの中に無いのでエラーシート名 s = errorSheet Else '担当者名 s = Sheets(masterSheet).Cells(r, tantouColumn) End If '各シートへコピー Sheets(masterSheet).Rows(r).Copy Destination:=Sheets(s).Cells(Sheets(s).UsedRange.Rows.Count + 1, 1) Next End Sub

yuki0909
質問者

お礼

これ最高ですね。 ありがとうございました。

その他の回答 (1)

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

>マクロはないでしょうか (1)マクロはふつう「作る」もの (2)または他人が作って公表しているものを「使う」 (2)のようなものが市中に(WEB上になど)あるかということかな。 これだけだとたいした機能ではないので、公表もされていないのではと思う。 ーー 回答者に作ってくれませんか、ということなら当質問コーナーの規約違反です。 ーー 質問の内容が判らない。 入力担当者5名。 各担当者は別ブックに入力しているのか。 こういうやり方をしていれば、月末に全員統合した1ブックで1シートの表を作りたいという質問は出こそすれ、質問のように >担当者ごとのシートを自動的・・となぜなるのかな。 ーー 集約シートがあるなら マクロの記録状態にして 担当者+日付でソートし 担当者の区分(セル範囲ごとに)コピーし、別シートへ張り付けをして、マクロの記録をみたら。 担当者の範囲が毎回変わるが、それを(プログラムで)捉えるにはどうするかが判らなければ、それに特化して質問したら。 上記質問のままでは丸投げ。マクロの記録さえとって考えていないようだ。

関連するQ&A