エクセルのマクロ・Criteria1:=の扱いについて

このQ&Aのポイント
  • エクセルで部署全体で担当している案件の一覧を月ごとにまとめている際に、マクロを使用して効率的に担当者別に印刷を行う方法について教えてください。
  • 現在は記録マクロを使用して個別にフィルタをかけて印刷していますが、人員の変動や手間の問題があります。
  • 月初毎にフィルタをかけて自動的に担当者別に印刷する方法があれば助かります。アドバイスをお願いします。
回答を見る
  • ベストアンサー

エクセルのマクロ・Criteria1:=の扱いについて

エクセルのマクロ・Criteria1:=の扱いについて お世話になっております。 エクセルで、「部署全体で担当している案件の一覧」を月ごとにまとめております。 これを月初に、 フィルタで担当者別に案件表示し、それを手動で印刷して、各人に配布しているのですが、 マクロで処理したいと考えています。 記録マクロを使用し、フィルタでAさんを抽出し印刷という工程を 下記のとおり、確認したのですが --------------------------- Sub Macro1() ' ' Macro1 Macro ' ' ActiveSheet.Range("$A$2:$EJ$1503").AutoFilter Field:=10, Criteria1:="A さん" ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)" ActiveWindow.SmallScroll Down:=81 End Sub ---------------------- Bさん、Cさんと順々に印刷させていくには、 上記と同様の内容のスクリプトをCriteria1:="B さん"に変えていくしか方法がないのでしょうか? これでは人数分スクリプトを用意しなくてはならず、また人員の変動のたびに Aさんは削除、Dさんを追加などと、手間がかかります。 月初毎にフィルタをかけて担当者別に印刷を行う効率の良い方法はないものでしょうか アドバイス等お願い申し上げます。

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

  • ベストアンサー
回答No.2

簡単な 担当者リストを作り(多分何らかの形で今もあると思うのですが) よく使われる 繰り返し制御で 実現出来ると思います。  例えば 「担当者リスト」と言うシートの 2行目に C列(3列目)から Aさん、D列にBさん・・・  ・・と20人分v列(22列目)まで担当者名の枠があるとします(空欄があっても可)。 以下にfor~nextを付け加えてみました、動きを 考えてみてください ----------------------------- Sub Macro1() ' ' Macro1 Macro ' Dim 担当者 As String '「担当者」という変数を 文字列型で宣言 Dim I As Integer '繰り返し制御用の汎用の変数を 整数型で宣言 ' For I = 3 To 22 'I が 3~22まで Nextとの間を繰り返す 担当者 = Worksheets("担当者リスト").Cells(2, I).Value '↑ 変数「担当者」に「担当者リスト」シートの2行目のI列目の値を代入 If 担当者 <> "" Then ActiveSheet.Range("$A$2:$EJ$1503").AutoFilter Field:=10, Criteria1:=担当者 ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)" End If Next ActiveWindow.SmallScroll Down:=81 End Sub --------------------------------- たぶん マクロの自動記録で作成されたものでしょうから、変数を使ったり、繰り返し制御は記録出来ませんので、単純なことでも、迷われたと思います。 それと、、  ExecuteExcel4Macro "PRINT(1・・・・の行は、   単純に  ActiveSheet.PrintOut だけでいいでしょう。  ActiveWindow.SmallScroll Down:=81 は自動記録の時 表示位置を移動されたのが記録されたものとおもいます、不要なら削除したがいいでしょう、

その他の回答 (1)

  • mimeu
  • ベストアンサー率49% (39/79)
回答No.1

人数分のスクリプトを用意する必要は、モチロンありません。 但し、人数分の名前を何かの方法でプログラムに指示する必要はあります。 一例です Sub Macro1() ・・・中略・・・ ActiveSheet.Range("$A$2:$EJ$1503").AutoFilter Field:=10, Criteria1:="A さん" ・・・後略・・・ End Sub を下記のように変更します Sub Macro1(人名 As String) ・・・ ActiveSheet.Range("$A$2:$EJ$1503").AutoFilter Field:=10, Criteria1:=人名 ・・・ End Sub その上で、下記を新しく作り、実行すれば全員分できます。 Sub Main()   Macro1("Aさん")   Macro1("Bさん")   Macro1("Cさん")   ・・・以下省略・・・ End Sub

関連するQ&A

  • エクセルVBAの一時停止後、 入力し再実行したい

    エクセルVBAでオートフィルター実行後に一時停止し、オートフィルターで選んだエクセルシート上のセルに直接入力た後、マクロを再実行させたい。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2008/3/2 '製品コードより枠番を選ぶ Selection.AutoFilter Field:=12, Criteria1:="=?????1*", Operator:=xlAnd 'ここで一時停止し、エクセルシート上で入力した後、次の行を実行したい Selection.AutoFilter Field:=12, Criteria1:="=?????2*", Operator:=xlAnd 'ここで一時停止し、エクセルシート上で入力した後、次の行を実行したい Range("A1").Select End Sub

  • マクロ オートフィルタで困っています。

    マクロ オートフィルタで困っています。 1列目と2列目からそれぞれ条件をフィルタで抽出し、抽出された行を削除するマクロを組んだのですが(下記)、Bの条件が表にない場合に2行目から下が全て削除されてしまいます。 元の表は毎週変わるため、抽出する条件があるかないかはその時次第です。 オートフィルタにこだわってはいませんが、その他の抽出方法もいまいち分からず……。 どのようにすればよいのか、教えていただけますでしょうか。 宜しくお願い致します。 <マクロ> Sub Macro() Selection.AutoFilter Field:=1, Criteria1:="A" Selection.AutoFilter Field:=2, Criteria1:="B", Operator:=xlAnd Dim gyou(1) As Long gyou(0) = 2 gyou(1) = Range("A1").CurrentRegion.Rows.Count Rows(gyou(0) & ":" & gyou(1)).Select Selection.Delete Shift:=xlUp End Sub

  • Excelでマクロを繰り返したい。

    Excelでマクロを記録したら以下のようになりました このマクロを以下の条件で繰り返したいのですが。 Sub Macro1() '------------- '----------------------- ' Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=5*", Operator:=xlAnd, _ Criteria2:="<>5@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=6*", Operator:=xlAnd, _ Criteria2:="<>6@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=7*", Operator:=xlAnd, _ Criteria2:="<>7@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=8*", Operator:=xlAnd, _ Criteria2:="<>8@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub 条件= Field:は4~35位まで変動します 一連の動作をコピーして手作業で数字を変えてみたのですが プロージャが大きすぎてエラーになってしまいます。 何か良い方法は無いでしょうか?。

  • マクロ AutoFilter・・Criterial

    ActiveSheet.Range("$A$2:$P$5000").AutoFilter Field:=9, Criteria1:="1" というオートフィルターのマクロがあります。 Criteria1:= の次にある ”1” はどういう意味ですか?

  • EXCELマクロ AutoFilterの使い方を教えて下さい。

    EXCELマクロ AutoFilterの使い方を教えて下さい。 EXCELマクロ初心者です。使用環境は、EXCEL2007です。 Web上で紹介されていたマクロをアレンジして以下のようなマクロを作成しました。 B列に指定した数字が記載された行を削除するものです。 これをさらに、4,5,6,・・・,11,12,1,2,3の中から指定した数字以外がB列に記載 された行を削除するように書き換えたいのですが、「Criteria1:=intCriteria」 を「Criteria1:<>intCriteria」として実行してみましたがエラーが出てしまいま す。 どなたか、良い方法をご教示ください。不足の情報、私の説明不足がありましたら、 ご指示ください。 以下、MACRO内容 Sub B列に指定の数字がある場合、行を削除() Application.ScreenUpdating = False intCriteria = InputBox("検索する数字を入力。", "数字入力") With Cells(2, 1).CurrentRegion On Error GoTo errhandler .AutoFilter Field:=2, Criteria1:=intCriteria .Offset(1).Resize(.Rows.Count - 1). _ SpecialCells(xlCellTypeVisible).EntireRow.Delete End With ActiveSheet.AutoFilterMode = False Exit Sub  errhandler: ActiveSheet.AutoFilterMode = False  MsgBox intCriteria & "はありません。" Application.ScreenUpdating = True End Sub

  • エクセルの変数について

    お世話になります。 下のマクロについてどうしてもわからないので教えてください。 開始日、最終日をinputboxにて日付を入れてオートフィルターで結果をだしたいのですが、どうしてもオートフィルター内のmyfirstdateとmylastdateに変数の値が入りません。 どこが間違っていますでしょうか? お願いします。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2006/12/7 ユーザー名 : AAAAAA ' Dim myfirstdate As Date Dim mylastdate As Date myfirstdate = InputBox("開始日を入力してください。" & vbCrLf & "例)12/1") mylastdate = InputBox("最終日を入力してください。" & vbCrLf & "例)12/31") Selection.AutoFilter Field:=2, Criteria1:=">=myfirstdate", Operator:=xlAnd, _ Criteria2:="<=mylastdate" ' End Sub

  • Excelマクロでオートフィルターからコピペ

    ファイルのB列の値から0以外の値をオートフィルターで抽出し、値を、別のファイルのD列の一番下に貼りつけるマクロを作っていますがうまくいきません。 今作ったのは Sub macro1() If ActiveSheet.AutoFilterMode = False Then Range("A:G").Select Selection.AutoFilter Else Selection.AutoFilter Range("A:G").Select Selection.AutoFilter End If Selection.AutoFilter Field:=2, Criteria1:="<>0", Operator:=xlAnd Range("A1").Select Range("B2", Range("B2").End(xlDown)).Select Selection.Copy Windows("貼りつけるファイル名").Activate Cells(Rows.Count, 4).End(xlUp).Offset(1).Select ActiveSheet.Paste End Sub です。 フィルターで0以外の値を抽出しコピーまではできていますが、貼りつけるところでエラーがでます。 Microsoft Visual Basic 400 というエラーです。 何が悪いのか分かりません・・・。 分かる方いましたらご教授ください。よろしくお願いします。

  • エクセルのマクロのことについてです。

    エクセルのマクロのことについてです。 セル内に入力した日本語でオートフィルタの絞り込み検索をかけるマクロを作りたいのですが、英語ではうまく行っているのですが、日本語ではなぜかうまくいきません。 下記のようにコードを書いているのですが、 どこが間違っているのかご教授いただけませんでしょうか? Dim nihongo As String nihongo = Worksheets("絞り込み").Cells(3.4).Value If nihongo = Empty Then nihongo = "*" End If ActiveSheet.Range("$A$7:$G$100").AutoFilter Field:=4, Criteria1:="=*" & nihongo & "*", Operator:=xlAnd

  • オートフィルタを使わずに行削除

    こんにちは。 簡易記録のマクロで実行したものが、以下となります。 オートフィルタで選択した0以下の行を削除するために選択した物になります。 Sub 0以下を削除() ' Macro test ' ActiveSheet.Range("$A$1:$G$165").AutoFilter Field:=7, Criteria1:="<=0", _ Operator:=xlAnd Rows("3:56").Select ActiveWindow.SmallScroll Down:=66 Rows("3:165").Select Selection.Delete Shift:=xlUp ActiveSheet.Range("$A$1:$G$123").AutoFilter Field:=7 End Sub 行数は、日によって、様々で何千行となる場合もあります。 そこで、オートフィルタを使用せず、G列目の0以下の数値を行削除を行いたいです。 どのように設定したらいいか教えて頂けると幸いです。 不備がありましたら、補足を入れますので、 お手数ではございますが、宜しくお願い致します。

  • EXcelオートフィルタのオプション設定で条件として変数をマクロで組むには?

     オートフィルタ機能を使い、指定期間内のデータを抽出するようにマクロを組みたい。指定期間が一定ではないので変数を設定したいのですがうまくいきません。下記はマニュアルで入力したものをマクロに記録したものです。指定期間は他のBookのセルに入力画面として設けてあります。例えばBook2/B1(開始)~B2(終了)。 Range("A1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:=">=2005/8/21", Operator:=xlAnd _ , Criteria2:="<=2005/9/20" Range("C1").Select End Sub

専門家に質問してみよう