• ベストアンサー

日付抽出でエラーします、教えてください。

s1シートB列に日付が連続1月~数ヶ月分入っています(書式日付は 「3/13」の形式で入力されてます) この中から例えば3月分だけをフィルタして、それを別ブック保存したいのです。 インプットボックスで「09/03」yy/mmと入力すると フィルターを掛けるところでデバックエラーになります 3/13形式の入力を、どのようにして09/03と認識させるのか 上手く抽出させるには、どうしたらいいのでしょうか?悩んでいます。 ご指導ねがいますm(_ _)m Private Sub CommandButton1_Click() Dim Wh As Worksheet, ws As Worksheet Dim Hiduke As Variant, Uwagaki As Integer, Owarimsg As Integer Dim umu Dim dumu '日付入力 Hiduke = Application.InputBox("年月データ入力", , Format(Hiduke, "yy/mm")) If Hiduke = "Boolean" Or Hiduke = False Or Hiduke = " " Then Exit Sub Do While Hiduke = "" Hiduke = Application.InputBox("日付入力されてません", , Format(Hiduke, "yy/mm")) Loop 'sheetからの日付データ抽出 Worksheets("s1").Activate Range("B6").AutoFilter Field:=1, Criteria1:="=" & Format(Hiduke, "yy/mm") Worksheets("s1").AutoFilter.Range.SpecialCells(xlCellTypeVisible).Copy '有無確認 Set dumu = Range("B7").CurrentRegion umu = dumu.Columns(1).SpecialCells(xlCellTypeVisible).Cells.Count - 1 If umu = 0 Then MsgBox "日付データなし" GoTo Syuryo Else '保存 Syori: Application.ScreenUpdating = False Application.DisplayAlerts = False Set wb = ActiveWorkbook wb.SaveAs Filename:="C:\お仕事\年月度別" & "\" & Format(Hiduke, "yymm") & ".xls" Application.CutCopyMode = False ActiveWorkbook.Save ActiveWorkbook.Close Application.DisplayAlerts = True Application.ScreenUpdating = True End If Syuryo: Worksheets("s1").AutoFilterMode = False Application.CutCopyMode = False Worksheets("s1").Activate Range("A1").Select End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.4

Worksheets("s1").Range("B6").AutoFilter Field:=1 Worksheets("s1").AutoFilter.Range.Columns(1).NumberFormatLocal = "yy/mm" Hiduke = Application.InputBox("年月データ入力(2009/3)") Worksheets("s1").Range("B6").AutoFilter Field:=1, Criteria1:="=" & Format(Hiduke, "yy/mm") '処理 Worksheets("s1").Range("B6").AutoFilter Field:=1 Worksheets("s1").AutoFilter.Range.Columns(1).NumberFormatLocal = "m/d;@"

zaikoman3
質問者

お礼

xls88さん、アドバイスありがとうございます!動きました^^! 他部分の動きは自分的に満足?問題なかったので、この日付形式の変換でつまづいていました。 これからも勉強させていただきます

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.5

こんにちは。 No.3です。 訂正箇所がありました。 失礼しました。<(_ _)> >  'オートフィルタ範囲の可視セル範囲で >  With .AutoFilter.Range.SpecialCells(xlCellTypeVisible)   'オートフィルタの範囲で   With .AutoFilter.Range

すると、全ての回答が全文表示されます。
  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.3

こんにちは。 > この中から例えば3月分だけをフィルタして、それを別ブック保存したいのです。 オートフィルタで3月分だけを手作業で抽出する時は、どうやって処理していますか? "09/03"とオプションダイアログに入力して3月分のデータが抽出できますか? 手作業でできないことをマクロで書いてもできません。 少なくとも、手作業でできることを記録して編集してみたら如何でしょうか? Sub Sample() Dim Hiduke As String '文字列として宣言 Do   '文字列として年月を入力   Hiduke = Application.InputBox(Prompt:="年月データ入力", _     Default:=Format(Date, "yyyy/mm"), _     Type:=2)   'キャンセルされたら終了   If Hiduke = "False" Then Exit Sub   '日付に変換できればループを抜ける   If IsDate(Hiduke & "/1") = True Then Exit Do Loop With Worksheets("s1")   '(yyyy/mm/1)以上で、(yyyy/mm+1/1)未満のデータを抽出   .Range("B6").AutoFilter Field:=1, Criteria1:=">=" & Hiduke & "/1", _     Operator:=xlAnd, Criteria2:="<" & Left(Hiduke, InStr(1, Hiduke, "/")) & _     Val(Mid(Hiduke, InStr(1, Hiduke, "/") + 1)) + 1 & "/1"   'オートフィルタ範囲の可視セル範囲で   With .AutoFilter.Range.SpecialCells(xlCellTypeVisible)     'データがあれば     If .Rows.Count > 1 Then       MsgBox "日付データあり"     Else       MsgBox "日付データなし"     End If   End With   'オートフィルタを解除   .AutoFilterMode = False End With End Sub

zaikoman3
質問者

お礼

>少なくとも、手作業でできることを記録して編集してみたら如何でしょうか? 確かにこのサイトに頼りすぎていることもあります。 自身で考えていかないとスキルつきませんね OtenkiAmeさん、ありがとうございます! とても参考になりました

すると、全ての回答が全文表示されます。
回答No.2

私事ですが、人の書いたものはよく分からないので・・・ 私は変数のHidukeが問題かなと。 Hidukeに値は取得できていますか? とりあえずsheetからの日付データ抽出で、Criteria1に抽出開始日、 Criteria2に抽出終了日としてフィルタすると宜しいかと思います。 いろいろ弄らなくてはならなくなりますが・・・ Formatは必要ないと思います。

すると、全ての回答が全文表示されます。
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.1

B列の表示形式を一旦、yy/mm にしてオートフィルタをかける。 抽出データを元の表示形式に戻して、コピー貼り付けする。 というようにすればどうでしょうか。 >Hiduke = Application.InputBox("年月データ入力", , Format(Hiduke, "yy/mm")) ↑ここで、Format(Hiduke, "yy/mm")しても意味がないと思います。

zaikoman3
質問者

補足

xls88さん、ありがとうございます >B列の表示形式を一旦、yy/mm にしてオートフィルタを・・ 下記の構文のように直してみましたが、 フィルタ掛かる前にレンジセレクトでエラーしてしまいます。 Range("B7:B65000").Select 何がかみ合っていないのでしょう、、、うぅ。。 Dim Hiduke As Variantは変数ですよね?これって入力データと 抽出データとの関係するのでしょうか?シリアル値? この辺もまだ良く理解していないビギナーです、すみません。 Criteria1:=Hidukeでもエラーしそうな気がします( p_q) ---------------------------------------- '日付入力 Hiduke = Application.InputBox("年月「yy/mm」でデータ入力") If Hiduke = "Boolean" Or Hiduke = False Or Hiduke = " " Then Exit Sub Do While Hiduke = "" Hiduke = Application.InputBox("日付入力されてません") Loop 'sheetからの日付データ抽出 Worksheets("s1").Activate Range("B7:B65000").Select Selection.NumberFormatLocal = "yy/mm" Range("B6").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:=Hiduke Worksheets("s1").AutoFilter.Range.SpecialCells(xlCellTypeVisible).Copy

すると、全ての回答が全文表示されます。

関連するQ&A