- ベストアンサー
VBAで営業成績をまとめる方法
- 事務関係で営業成績をまとめるためのVBAプログラムを作成していますが、いくつかの問題があります。
- エクセルファイルから「営業一覧」というシートの中から「新規獲得」というキーワードを含むデータを抽出し、別のファイルのSheet2にまとめたいと思っています。
- しかし、コピーする領域が大きすぎてエラーが発生してしまい、フィルタ結果がない場合にも対応できていません。また、複数の部署のデータを結合する際にもうまく件数がカウントされず、正確なデータが表示されません。対処方法を教えていただきたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です、補足読みました その通りです 一つ目は、抽出データがある場合と無い場合の分岐です その判断のために、最終行を求め判断しています 二つ目は 抽出されたデータ範囲 .Range("C2", .Cells(Rows.Count, 3).End(xlUp)).Select 可視セルの選択 Selection.SpecialCells(xlCellTypeVisible) 選択範囲のコピー Selection.Copy これをまとめたものです 三つ目は、んっ・・・? 二つ目の・・・.Copyの後、半角スペースに続けて入力したつもりだったのですが改行されてますね・・・すみません 二つ目と三つ目で一つの命令です。 .Range("C2", .Cells(Rows.Count, 3).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy main_workbok.Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Offset (1) の2行を .Range("C2", .Cells(Rows.Count, 3).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy _ main_workbok.Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Offset (1) へ置き換えてください 改めて、三つ目はコピー先シートのA列最終行の一つ下の行へ貼り付け この様にすることによって、確実に貼り付け場所の指定ができる うまく処理されなかったから補足されたのですね すみません、私のミスです ご迷惑掛けました
その他の回答 (1)
- hige_082
- ベストアンサー率50% (379/747)
まずは、添削から >Workbooks.Open folderspec & "¥" & file_list(i).ReadOnly これは、読取専用で開こうとしているのですか? だとすれば、間違いです >.AutoFilter Field = 2, Criterial = "新規獲得" ここで、エラーが出てると思うのですが 引数の構文が間違っています >Range(Selection, Selection.End(xlLastCell)).Select Endプロパティに定数xlLastCellは使用できません 構文など基本的なところをヘルプ等で理解を深めてはと思います '上記の訂正もしてあります Dim RWbook As Workbook For i = 0 To 5 Set RWbook = Workbooks.Open(Filename:=folderspec & "¥" & file_list(i), ReadOnly:=True) With RWbook.Worksheets("営業一覧") .Range("A1").AutoFilter Field:=2, Criteria1:="新規獲得" If .Cells(Rows.Count, 3).End(xlUp).Row <> 1 Then .Range("C2", .Cells(Rows.Count, 3).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy main_workbok.Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Offset (1) .Cells.AutoFilter End With RWbook.Close SaveChanges:=False Next i 質問の(1)(2)も解決していると思います 以上、参考まで
補足
早急な回答ありがとうございました。 VBAに詳しくないもので回答について再度ご質問よろしいでしょうか。 もしみられておりましたら、ご回答頂ければと思います。よろしくお願い致します。 >If .Cells(Rows.Count, 3).End(xlUp).Row <> 1 Then これはC列に入力されている最終セルを確認し、入力されていれば~、ということですよね。 >.Range("C2", .Cells(Rows.Count, 3).End(xlUp)).SpecialCells(xlCellTypeVisible).Copy これはC列に入力されているセル、更には見出し等以外の可視セルをコピーする、ということですよね。 >main_workbok.Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Offset (1) これはちょと自信がないのですが、 シート2の入力されている最終セルを確認し、その一つ下の行に貼り付けをする、ということでしょうか。
お礼
返答が遅くなり申し訳ありませんでした。 無事完成させることが出来ました。 適切なアドバイス&プログラム、有難う御座いました。