- ベストアンサー
ExcelVBAで年をインプットボックスに設定する方法
- ExcelVBAを使ってインプットボックスに年を入力し、年ごとにデータを抽出する方法について教えてください。
- 現在、オートフィルタとして月ごとのデータを抽出するVBAがありますが、年度ごとに抽出するように改良したいです。
- また、1月から3月までのデータを動的に取得する方法や、うるう年に対応する方法も教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
Criteria1:=">=2010/04/01の右辺的部分は””で囲まれていることから判るように、文字列です。 だから年月と日の部分をあわせる文字列を作るとき、年月を現す文字列を文字列変数ymで受けるとして、ym&”01"とすれば良い。 年だけ入れて12月から1月のときにプログラムで繰り上げることも可能ですが、初心者は両方入力させるのがプログラムは簡単で確実だ。 Sub month() ym1 = InputBox("始期月 西暦yyyy/mm") ym2 = InputBox("次月 西暦yyyy/mm") With Worksheets("Sheet1") .Range("A1").AutoFilter Field:=1, _ Criteria1:=">=" & ym1 & "/01", Operator:=xlAnd, _ Criteria2:="<" & ym2 & "/01" .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("Sheet2").Range("A1") End With Worksheets("Sheet2").Activate Columns("A:AK").EntireColumn.AutoFit End Sub ーーーー 両者入力するのが面倒なら Sub tuki2() ym1 = InputBox("始期月 西暦yyyy/mm") ym = DateValue(ym1 & "/01") 'MsgBox ym 'MsgBox month(ym) ymn = DateSerial(Year(ym), month(ym) + 1, 1) 'MsgBox ymn symn = Year(ymn) & "/" & month(ymn) & "/01" MsgBox symn With Worksheets("Sheet1") .Range("A1").AutoFilter Field:=1, _ Criteria1:=">=" & ym1 & "/01", Operator:=xlAnd, _ Criteria2:="<" & symn .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("Sheet2").Range("A1") End With Worksheets("Sheet2").Activate Columns("A:AK").EntireColumn.AutoFit End Sub 日付シリアル値にして、つき部分を month(ym) + 1に持ち込むことが肝。 ーー A列だけのデータでテストした例。 2011/12とInputboxで受けた例 Sheet1 データ (日付シリアル値が入っていること。日付に見えても日付的文字列が混じらないように注意) 年月 2011/2/3 2011/2/4 2011/3/5 2011/3/6 2011/12/7 2011/5/8 2011/2/9 2011/12/10 2011/6/11 2011/12/12 2011/7/13 2011/2/14 2011/12/31 2012/1/2 2012/1/5 Sheet2 年月 2011/12/7 2011/12/10 2011/12/12 2011/12/31 ーーーー プロシージャ名をMonthにするのは避けたほうが良いのかな。VBにはMonth関数があるので。
お礼
年度のみBOX入力として、月ごとに作ることにしました。 ありがとうございました。
補足
ありがとうございます。 すみません、私の書き方が悪かったのですが、元のデータは月ごとのシートに分けて抽出してます. sheet2が"4月"となります。 年を入れると、月ごとに"5月""6月""7月"といったようにシートにデータが抽出されていくには、どうしたらいいでしょうか。