• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:マクロについて)

エクセルのマクロで営業所ごとにデータをまとめる方法

このQ&Aのポイント
  • エクセルのマクロを使用して、営業所ごとにデータをまとめる方法について教えてください。
  • A列に入っているデータを営業所ごとに抽出し、雛形シートにコピーしてシート名を営業所名にしたいです。
  • 手作業で行っている処理を自動化するために、マクロを使いたいです。具体的な手順を教えてください。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.3

データの入っているSheet1と、ひな形にする雛形シートを用意します 手順: ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける sub macro1()  dim r as long  on error goto errhandle ’コピーする  for r = 2 to worksheets("Sheet1").range("A65536").end(xlup).row  worksheets("Sheet1").cells(r, "A").resize(1, 3).copy _  worksheets(worksheets("Sheet1").cells(r, "A").value).range("A65536").end(xlup).offset(1)  next  exit sub errhandle: ’シートを用意する  worksheets("雛形").copy after:=worksheets(worksheets.count)  activesheet.name = worksheets("Sheet1").cells(r, "A").value  resume end sub ファイルメニューから終了してエクセルに戻る ALT+F8で実行する。

mina1124
質問者

お礼

keithin様 今帰宅してきましたので、明日実行してみたいと思います。 遅い時間にご回答ありがとうございます。 助かりますm(__)m

その他の回答 (3)

回答No.4

'各シートの先頭は見出し 'レコードは1行以上必要 Sub JournalizeSheet() Dim kk As Long Dim MaxRow As Long Dim strSheet As String Dim OldSheet As Worksheet Dim NewSheet As Worksheet Dim xNewSheet As Boolean Application.ScreenUpdating = False Application.DisplayAlerts = False Worksheets("sheet1").Activate MaxRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row For kk = 2 To MaxRow strSheet = Worksheets("sheet1").Range("A" & kk) If (strSheet = "") Then Exit For Set OldSheet = ActiveSheet xNewSheet = True For Each OldSheet In Worksheets If OldSheet.Name = strSheet Then xNewSheet = False End If Next If (xNewSheet) Then Worksheets.Add after:=Worksheets(Worksheets.Count) ' On Error Resume Next ActiveSheet.Name = strSheet Set NewSheet = ActiveSheet Worksheets("sheet1").Rows(1).Copy NewSheet.Range("A1").PasteSpecial Else Set NewSheet = Worksheets(strSheet) End If ' OldSheet.Activate Worksheets("sheet1").Rows(kk).Copy NewSheet.Cells(Rows.Count, 1).End(xlUp).Offset(1).PasteSpecial Next kk Epilogue: Worksheets("Sheet1").Select Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub

mina1124
質問者

お礼

JazzCorp様 ご回答ありがとうございます やり方がこんなに沢山あるとは思わず 凄くびっくりしました。本当にありがとうございます!!

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

あ、すいません。補足です。 1行目に「項目列」が存在すると仮定したコードです。 ご注意くださいませ。

mina1124
質問者

お礼

tsubuyuki 様 早速の回答ありがとうございます!! マクロ初心者なもので、ちんぷんかんぷんです。 ActiveSheet.Name = strSheetの所でエラーになってしまうのですが どうしたら良いのでしょうか。。 ちなみに、雛形シートと言うのをコピーしてA7にデータを貼り付けたいのですが お助けいただけますと助かります。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

少々くどいコードになってしまいましたが、一例として。 Sub test() Dim i As Integer Dim MaxRow As Integer, TagRow As Integer Dim strSheet As String, ExSheet As Worksheet Dim ConSheet As Integer Dim OldSheet As Worksheet, NewSheet As Worksheet  MaxRow = Range("A1").End(xlDown).Row   For i = 2 To MaxRow    ConSheet = 0    strSheet = Range("A" & i)    Set OldSheet = ActiveSheet    For Each ExSheet In Worksheets     If ExSheet.Name = strSheet Then      ConSheet = ConSheet + 1     End If    Next    If ConSheet = 0 Then     Worksheets.Add after:=Worksheets(Worksheets.Count)     ActiveSheet.Name = strSheet     Set NewSheet = ActiveSheet     OldSheet.Rows(1).Copy     NewSheet.Range("A1").PasteSpecial    Else     Set NewSheet = Worksheets(strSheet)    End If    OldSheet.Rows(i).Copy    NewSheet.Range("A65535").End(xlUp).Offset(1).PasteSpecial    OldSheet.Activate   Next i End Sub 以上、参考までに。