• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:事務関係で営業成績をまとめるVBAを作成しています。 )

VBAで営業成績をまとめる方法

このQ&Aのポイント
  • 事務関係で営業成績をまとめるためのVBAプログラムを作成していますが、いくつかの問題があります。
  • エクセルファイルから「営業一覧」というシートの中から「新規獲得」というキーワードを含むデータを抽出し、別のファイルのSheet2にまとめたいと思っています。
  • しかし、コピーする領域が大きすぎてエラーが発生してしまい、フィルタ結果がない場合にも対応できていません。また、複数の部署のデータを結合する際にもうまく件数がカウントされず、正確なデータが表示されません。対処方法を教えていただきたいです。

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.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列最終行の一つ下の行へ貼り付け この様にすることによって、確実に貼り付け場所の指定ができる うまく処理されなかったから補足されたのですね すみません、私のミスです ご迷惑掛けました

megumi1122
質問者

お礼

返答が遅くなり申し訳ありませんでした。 無事完成させることが出来ました。 適切なアドバイス&プログラム、有難う御座いました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

まずは、添削から >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)も解決していると思います 以上、参考まで

megumi1122
質問者

補足

早急な回答ありがとうございました。 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の入力されている最終セルを確認し、その一つ下の行に貼り付けをする、ということでしょうか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excel2003VBA

    お世話になっております。 手作業マクロの記録で下記作業を行い、一部修正をして一度はうまく動作していたのですが 1点 問題が御座いまして独自に色々試していたのですが、どうにもうまくいかないので どなたかご教授いただけませんでしょうか。 Sub ●●用() ' ' ●●用 Macro ' 12月1月の店舗を抽出し新しいブックに移動する。 ' Selection.AutoFilter Field:=3, Criteria1:="=12月", Operator:=xlOr, _ Criteria2:="=1月" Selection.AutoFilter Field:=8, Criteria1:="(店名)" Range("A4:W2076").Select Selection.Copy Sheets.Add ActiveSheet.Paste Application.CutCopyMode = False Worksheets("Sheet1").Select Worksheets("Sheet1").Move Workbooks("営業部まとめ.xls").Sheets("全件表示").Activate Selection.AutoFilter Field:=3 Selection.AutoFilter Field:=8 Range("A5").Select ActiveWorkbook.Save End Sub まず、 >Worksheets("Sheet1").Move ここだけあれば >Worksheets("Sheet1").Select こっちは必要ないでしょうか? あと、上記の中で > Worksheets("Sheet1").Select この部分なのですが、毎回「Sheet1」とは限らないので「アクティブシート」にしたいと思い色々試してみましたが 全てエラーとなり、結局元にもどしてしまいました。 > Worksheets("Sheet1").Move あと出来ればこれも移動させた後でデスクトップに名前を付けて保存までしたいのですが どのようなコードを追加すればよろしいでしょうか。 宜しくお願い致します。

  • Excel vba selectが効かない

    2と3の2つのエクセルファイルがあります。縦の列を新しいファイルの横の行に コピーしていきたいプログラムです。 2のファイルの1シート目の"C8:C25" 3のファイルの1シート目の"C9:C65" を新しい1のファイルの1シート目の1行目にコピーするプログラムを 作っていますが1シート目はpasteされるのですが 3のファイル2シート目からselectの指定が"C9:C65"ではなく、B9からQ65の指定になってしまい思ったコピーができません(★のところ)、1シート目はうまくいっているのでどうして3のファイルの2シート目のからうまくいかないかわかりません。 5シートまででテストをしているのですが実際は各々255シートありもってくる列も 12列あります。とりあえずCの列だけ5シートで試してみています。 Dim i As Long Dim N As Long i = 1 N = 1 Do While i <= 5 ''C列''' Workbooks(2).Worksheets(i).Activate   '2のファイル Worksheets(i).Range("C8:C25").Select   'もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("C" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True Workbooks(3).Worksheets(i).Activate   '3のファイル Workbooks(3).Worksheets(i).Range("C9:C65").Select  '★もってくるところ Selection.Copy Workbooks(1).Worksheets(1).Activate   '1新しいファイル Range("U" & N).Select   '貼り付けるところ Selection.PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=True i=i+1 N=N+1 LOOP

  • マクロでフォントサイズを縮小するには!?

    現在、エクセルのマクロを勉強しています。 文字数がある一定を超えるとフォントサイズを縮小したいのですが、 どうもうまくいきません。 下記のような場合はどうしたらいいのでしょうか?? file_name= "aa.xls" data_sheet= "data" Windows(file_name).Activate Worksheets(data_sheet).Activate Workbooks(file_name).Worksheets(data_sheet).Cells(i, 2).Select Selection.Copy Windows(file_name).Activate Worksheets(print_sheet).Activatee Workbooks(file_name).Worksheets(print_sheet).Range("J20").Select /* ここに フォントサイズを入れたらいいのでしょうか??*/ Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False

  • Excel2007 VBA 転記について

    ご指導のほどお願いします。 見積書からボタン300をクリックするとFAX送付状(テンプレート).xlsに下記内容が転記するように書いたのですが、質問させてください。 ("見積書").Range("c6")→("Sheet1").Range("e14")に貼り付けはうまく行きますが 本当は("見積書").Range("c6")&("見積書").Range("c8")=&"の件"を("Sheet1").Range("e14")に貼り付けしたいのです。 C6セル「○○○工場」 C8セル「○○○作業」 の件 ↑をE14セルに「○○○工場 ○○○作業の件」 として貼り付けたいです。 Sub ボタン300_Click() Workbooks.Open "\FAX送付状\FAX送付状(テンプレート).xls" ThisWorkbook.Worksheets("見積書").Range("a4").Copy Workbooks("FAX送付状(テンプレート).xls").Worksheets("Sheet1").Range("f6").PasteSpecial Paste:=xlPasteValues ThisWorkbook.Worksheets("見積書").Range("i8").Copy Workbooks("FAX送付状(テンプレート).xls").Worksheets("Sheet1").Range("AD9").PasteSpecial Paste:=xlPasteValues ThisWorkbook.Worksheets("見積書").Range("c6").Copy Workbooks("FAX送付状(テンプレート).xls").Worksheets("Sheet1").Range("e14").PasteSpecial Paste:=xlPasteValues  ActiveSheet.Range("F9").Value = Date End Sub ご指導のほどお願いします。

  • VBA関数

    PC ほぼ素人です。ネットで調べて、下記のコードを作成できました。 バージョンは2007 Sub 抽出() Worksheets("Sheet5").Activate Worksheets("Sheet5").Range(Cells(1, 1), Cells(328, 18)).Clear With Worksheets("Sheet3").Range("A8") .AutoFilter Field:=1, Criteria1:=Worksheets("Sheet3").Range("a2") ''(1) .AutoFilter Field:=2, Criteria1:=Worksheets("Sheet3").Range("b2") ''(1) .CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("Sheet5").Range("A1") ''(2) .AutoFilter ''(3) End With Worksheets("Sheet5").Activate End Sub Sheet5に抽出後、そのデータを書き換え Sheet3へ戻したいのですが可能なのでしょうか?      A  B      C     D      E      F      G   1  月  日   得意先   前回    数量    今回    数量   2  3   5    A商事   1月15日   2     2月5日   3   抽出後、Sheet3には、ABDEFGを戻したいのです。 説明不足かもしれませんが、どうか宜しくお願い致します。   

  • オートフィルタで抽出したデータをVBAで貼り付けしたい

    質問させていただきます。 エクセルで仕入帳を作っています。 各取引先ごとに1枚のシートになっているのですが、 該当する月をオートフィルタで抽出して、そのデータを1枚のシートに貼り付けていき、各月ごとにデータをまとめたいと思っています。 ユーザーフォームで月を入力してオートフィルタで抽出しているのですが、データのないシートの場合不要な部分までコピー&ペーストされてしまいます。 これを回避するにはどのようにコードをかけばいいのでしょうか。 よろしくお願い致します。 現在はこのようなコードで抽出しています。 Private Sub CommandButton1_Click() Application.ScreenUpdating = False Worksheets("sheet2").Select Range("H1:H17").Select Range("H17").Activate Selection.AutoFilter Field:=8 Rows("2:2").Select Rows("2:500").Select Selection.ClearContents RowIndex = 3 '行番号の初期値設定 Do While Worksheets("目次").Cells(RowIndex, 1).Value <> "" '拾ったセルの値が空でない間ループ内の処理をする 検索値 = UserForm1.TextBox1.Text DataSheetName = Worksheets("目次").Cells(RowIndex, 1).Value Worksheets(DataSheetName).Select Range("A2").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.AutoFilter Selection.AutoFilter Field:=13, Criteria1:=検索値 & "月分" Set tbl = ActiveCell.CurrentRegion tbl.Offset(2, 0).Resize(tbl.Rows.Count - 2, tbl.Columns.Count).Select Selection.Copy Worksheets("sheet2").Select IRow = Range("A" & Rows.Count).End(xlUp).Row Range("A" & IRow + 1).PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False Worksheets(DataSheetName).Select Selection.AutoFilter Field:=13 RowIndex = RowIndex + 1 '行番号カウントアップ Loop Application.ScreenUpdating = True Worksheets("sheet2").Select Range("A2").Select Unload UserForm1 End Sub

  • EXCEL VBA作成方法

    職場で頭の痛いことがありまして・・・ 月合計をEXCELで1つのシートに出すことは出来ますが、それを日付ごとに(1日~31日)複数シートにする方法がわかりません。 内容は自分で工夫をして見ましたがうまくできません。ご教授をいただけますでしょうか? Sub 月別シート分割() Dim 元シート As Worksheet Dim 列幅() As Variant Dim 条件列 As Integer Dim 月 As Long Dim 条件1 As String, 条件2 As String Dim i As Integer, j As Long Set 元シート = ActiveSheet ActiveCell.CurrentRegion.Select ReDim 列幅(Selection.Columns.Count) For i = 1 To Selection.Columns.Count 列幅(i) = Selection.Cells(, i).ColumnWidth Next 条件列 = 1 月 = Month(ActiveCell.Offset(1, 条件列 - 1)) If Selection.AutoFilter Then Selection _ .AutoFilter For i = 1 To 31 Sheets.Add Before:=Sheets(i) ActiveSheet.Name = i & "" 条件1 = ">=" & DateSerial(月, i, 1) 条件2 = "<" & DateSerial(月, i + 1, 1) 元シート.Activate ActiveCell.CurrentRegion.Select Selection.AutoFilter Field:=条件列 _ , Criteria1:=条件1 _ , Operator:=xlAnd _ , Criteria2:=条件2 Selection.SpecialCells( _ xlCellTypeVisible).Copy Sheets(i).Range("A1").PasteSpecial For j = 1 To Selection.Columns.Count Sheets(i).Cells(, j).ColumnWidth _ = 列幅(j) Next j Next i Selection.AutoFilter Sheets(1).Activate End Sub

  • VBA マクロ実行時エラー 1004

    すみません (1)Workbooks(p_addr_Name).Worksheets(sheet_check).Range(Cells(7, 2), Cells(19, 2)).Copy (2)Workbooks(p_SH_weekly).Worksheets("Sheet1").Range(Cells(7, i), Cells(19, i)).PasteSpecial Paste:=xlPasteAll その際(2)で「実行時エラー'1004'」が出ました、教えてください。 *上記引数は全部入りました 宜しくお願いします

  • EXCEL VBA  任意のシートに貼りつけ

    御世話になります。おしえて下さい。 データPCのexcelデータからオートフィルタでデータを抽出して任意の列を 抽出するところまでは出来ているようですが、その先が付け焼刃ですので、 さっぱり解決策がみつけられません。 データをオートフィルタにて抽出→帳票ブックの任意のシートに張り付け 帳票のシート名はユーザフォームのリストボックスから代入してるつもりです。 宜しくお願い致します。 Option Explicit Sub Macro3_2() Dim myRL As Date Dim MyRow As Long Dim Window1 As Window Dim buf As String myRL = UserForm1.TextBox1 buf = UserForm1.ListBox1 Workbooks.Open Filename:= _ "\\WPCABC\Users\hoge\Documents\hogehoge\データ.xlsx" ActiveSheet.ListObjects("テーブル_PCABC_からのクエリ") _ .Range.AutoFilter Field:=9, _ Criteria1:="=" & myRL ActiveSheet.ListObjects("テーブル_PCABC_からのクエリ") _ .Range.AutoFilter Field:=12, _ Criteria1:=">=1" MyRow = Worksheets("sheet1") _ .Range("A" & Rows.Count).End(xlUp).Row Worksheets("sheet1").Activate Range("B2:B" & MyRow).Select Selection.Copy ------------------------------------------------------↓上手く出来ません Workbooks("帳票.xlsm").Worksheets("buf") _ .Range("Y3" & MyRow) _ .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Workbooks("帳票.xlsx").Worksheets("sheet1").Activate Range("L2:L" & MyRow).Select Selection.Copy Workbooks("帳票.xlsm").Worksheets("buf") _ .Range("Z3" & MyRow) _ .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Set Window1 = Application.Windows("クエリデータ.xlsm") Window1.Activate End Sub

  • VBA フィルター後に重複を1件としてカウントした

    VBA初心者です。 Sheet1にリスト、Sheet2にボタンなどを配置し、Sheet1のリストにフィルターをして、その結果の中の重複分を1件としてカウントして、合計で何件あるのかというものを作りたいと思っています。 Sub 計算() Worksheets("sheet1").Range("A1").AutoFilter Field:=10,Criteria1:=Worksheets("sheet2").Range("C3").Value Count = WorksheetFunction.Subtotal(3,Range("j2:j577")) n = WorksheetFunction.Subtotal(3,Range("j2:j577")) Application.Evaluate("=SUMPRODUCT(1/COUNTIF(C1:C577,C1:C577))") Worksheets("sheet2").Range("E3").Value = n & "件" Worksheets("sheet2").Select End Sub というような感じで作ってみましたが、重複を1件として数えず全件の件数が出てしまいます。 初心者なのでいろいろ不備はあるかと思いますが、どのように直せばよろしいか、どうか教えていただけますようよろしくおねがいいたします。