• 締切済み

エクセルVBA

日誌を作成してて、月毎に印刷しなければならないために下記のようなコードを自動マクロで作成しました。 Sub 並び替え4月() 並び替え4月 Selection.AutoFilter Field:=2, Criteria1:=">=2007/4/1", Operator:=xlAnd, _ Criteria2:="<=2007/4/30" Application.Run "日誌.xls!登録" End Sub Sub 並び替え5月() 並び替え5月 Selection.AutoFilter Field:=2, Criteria1:=">=2007/5/1", Operator:=xlAnd, _ Criteria2:="<=2007/5/31" Application.Run "日誌.xls!登録" End Sub これで、1年分作ったのですが、2008年4月からに応用できません。任意のセルに年度を入力するだけでコードが置き換わるようにするにはどうすれば良いのか見当もつかない状況です。ネットで色々調べてみたんですが、参考になる例題も見つけられず困っております。どうぞ、宜しくお願いいたします。

みんなの回答

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> A1セルにでも2008と入力することで、4月ボタンは2008/4/1~4/30なんだと、勝手に書き換えてと言うより判断できるマクロが欲しいのです ではSheet1のA1に年数がある場合 Dim y As Integer y = Sheets("Sheet1").Range("A1").Value Selection.AutoFilter Field:=2, Criteria1:=">=" & y & "/4/1", Operator:=xlAnd, _ Criteria2:="<=" & y & "/4/30" で、いかがでしょう? (他の部分にエラーがないと仮定してますが)

KABUcamper
質問者

補足

ご回答ありがとうございます。組み込んで実行してみましたが Criteria2が認識されないようで、実行しますと条件付き書式が設定されている最終行まで飛んでしまいます。 Sub 並び替え6月() '並び替え6月 Dim y As Integer y = Sheets("日誌").Range("B19").Value Selection.AutoFilter Field:=2, Criteria1:=">=" & y & "/6/1", Operator:=xlAnd, _ Criteria2:="<=" & y & "/6/30"  End Sub   以上、原文まま 条件付き書式を削除するしかないのでしょうか? セルに入力すると罫線が表示させるようにしたもので、非常に重宝なものなのですが・・・参りました  とか何とか 言いながら操作してましたら なんてことは無い 2008のデータが無かっただけでした 2007に直しましたら問題なく動作します。 助かりました ありがとうございます おっちょこちょいなオチで申し訳ございませんでした。頑張って勉強してまいりますので これからも宜しくお願いいたします。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

西暦と何月かを引数にして 月初めと月末を返す関数を作成すればいいのでは … Function getMonthStart( nY as Integer, nM as Integer ) as String   dim dt as date   dt = CDate( nY & "/" & nM & "/1")   getMonthStart = dt End Function Function getMonthEnd( nY as Integer, nM as Integer ) as String   dim dt as date   if nM <> 12 then     dt = CDate( nY & "/" & nM + 1 & "/1") - 1   else     dt = CDate( nY + 1 & "/" & nM & "/1") - 1   end if   getMonthEnd = dt End Function といった具合で Selection.AutoFilter Field:=2, Criteria1:=">=2007/5/1",Oparator:= xlAnd _ の部分を Selection.AutoFilter Field:=2, Criteria1:=">=" & _ getMonthStart( 2008, 4 ), Oparator:= xlAnd _ といった具合です

KABUcamper
質問者

補足

早速のご回答ありがとうございます。埋め込んであれこれ、やってみたんですが… 実は、コマンドボタンを単純に4月・5月・6月・・・と12個作って、それで月毎にフィルタ処理してたんです。これだと、毎年書き換えなければなりませんよね そこで、A1セルにでも2008と入力することで、4月ボタンは2008/4/1~4/30なんだと、勝手に書き換えてと言うより判断できるマクロが欲しいのです。専門用語も良く知りませんので、質問が見当違いであれば御容赦願います。 申し訳ございません 宜しくお願いいたします。

関連するQ&A