みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセル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月からに応用できません。任意のセルに年度を入力するだけでコードが置き換わるようにするにはどうすれば良いのか見当もつかない状況です。ネットで色々調べてみたんですが、参考になる例題も見つけられず困っております。どうぞ、宜しくお願いいたします。

投稿日時 - 2008-02-04 16:26:58

QNo.3743987

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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"

で、いかがでしょう?
(他の部分にエラーがないと仮定してますが)

投稿日時 - 2008-02-04 23:38:18

補足

ご回答ありがとうございます。組み込んで実行してみましたが 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に直しましたら問題なく動作します。
助かりました ありがとうございます おっちょこちょいなオチで申し訳ございませんでした。頑張って勉強してまいりますので これからも宜しくお願いいたします。

投稿日時 - 2008-02-05 09:58:54

ANo.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 _

といった具合です

投稿日時 - 2008-02-04 20:18:31

補足

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

投稿日時 - 2008-02-04 21:08:12

あなたにオススメの質問