ここから本文です

【vba】エクセルでオートフィルタ を使ってデータを抽出後に、そのデータをコピー...

nis********さん

2019/5/1718:49:53

【vba】エクセルでオートフィルタ を使ってデータを抽出後に、そのデータをコピーして新しいブックに名前をつけて保存したいです。

具体的には
「全グループ社員のリスト」があります。(1

万件くらいありますが、変動します)

b列に会社名(a社、b社 等20社くらい)が書かれていて
これを会社ごとにフィルタをかけ、

そのデータを指定のフォルダに
新しいブックに名前をつけてに保存したいです。(会社別にブックを分けたいです)

また、書式についても元データである「全グループ社員リスト」の書式をそのまま使いたいです。

マクロ初心者で、マクロの記録やネット検索しましたが、
うまくいかずとても困っており、
どなたか助けていただけないでしょうか。

よろしくお願いいたします。

閲覧数:
52
回答数:
2

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

hot********さん

2019/5/1809:01:24

「全グループ社員のリスト」はブック名ですかシート名ですか?
VBAは対象ブックに置くのでしょうか、VBA用のブックから対象ブックを開くのでしょうか?
VBA用のブックから対象ブックを開く場合は、対象ブックの名前やフォルダは決まってるのでしょうか?
具体的に書いてください。

ちなみにVBA用のブックから対象ブックを選んで、対象ブックのフォルダにB列の値のブック名で保存する場合です。
シート名を"Sheet1"で指定してますが、シート名が"全グループ社員リスト"またはその他の場合はs="Sheet1"の部分を変えてください。
また、元データの書式を出来るだけ引き継いでいますが、不足があったら教えてください。

Sub sample()
Dim s As String
s = "Sheet1" '対象シート名
's = "全グループ社員のリスト" '「全グループ社員のリスト」がシート名の場合)
Dim file As String
Dim wb As Workbook
Dim ws As Worksheet
Dim d As Variant
Dim i As Integer
'
file = Application.GetOpenFilename("Excel ブック,*.xls?")
If file = "False" Then Exit Sub
Set wb = Workbooks.Open(file)
Set ws = wb.Sheets(s)
wb.Sheets.Add Before:=Sheets(1)
ws.Range("B:B").Copy Sheets(1).Range("A1")
Sheets(1).Range("A:A").RemoveDuplicates Columns:=1, Header:=xlYes
d = Sheets(1).Range("A1:A" & Sheets(1).Range("A" & Rows.Count).End(xlUp).Row)
Stop
For i = 2 To UBound(d)
ws.Range("B:B").AutoFilter Field:=1, Criteria1:=d(i, 1)
ws.Copy
ws.Cells.Copy
ActiveSheet.Range("A1").Select
ActiveSheet.Paste
ActiveSheet.AutoFilterMode = False
ActiveSheet.Range("A1").Select
ActiveWorkbook.SaveAs d(i, 1)
ActiveWorkbook.Close False
Next
wb.Close False
End Sub

  • 質問者

    nis********さん

    2019/5/1910:48:20

    大変助かりました。ありがとうございます。
    出力したかったものが、でてきたことを確認しました。
    重ねて質問で申し訳ありません。教えてください。

    Stopで止まってしまうので、これを省いてしまいましたが、
    後々問題になることはありますでしょうか。

    また、ws.Range("B:B").AutoFilter Field:=1, Criteria1:=d(i, 1)を
    AutoFilter Field:=1, の部分を
    AutoFilter Field:=2にしたら、B列がフィルタされたので、
    それでやってみましたが、合っていますでしょうか。。


    よろしくお願いいたします。

  • その他の返信(2件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

質問した人からのコメント

2019/5/21 14:20:00

ありがとうございます。
大変勉強になりました。
ベストアンサーとさせていただきます。

ベストアンサー以外の回答

1〜1件/1件中

プロフィール画像

カテゴリマスター

aka********さん

2019/5/1808:00:09

ネットで検索しないで 自分で マクロの記録で 1社作成してみれば
コードは 書いてくれますよ。
あとは 其の社名の値を 変数に変え
その変数に 順次 社名を 割り振るような マクロに 変える
これで やってみませんか

ただ 私としては 別ブックにすることは 反対です。
別シートにするだけで 十分と思います。

別シートにするだけなら 関数で 十分できます。
そうしておけば 元データーのデーターが 変更追加があれば 会社別データーも自動で変わります。
別ブックにしたのでは 1データーが変わっても 全部のファイルを作成しなおす必要があります。無駄な事だと思います。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる