[[20051025160941]] 『今日のデータを抽出』(EHO) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『今日のデータを抽出』(EHO)
 BからM列までの下に長い表を作成しているのですが
  1.フィルタでM列に今日の日付が入っているデータを抽出
  2.印刷設定を変更
       印刷サイズをA4 → A5
       左余白を0
       ヘッダーに「チェックリスト」を追加
  3.印刷
  4.印刷設定を元に戻す 

 という作業をマクロの記録で作成してみましたが
 今日の日付が入っているデータを抽出
 のところがうまくいきません。
 DATE や TODAY ではだめなんですね。
 どなたか教えていただけませんでしょうか。
 あと、削除しても良い部分があれば
 そこも教えていただければ大変ありがたいです。

 Sub 本日入力チェックリスト()
'
' 本日入力チェックリスト Macro
' マクロ記録日 : 2005/10/25  ユーザー名 : EHO
'

'

    Sheets("仕訳").Select
    Selection.AutoFilter Field:=12, Criteria1:=Today

     With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = "&""MS P明朝,太字""&16&Aチェックリスト"
        .RightHeader = "&""MS P明朝,標準""&D"
        .LeftFooter = ""
        .CenterFooter = "&P / &N ページ"
        .RightFooter = "&F"
        .LeftMargin = Application.InchesToPoints(0)
        .RightMargin = Application.InchesToPoints(0)
        .TopMargin = Application.InchesToPoints(0.78740157480315)
        .BottomMargin = Application.InchesToPoints(0.47244094488189)
        .HeaderMargin = Application.InchesToPoints(0.31496062992126)
        .FooterMargin = Application.InchesToPoints(0.118110236220472)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = True
        .CenterVertically = False
        .Orientation = xlLandscape
        .Draft = False
        .PaperSize = xlPaperA5
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 78
    End With

    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = "&""MS P明朝,太字""&16&A"
        .RightHeader = "&""MS P明朝,標準""&D"
        .LeftFooter = ""
        .CenterFooter = "&P / &N ページ"
        .RightFooter = "&F"
        .LeftMargin = Application.InchesToPoints(0.78740157480315)
        .RightMargin = Application.InchesToPoints(0)
        .TopMargin = Application.InchesToPoints(0.78740157480315)
        .BottomMargin = Application.InchesToPoints(0.47244094488189)
        .HeaderMargin = Application.InchesToPoints(0.31496062992126)
        .FooterMargin = Application.InchesToPoints(0.118110236220472)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .CenterHorizontally = True
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = 78
    End With

    Selection.AutoFilter Field:=12

    Sheets("入力").Select
End Sub


 セルか行を選択してから、fieldじゃないでしょうか?

 >M列に今日の日付が入っているデータ
 ということなので、
    column("M:M").AutoFilter Field:=1, Criteria1:=date
 で、どうでしょうか?

 >削除しても良い部分があれば
 印刷のマクロですが、1回目と2回目で同じ部分は、はじめに印刷設定を決めておけばいいのでは?
        .LeftHeader = ""
        .LeftFooter = ""
 とか78%縮小とかは同じですよね。違う部分だけマクロっていうのはどうですか?

 (ken)

 ありがとうございます!
 おっしゃる意味を理解しようと色々して見ましたが
 どこを消して、上のコードを入れたらよいかわかりません(;;)
 ばかですみません。

 Selection.AutoFilter Field:=12, Criteria1:=Today

 の代わりに

 column("M:M").AutoFilter Field:=1, Criteria1:=date

 ではだめなんでしょうか。
 申し訳ないです。
 (EHO)


 それで、動かないですか?
 私は検証してませんが。

 (ken)

 すいません。タイプミスですね。

 Sub 本日入力チェックリスト()
 Sheets(1).Select
 Columns("M:M").AutoFilter Field:=1, Criteria1:=Date
 End Sub

 なら、動きましたので、訂正してください。

 (ken)

 ありがとうございます!
 動きました!動きましたがB列のフィルターで実行してしまいます。
 当然データは何も表示されず、それなのに4ページも印刷してしまいました…
 印刷設定の変更等他の部分はちゃんと意図どおりに動いてくれています。
 教えていただいたのをコピーしてそのまま差し替えたのですが、
 どこを直したらよいか、ご教授いただけませんか。
 (EHO)

 >B列のフィルターで実行してしまいます
 とりあえず、

 Sub TEST()
 Sheets(1).Select
 Columns("M:M").AutoFilter Field:=1, Criteria1:=Date
 End Sub

 このマクロのみを試してください。1枚目シートのM列を今日の日付でオートフィルタするはずですが。

 あとは、ステップインして確認してみてください。御希望通りに行かないときには、1行ずつ
マクロを追いかけることも必要に思います。

 すいません、kenのPCにプリンター繋げてないんで、詳しく検証できません。

 (ken)

 ありがとうございます!
 おっしゃる通り単独で実行して見ました。
 でも、B列でフィルタの実行されてしまいます。
 教えていただいたものを、そのままコピーして
 シート名だけ"仕訳"に変更しています。
 それがいけないんでしょうか。
 何度も何度も申し訳ありません。
 (EHO)

 M列をフィルタして、マクロの記録を実行してみたらどうなりますか?

 (ken)

 Sub てすと()
'
' てすと Macro
' マクロ記録日 : 2005/10/28  ユーザー名 : EHO
'

'

    Sheets("仕訳").Select
    ActiveWindow.SmallScroll ToRight:=1
    Selection.AutoFilter Field:=12, Criteria1:="H17.10.28"
End Sub

 記録して見たらこうなりました。
 よろしくお願いいたします。
 (EHO)


    Selection.AutoFilter Field:=12, Criteria1:=Date
 ではダメですか?

 (ken)

 はい。やって見たんですけどダメでした。
 M列でフィルタは実行されているんですが、何も抽出しないんです。
 お手数かけて申し訳ありません
 (EHO)

 format関数はどうなりますか?

 >Criteria1:="H17.10.28"
 ということなので、

 Sub test()

 Sheets("仕訳").Columns("M:M").AutoFilter Field:=1, Criteria1:=Format(Date, "gee.mm.dd")

 End Sub

 は?

 (ken)

 ありがとうございます!
 フィルタの設定等で大変勉強になりました。
 本日日付を抽出するのは、どうしてもできませんでしたが
 IF関数でR列に
 本日日付なら1
 として、R列で1を抽出することで解決することにしました。
 長い間お手数おかけしました。
 (EHO)

 日付抽出条件を単独で使用すると、
文字列としての日付、日付形式数値としての日付のアンマッチングが
起きる場合があります。
[[20050303152357]]『マクロでオートフィルタを使う』(KI)
↑私もこちらでLOOKUPさんにご指摘いただいたのですが、
日付を抽出オプションで「日付期間」として検索すると、
抽出できるのではないかと。

 Sheets("仕訳").Columns("M:M").AutoFilter _
        Field:=1, _
        Criteria1:=">=" & Format(Date, "gee.mm.dd"), _
        Operator:=xlAnd, _
        Criteria2:="<=" & Format(Date, "gee.mm.dd")
 
Format(Date, "gee.mm.dd")はDateだけでもよいかも。
(みやほりん)

 みやほりんさん、ありがとうございます!
 実は、作業列を作って抽出してできたものの
 動作が極端に遅くなって困っておりました。
 できるだけデータを減らしたいなあと思っていたところ
 お返事いただいて本当に助かります!
 [[20050303152357]]『マクロでオートフィルタを使う』(KI)
 も読ませていただきました。
 それで、教えていただいた通り入れて実行してみたのですが
 何も抽出されないんです・・・
 gee.mm.dd
 のところを、表示形式合わせたり私なりにいじってみたのですが
 だめでした。
 仕訳シートのM列に本日の日付が入っている行を抽出
 するのに間違いはないんですが・・・
 他に、抽出されない原因で考えられることはありますでしょうか?
 windows2000です。
 (EHO)

 "gee.mm.dd"形式ではうまく抽出しませんね。とほほ。
手動でリストからオプションを選択してOKすると抽出するのに。
表示形式が"gee.mm.dd"でも、"yyyy/mm/dd"形式ではできました。
(WinXP,Excel2003)
 Sheets("仕訳").Columns("M:M").AutoFilter _
        Field:=1, _
        Criteria1:=">=" & Format(Date, "yyyy/mm/dd"), _
        Operator:=xlAnd, _
        Criteria2:="<=" & Format(Date, "yyyy/mm/dd")
表示形式は気にしないで、引数の指定を
 Sheets("仕訳").Columns("M:M").AutoFilter _
        Field:=1, _
        Criteria1:=">=" & Date, _
        Operator:=xlAnd, _
        Criteria2:="<=" & Date
このようにしてみてもだめでしょうか。(みやほりん)


 ありがとうございます〜!!
 できました〜!!
 これがしたかったんです〜(^^)
 ただ、一度遅くなった動作は戻らないんでしょうか・・・
 5分以上かかってしまいます。
 昨日とデータ量は変わらず、一度作業列を作りマクロを入れて、
 動作速度が極端に遅くなり
 その作業列は後で削除したにもかかわらず
 動作速度が遅いままになっているのですが
 このコンピュータに問題があるのでしょうか・・・
 (EHO)

 過去の経験から PageSetup が遅い動作の原因と思われます。
マクロ内でPageSetupする限り回避不能です。
 
ユーザー設定のビューの設定を利用することで高速化の可能性はあり。
ページ設定1、ページ設定2の二つを設定する場合、
 
ページ設定1を設定した後、 表示>ユーザー設定のビュー>追加で
適当な名前でビューを登録。(仮にaとします)
 
ページ設定2を設定した後、 表示>ユーザー設定のビュー>追加で
同じく適当な名前でビューを登録。(仮にbとします)
 
ただし、これらビューの登録のとき、「非表示の行列とフィルタの設
定」のチェックをはずしておいてください。
はずさないと、フィルタ状況まで記録されてしまいます。

    Sheets("仕訳").Select
    Sheets("仕訳").Columns("M:M").AutoFilter _
       Field:=1, _
       Criteria1:=">=" & Date, _
       Operator:=xlAnd, _
       Criteria2:="<=" & Date
    ActiveWorkbook.CustomViews("a").Show
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
    ActiveWorkbook.CustomViews("b").Show
    Selection.AutoFilter Field:=12
    Sheets("入力").Select
 
(みやほりん)


 みやほりんさん、フォローありがとうございます。私も勉強させて頂きました。

 でも、
 Sheets(1).Select
 Columns("M:M").AutoFilter Field:=1, Criteria1:=Date
 って、
 >B列でフィルタの実行されてしまいます
 のようですが、kenには、それが解りません。

 (ken)

 AutoFilterメソッドでのField位置の認識は対象シートのその時点の
フィルタ状況に左右されます。
 
    Sheets("仕訳").Select
    Sheets("仕訳").Columns("M:M").AutoFilter _
       Field:=1, _
       Criteria1:=">=" & Date, _
       Operator:=xlAnd, _
       Criteria2:="<=" & Date
上記のコードを実行する前にB列からM列(もしくはそれより右側の列)の
範囲でオートフィルタがすでに生成されている場合はその一列目のB列に対
してフィルタがかかってしまいます。
確実にM列でのフィルタを実行するにはフィルタをいったん解除したほうが
確実かもしれません。
 
    Sheets("仕訳").Select
    Sheets("仕訳").AutoFilterMode = False
    Sheets("仕訳").Columns("M:M").AutoFilter _
       Field:=1, _
       Criteria1:=">=" & Date, _
       Operator:=xlAnd, _
       Criteria2:="<=" & Date
(みやほりん)

 お返事おそくなりました。
 教えていただいたものを使って色々試していたもので。
 すごく勉強になりました!
 それに思っていた通りのものができました!

 お二人とも本当にありがとうございました〜!
 (EHO)


 To みやほりんさん

 上記の件、理解致しました。

 よく考えてみると”なるほど”ですよね。

 今後とも、宜しくお願いします。

 (ken)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.