度々申し訳ありませんが、何卒またお教えください。
下記の様なコードを書いたのですが、
オートフィルタの解除ができません。
何故なんでしょうか?
ちなみに、ある任意の日付の行だけを抽出して
別のシートにコピー・プリントアウト
を自動化するマクロを作りたいと思っています。
他にもコードに問題などありましたら
指摘いただけると幸いです。
よろしくお願いします。
----------------------------------------------------------------
Sub macro2()
'macro test 2
Dim yyyymmdd As Date
yyyymmdd = InputBox("印刷したい日付を入力して下さい。", "印刷日入力")
With Worksheets("結果")
.ListObjects("リスト1").Range.AutoFilter Field:=1, Criteria1:=yyyymmdd
.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("貼り付け用紙").Range("A1")
End With
'ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
Worksheets("結果").AutoFilterMode = False
Application.CutCopyMode = False
Worksheets("貼り付け用紙").Range("A1:AM100").ClearContents
End Sub
No.1
- 回答日時:
こんにちは。
With Worksheets("結果")
.ListObjects("リスト1").Range.AutoFilter Field:=1, Criteria1:=yyyymmdd
.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("貼り付け用紙").Range("A1")
.ListObjects("リスト1").Range.Select '←ここ
.AutoFilterMode = False
End With
このように、一旦、Select すればよいと思います。
早速の回答ありがとうございます。
試してみましたが、やはりうまくいきません。。。
しかもよくみると
コピーした後の貼り付けもできてませんでした。
うまくいくときといかない時がある気がしますが、
何か関係があるのでしょうか?
No.2
- 回答日時:
こんばんは。
>コピーした後の貼り付けもできてませんでした。
この程度で、全部書く必要がないと思ったので、単に一部しか書いていません。
もし、厳密に言うなら、AutoFilter のオン・オフを利用するなら、AutoFilter そのものを使えばよいのでは?わざわざ、ListObject を使うというのは、そこに数式の自動コピーなどがあるということだと思いますが、マクロからの違いは、あまりありません。
これで出来ていないということでしょうか?
'-------------------------------------------
Sub macro2R()
'macro test 2
Dim yyyymmdd As Date
yyyymmdd = InputBox("印刷したい日付を入力して下さい。", "印刷日入力")
With Worksheets("結果")
.ListObjects("リスト1").Range.AutoFilter Field:=1, Criteria1:=yyyymmdd
.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("貼り付け用紙").Range("A1")
.ListObjects("リスト1").Range.Select
.AutoFilterMode = False
End With
'印刷?
'ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
Application.CutCopyMode = False
Worksheets("貼り付け用紙").Select
MsgBox "確認", vbInformation
Worksheets("貼り付け用紙").Range("A1:AM100").ClearContents
End Sub
すみません。説明不足でした。
>コピーした後の貼り付けもできてませんでした。
というのは、マクロを実行したとき、コピーペーストの
メソッドがうまく機能しなかった。という意味です。
書いて頂いたコードを実行してみましたが、
やはりオートフィルタの解除はできていません。。。。
それ以外は問題ありません。
元データの方に問題がないか等、
もう一度見直してみます。
No.3
- 回答日時:
こんばんは。
私は、どうも甘く見ていました。下位バージョンと同じだと思っていました。だから、単に、フィルターの部分をすべて出せばよいと思っていましたが、Excel 2007 の場合は、その範囲がテーブルになっていますから、違いがあるようです。(間違いなく、この部分は安定していません。2007のみのようです。次バージョンで、またここは変わるかもしれません。)まあ、マクロにするなら、オートフィルタのほうが安定して使えると思います。私は、新しいテーブルオブジェクトの経験はほとんどありません。
>>コピーした後の貼り付けもできてませんでした。
>というのは、マクロを実行したとき、コピーペーストの
>メソッドがうまく機能しなかった。という意味です。
もともと、VBAから、Date 型の検索文字を、ファルタで検索すること自体に問題はないか、バージョンやローカル仕様の違いがあって、うまくいくか同じコードでも可能か分かりません。
>他にもコードに問題などありましたら
>指摘いただけると幸いです
後で見直ししましたが、基本的な流れ自体に、間違いはないでしょうか。エラーは出ていないでしょうか?コードによって、何度か不明なエラーが発生しました。
本来の目的は、もしかしたら、フィルタで選択したものをコピーして、それを印刷するというマクロではありませんか?そうしたら、質問のコード自体が違いますね。
> 'ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
Ver.4 マクロ関数で印刷が良いか悪いかは別として、わざわざこういうコードを使うというのは、出来れば、ヘルプもマニュアルもある人が使うほうが無難です。(Excel 2007 までです。)
2007でためしてみて、一応、コピー&ペースは成功しています。フィルターも解除されています。しかし、下位バージョンではうまく行かない可能性もあります。以下で一度試してみてください。
'-------------------------------------------
Sub macro3R()
'macro test 2
Dim yyyymmdd As Variant '←念のためバリアント型に変えた
Worksheets("貼り付け用紙").Range("A1:AM100").ClearContents
yyyymmdd = InputBox("印刷したい日付を入力して下さい。", "印刷日入力")
With Worksheets("結果")
.ListObjects("リスト1").Range.AutoFilter Field:=1, Criteria1:=yyyymmdd
.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("貼り付け用紙").Range("A1")
.ListObjects("リスト1").Range.AutoFilter Field:=1
End With
Application.CutCopyMode = False
Worksheets("貼り付け用紙").Select
'印刷
'ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
End Sub
この回答への補足
やっと分かりました!
CurrentRegionはアクティブセル領域を意味して
いるので、データの途中で空白があると
そこから下は選択されなかったみたいです。
これで自作初のマクロが完成しそうです。
この度は本当にありがとうございました。
重ね重ねありがとうございます。
フィルターの解除はうまくいきました!
でも何故か
.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("貼り付け用紙").Range("A1")
の行が機能しません。
元データーの「見出しの行?」は貼り付けられているので、
コピーペーストはうまくいってるみたいです。
抽出もできています。
ですので抽出したセルのセレクトができていない
ということでしょうか。。。
ちょっとCurrentRegion.SpecialCells(xlCellTypeVisible)
を勉強してきます。
またここでご報告致します。
No.4ベストアンサー
- 回答日時:
こんにちは。
私個人としては、どうもバグのようなものだと解釈していました。
(軽率にバグだというと、恥をかくこともありますが。)
>CurrentRegionはアクティブセル領域を意味しているので、データの途中で空白があるとそこから下は選択されなかったみたいです。
CurrentRegionというのは、日本語で「地続き」というのにふさわしいです。ハスでも、繋がっていれば、範囲を選択します。しかし、こちらで、もう一度、考え直してみましたが、ListObject のRange プロパティから取得したほうが良いのではないかと思います。
本格的に書き直してみました。
'変更箇所
Set rng = objList.Range.SpecialCells(xlCellTypeVisible)
rng.Copy Sh2.Range("A1")
それと、
'ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
これは、正しいですか? きちんとヘルプなりで調べられればよいのですが、今は日本語ヘルプはありませんから、分からないと思います。
ヘルプより
PRINT(印刷範囲, 開始, 終了, 部数, 簡易印刷, プレビュー, 印刷範囲, カラー印刷, 給紙方法, 印刷品質, 縦方向の解像度, 印刷対象)
分からない場合は、VBAコマンドにしたほうがよいです。
以下は、丸々使う必要はありませんが、参考にしてみてください。
'-------------------------------------------
Sub ListForOutput1()
'macro test 2
Dim myDate As Variant 'バリアント型
Dim fmt As String
Dim objList As ListObject
Dim rng As Range
Dim Sh1 As Worksheet
Dim Sh2 As Worksheet
'-------------------
Set Sh1 = Worksheets("結果")
Set Sh2 = Worksheets("貼り付け用紙")
'--------------------
Sh2.Range("A1:AM100").ClearContents
Do
myDate = Application.InputBox("印刷したい日付を入力して下さい。", "印刷日入力", Type:=2)
If VarType(myDate) = vbBoolean Then Exit Sub
'日付のチェック
If IsDate(myDate) = False Then MsgBox myDate & " は、日付ではありません。"
Loop Until IsDate(myDate)
With Sh1
Set objList = .ListObjects("リスト1")
fmt = .Range("A2").NumberFormatLocal '書式を取る
myDate = Format(myDate, fmt) '入力文字の書式変更
objList.Range.AutoFilter Field:=1, Criteria1:=myDate
Set rng = objList.Range.SpecialCells(xlCellTypeVisible)
rng.Copy Sh2.Range("A1")
objList.Range.AutoFilter Field:=1
End With
Application.CutCopyMode = False
With Sh2
.Select
'印刷
.PageSetup.PrintArea = .Range("A1").CurrentRegion.Address
.PrintOut Preview:=True 'False にすると印刷します
End With
Set rng = Nothing
Set objList = Nothing
Set Sh1 = Nothing
Set Sh2 = Nothing
End Sub
ありがとうございます!
とても勉強になります。
'ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
はマクロの自動記録で出てきたコードをそのまま流用
しただけで、正直意味は全く分かっていません。
それにしても全然違ったコードになっていたので
びっくりしました。
本来はやはりシートやリストも宣言してから
使うべきなのですね。
見たことがない関数?も出ているので
じっくり勉強したいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) Excel VBA メール作成について 本文の中にExcel でコピーした図を上下に2つ 貼り付けを 2 2023/06/14 01:48
- Excel(エクセル) 【マクロ】PasteSpecialメソッドにて、コードが動かない理由が分かりません 2 2023/08/15 20:47
- Visual Basic(VBA) Sheet1をフィルターで「りんご」を抽出し、Sheet2へ地域を貼り付ける下記マクロを変更して S 2 2022/12/11 03:01
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) vba userformで漢字を全角カタカナに 2 2022/07/24 15:38
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) worksheets & rows メソッドは失敗しました。のエラー回避のやり方 1 2022/06/07 13:58
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
A4シール紙を手差し印刷できる...
-
至急!!Microsoft365 スマート...
-
会社のコピー用紙を無駄に使っ...
-
コピー用紙の裏・表
-
A4判横書き A4版横書き どち...
-
曲面に紙を貼るコツは?
-
印刷データ塗り足しを英語圏の...
-
大量のA4用紙のカウントの方法。
-
1色でセピア色に加工するには?
-
ガラス瓶に紙を貼るには?
-
新入社員っていつ名刺をもらえ...
-
「マネージメント」と「マネジ...
-
先月退職した会社へ,書類記入...
-
飛び込み営業に来る人との名刺...
-
取引相手の名刺をなくしてしま...
-
最近できたら彼氏が職業詐称を...
-
エクセルでURL挿入後、名前を変...
-
だれ?
-
小さな会社の事務全般の社員。...
-
飛び込み営業の名刺獲得方法に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
A4シール紙を手差し印刷できる...
-
至急!!Microsoft365 スマート...
-
曲面に紙を貼るコツは?
-
印刷データ塗り足しを英語圏の...
-
コピー機にインデックス付の用...
-
経費削減のユニークな呼びかけ方法
-
A4サイズの書類をA3サイズ2枚使...
-
大量のA4用紙のカウントの方法。
-
チラシで、他の企業のロゴって...
-
厚いのし袋の表に印刷したい
-
銀行の,払戻請求書や預け入れ...
-
A4判横書き A4版横書き どち...
-
リーフレットとチラシの違いに...
-
CDに押せるはんこ(字は注文)...
-
不要なコピー用紙、シュレッダ...
-
Webページのテキスト部分だけ印...
-
【印刷知識】紙焼きってなんで...
-
ホットスタンプとシルクスクリ...
-
テプラを使うのと、パソコンで...
-
UV印刷とハイブリットUVとLEDUV...
おすすめ情報