電子書籍の厳選無料作品が豊富!

当方Excel2003です。

あるブックの中にシートが一つ(シート名はsheet1)あり、そのシートの中にはB2セルを起点とするデータリストがあります。
(データリストの列はB列→名前、C列→金額、D列→日付とし、日付の表示はyyyy/mm/dd、行は約400行ほどあります。)

現在、データリストのD列にマクロのオートフィルターを使用し、任意の年月の月始めから月末までのデータを抽出しようとして、以下の構文を作成中なのですが、
datStart = DateSerial("i", "j", 1)
の部分でエラーが出てしまい、「型が一致しません」と表示されてしまいます。

どういうふうに変更したら良いのか、またそもそも全体の構成がおかしい等の問題点があればその解決策をどなたかご教示いただければ幸いです。
よろしくお願いいたします。


Sub 指定月抽出()

Dim i, j As Integer
Dim datStart As Date
Dim datEnd As Date
Dim strSDate As String
Dim strEDate As String

i = Application.InputBox("年を入力してください。", Type:=1)
j = Application.InputBox("月を入力してください。", Type:=1)
If i = False Or j = False Then Exit Sub

Application.ScreenUpdating = False
Application.DisplayAlerts = False

If Worksheets("sheet1").AutoFilterMode Then
Worksheets("sheet1").AutoFilterMode = False

End If

datStart = DateSerial("i", "j", 1)
datEnd = DateAdd("m", 1, datStart)
strSDate = ">=" & Format(datStart, "yyyy/m/d")
strEDate = ">=" & Format(datEnd, "yyyy/m/d")

With ThisWorkbook.Worksheets("DATA")
.Range("B2:D" & Range("D65532").End(xlUp).Row).Select
.AutoFilter Field:=3, _
Criteria1:=strSDate, _
Operator:=xlAnd, _
Criteria2:=strEDate

End With

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

A 回答 (2件)

明らかに間違ってるところとか,間違いではないけど間違ってる箇所とか,不明のシート名DATEとかありますが,ざっくりこんな具合でしょうか。




sub macro1()
 dim i as variant, j as variant
 dim sdate as date
 dim edate as date

 i = application.inputbox("年", type:=1)
 if i = false then exit sub
 j = application.inputbox("月", type:=1)
 if j = false then exit sub

 sdate = dateserial(i, j, 1)
 edate = dateadd("M", 1, sdate)

 with worksheets("Sheet1")
 .autofiltermode = false
 with .range("D2:D" & .range("D65536").end(xlup).row)
  .autofilter field:=1, criteria1:=">=" & sdate, operator:=xland, criteria2:="<" & edate
 end with
 end with
end sub
    • good
    • 0

こんばんは。



ひとまず datStart = DateSerial("i", "j", 1) でエラーがでる件についてですが
こちらは ダブルクォーテーション(") を外して頂ければ解消するかと。
※DataSerial は数値、数式を入力しなければならないので、wakuwaku-san の
  書き方ですと、『i という文字列』 と 『j という文字列』 を入力していたため、
  エラーが発生したのではないかと思慮致します。

<ご参考まで>
DateSerial(year,month,day)
引数yearは、年を表す0~9999の範囲の 『数値または数式』 を指定します。
引数monthは、月を表す1~12の範囲の 『数値または数式』 を指定します。
引数dayは、日を表す1~31の範囲の 『数値または数式』 を指定します。

参考URL:http://officetanaka.net/excel/vba/function/DateS …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!