プロが教える店舗&オフィスのセキュリティ対策術

Excelを分割

A列には日付、A列以外には営業担当者や商品や金額などが入力された列があります。

営業担当者毎に、ファイルを分割するマクロをおしえてください。10人いれば、10ファイルできることになります。

営業担当者が入力されている列が資料により、異なるので、C列に営業担当者が入っている場合は、それをセルとかに入力して指定できる様にしたいです。

また、ファイルの出力先も指定できる様にしたいです。

よろしくお願いします。

質問者からの補足コメント

  • あらかじめ、営業担当者をが入っている列とファイルの出力先を指定するセルをつくります。

    それを元にマクロが実行できればと思います。

      補足日時:2017/01/22 17:43

A 回答 (4件)

No.2 mike_gさんの質問ですが、回答者側から言わせてもらうと非常に重要なことです。


何故なら、質問者のレベルに合わせて回答しないと何の役にも立たないからです。
今回は、マクロの知識があると云うことなので、その前提で回答させていただきました。
こんな感じです。

Sub sample()
Set ws = ActiveSheet
ce = Range("営業担当者セル").Value
fp = Range("出力先").Value
Set d = CreateObject("Scripting.Dictionary")
For i = 1 To Cells(Rows.Count, ce).End(xlUp).Row
Set d.Item(Cells(i, ce).Value) = Cells(i, ce)
Next i
For Each i In d.keys
ws.Copy
Columns(ce).ColumnDifferences(d.Item(i)).EntireRow.Delete
ActiveWorkbook.SaveAs Filename:=fp & "\" & i & ".xlsx"
ActiveWorkbook.Close
Next i
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2017/01/23 19:03

こんばんは!



>営業担当者毎に、ファイルを分割するマクロをおしえてください。
別ファイルではなく、別シートに抽出する方法にしてみました。
尚、各シート名は担当者名にするとします。

>営業担当者が入力されている列が資料により、異なるので・・・
元データは「Sheet1」にあり、1行目が項目行になっているとします。
どこの列に「担当者」の列があっても構いませんが、
項目名は「担当者」となっているという前提です。

標準モジュールにしてください。

Sub Sample1()
Dim i As Long, k As Long, sN As String
Dim c As Range, myRng As Range
Dim sS As Worksheet, wS As Worksheet, myFlg As Boolean

Worksheets.Add after:=Worksheets("Sheet1")
ActiveSheet.Name = "作業用"
Set sS = Worksheets("作業用")
With Worksheets("Sheet1")
Set myRng = .Range("A1").CurrentRegion
Set c = .Rows(1).Find(what:="担当者", LookIn:=xlValues, lookat:=xlWhole)
'↑「担当者」の部分は実際の項目名に!//
myRng.Columns(c.Column).AdvancedFilter Action:=xlFilterCopy, copytorange:=sS.Range("A1"), unique:=True
For i = 2 To sS.Cells(Rows.Count, "A").End(xlUp).Row
sN = sS.Cells(i, "A")
For k = 3 To Worksheets.Count
If Worksheets(k).Name = sN Then
myFlg = True
Exit For
End If
Next k
If myFlg = False Then
Worksheets.Add after:=Worksheets(Worksheets.Count)
ActiveSheet.Name = sN
End If
Set wS = Worksheets(sN)
wS.Cells.Clear
myRng.AutoFilter field:=c.Column, Criteria1:=sS.Cells(i, "A")
myRng.SpecialCells(xlCellTypeVisible).Copy wS.Range("A1")
wS.Move after:=Worksheets(i)
myFlg = False
Next i
.AutoFilterMode = False
Application.DisplayAlerts = False
sS.Delete
Application.DisplayAlerts = True
.Activate
End With
End Sub

こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2017/01/23 19:04

貴方自身はマクロの知識があるのですか?

    • good
    • 2
この回答へのお礼

少しだけです。
それを聞いてどうするんですか?

無理して、回答欄にいれるのはやめてくだい。

お礼日時:2017/01/22 21:24

営業担当者名は必ずしもC列にないようですが、どうやって他のデータと見分けるのでしょうか?

    • good
    • 0
この回答へのお礼

失礼しました。

例えば、マクロ実行前に、どこかのセルにCと入れる感じです。

お礼日時:2017/01/22 17:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!