Excel AutoFilterメソッドでの月の範囲指定方法

このQ&Aのポイント
  • ExcelのVBAでAutoFilterメソッドを使用して特定の月のデータを抽出する方法について質問です。
  • 月の範囲指定において、30日で終わる月や28日、29日で終わる月にも対応する方法を教えてください。
  • 現在のコードでは月の範囲指定に困っており、どのように改善すればよいかアドバイスをお願いします。
回答を見る
  • ベストアンサー

Excel AutoFilterメソッドについて

excelのvbaについてです。  日付   取引先   金額 ------------------------------ 3月20日  ○○様  ¥20,000 4月23日  △△様  ¥19,000 5月23日  ○○様  ¥5,000 ・・・・・ ・・・ ・・ というような表から、INPUTBOXで入力した抽出条件でデータを取り出したいと思っています。 Dim aa As String, i As Integer aa = InputBox("抽出する取引先を入力してください") i = InputBox("抽出を開始する月は?※半角数字で入力してください") ii = InputBox("抽出を終了する月は?※半角数字で入力してください") Selection.AutoFilter field:=1, Criteria1:=aa Selection.AutoFilter field:=2, Criteria1:=">=" & i & "月1日", Operator:=xlAnd, Criteria2:="<=" & ii & "月31日" End Sub としたのですが、月によって30日で終わる月もあれば、28日、29日で終わる月もありますよね。 どんな月の範囲指定をしても、ちゃんと抽出できるようにするにはどうしたらいいでしょうか? 諸先輩方、どうぞよろしくお願いします。

noname#134466
noname#134466

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

一例として、DateSerial関数を使う方法があります。   Dim aa As String   Dim i As Long   Dim ii As Long   Dim y As Long   On Error GoTo errout   aa = InputBox("抽出する取引先を入力してください")   If aa = "" Then Exit Sub   i = InputBox("抽出を開始する月は?※半角数字で入力してください")   ii = InputBox("抽出を終了する月は?※半角数字で入力してください")   y = Year(Date) '当年の場合。   Selection.AutoFilter Field:=2, Criteria1:=aa   Selection.AutoFilter Field:=1, Criteria1:=">=" & DateSerial(y, i, 1), Operator:=xlAnd, _                   Criteria2:="<=" & DateSerial(y, ii + 1, 0)   Exit Sub errout:   MsgBox Err.Number & "::" & Err.Description

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

質問の表題がおかしい。 月指定の月末日の取得のもんだい。 何月を指定しないと、月末日は決らないだろう。 ーーー Sub test01() ym = InputBox("年月yyyymm") y = Mid(ym, 1, 4) m = Mid(ym, 5, 2) lmd = Day(DateSerial(y, m + 1, 1) - 1) MsgBox lmd End Sub ーー 上記は常套手段で、目新しい物ではない。 エクセル日付シリアル値の有難いところ。

関連するQ&A

  • ExcelのAutoFilter への変数の使用がうまく行きません!

    ExcelのAutoFilter への変数の使用がうまく行きません! Windows XP Home Edition SP3 Office XP Personal 2002 Excel 2002 下記の NNN に 「 InputBox に 入力した整数 」 を変数で使用したいのですが、 どのようにすればよろしいでしょうか? 何卒、ご教示のほどをお願い致します。 Sub TEST1() Dim NNN As Integer Dim msg As String Dim i As Integer Application.ScreenUpdating = False   msg = "【整数】 を入力してください。"   NNN = InputBox(msg)   If ActiveSheet.AutoFilterMode Then    With ActiveSheet.AutoFilter    For i = 88 To 90    .Range.Rows(1).Cells(i).AutoFilter Field:=i, Criteria1:="<=NNN" '←この NNN です    Next i   End With   End If Application.ScreenUpdating = True End Sub

  • エクセルのマクロ

    勉強を始めたばかりで処理を繰り返す項目をいろいろ調べたのですがうまくいきません。教えてください。 オートフィルタで3列目を”東京 ”という文字でを抽出したあとである処理をし、その後同じ列で今度は”神奈川 ”を選び同様の処理をする。また今度は 次は"千葉”と繰り返したいのです。 マクロを見てみると Selection.AutoFilter Field:=3, Criteria1:="1"    何らかの処理 Selection.AutoFilter Field:=3, Criteria1:="2"    何らかの処理 Selection.AutoFilter Field:=3, Criteria1:="3"    何らかの処理 となっています。こうなると必要な数だけ これをコピーしないといけないので ループのようなもので下記の■の部分の 数字を1.2.3.~と処理を繰り返す毎に 増やして生きたいのです。 そしてリストの最後にきたらおしまいにしたいのですが・・・・。FOR NEXT とか DO LOOP とか 試しましたが、私の幼稚な知識ではうまく動いてくれませんでした。すみませんがよろしくお願いします。 Selection.AutoFilter Field:=3, Criteria1:="■" 処理

  • エクセルの変数について

    お世話になります。 下のマクロについてどうしてもわからないので教えてください。 開始日、最終日をinputboxにて日付を入れてオートフィルターで結果をだしたいのですが、どうしてもオートフィルター内のmyfirstdateとmylastdateに変数の値が入りません。 どこが間違っていますでしょうか? お願いします。 Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2006/12/7 ユーザー名 : AAAAAA ' Dim myfirstdate As Date Dim mylastdate As Date myfirstdate = InputBox("開始日を入力してください。" & vbCrLf & "例)12/1") mylastdate = InputBox("最終日を入力してください。" & vbCrLf & "例)12/31") Selection.AutoFilter Field:=2, Criteria1:=">=myfirstdate", Operator:=xlAnd, _ Criteria2:="<=mylastdate" ' End Sub

  • エクセルVBAのAutoFilterについて

    はじめまして。今回初めてエクセルVBAに挑戦していますが、行き詰まってしまいました。 エクセルで顧客管理データベースを作っています。シートの一番上の行に、ID、顧客名、依頼内容、依頼日、処理終了日・・・・などデータベースでいう「フィールド名」を入力し、2行目以下に顧客データを打ち込む形です。 当社では週一回会議で、前の週の新規顧客名の一覧と前の週に処理終了した顧客名の一覧をリストにして配りますが、エクセルVBAを使ってそのリストを作るプログラムを作ろうと試みました。  まず、UserFormを用いて、抽出したい期間(何年何月何日から何年何月何日)をそれぞれTextBox1、TextBox2の値で所得します。そして、開始年月日をDateFromという変数に代入、終了年月日をDateToという変数に代入し、AutoFilterで検索して別シートにコピーするという流れです。  前置きが長くなりましたが、質問です。 1 この変数の定義、つまり DateFrom = UserForm1.TextBox1.value という文で所得しようと思いますが、うまくいきません。書式がおかしいのでしょうか? 2 AutoFilterの使い方を「新しいマクロの記録」を使って見てみると Selection.AutoFilter Field:=10 _ , Criteria1:=">=2004/4/27", Operator:=xlAnd _ , Criteria2:="<=2004/5/10" というかたちになるようですが、>=2004/4/27の部分を変数を使って指定するには、書式はどのようにしたらいいのでしょうか。このまま>=DateFromの形ではうまくいかないようです。

  • 「~以上、~以下」のオートフィルタのVBAについて

    こんばんは、オートフィルタについて2つ質問させてください! 1つ目は、10列目に入っている値で、20170901以上かつ20170931以下の値をオートフィルタで抽出しようと以下のVBAを入力しましたが、該当するデータがあるにも関わらず抽出ができませんでした(T_T)何か間違っているのでしょうか…?! Range("A1:K" & Cells(1).CurrentRegion.Rows.Count).AutoFilter Field:=10, Criteria1:=">=20170901" _ , Operator:=xlAnd, Criteria2:="<=20170931" 2つ目は、同様のデータでInputBoxを利用し、入力した数字をそのままオートフィルタの条件に反映しようとする以下のVBAを入力してみました。しかし、やはり記述の方法が違うのか該当するデータがあるにも関わらず抽出は成功しませんでした・・・。 Dim 日付 As Date 日付 = InputBox("処理月を入力して下さい(例:201709)") Range("A1:K" & Cells(1).CurrentRegion.Rows.Count).AutoFilter Field:=10, Criteria1:=">= 日付 & 01" _ , Operator:=xlAnd, Criteria2:="<= 日付 & 31 " どなたかご助力いただけるととても助かります、どうぞよろしくお願いいたします!m(_ _)m

  • 違う列で、2つの抽出条件を満たすには

    OSはXPで、Excel2003を使用しています。 下記のマクロですと、Key列に任意の文字があって、Key2列に任意の文字が入っていなくても抽出されますが、 その逆、Key列に任意の文字がなくて、Key2列に任意の文字が入っている場合は抽出されません。 前者の場合も、後者の場合も抽出される様にするには、どの様にすれば良いか教えて下さい。 ***** Sub test() Dim Key As String Dim Key2 As String Key = Application.InputBox("抽出列の番号を入れて下さい") Key2 = Application.InputBox("抽出列の番号を入れて下さい") Worksheets.add After:=ActiveSheet, Count:=1 ActiveSheet.Name = "BBBB" Sheets("AAAA").Activate Range("A1").Select Selection.AutoFilter Selection.AutoFilter Field:=Key, Criteria1:="*" Selection.AutoFilter Field:=Key2, Criteria1:="*" Selection.CurrentRegion.Copy Sheets("BBBB").Activate Range("A1").PasteSpecial Paste:=xlAll Selection.CurrentRegion.Select End Sub ******* 説明不足な所がございましたら追記致します。 何卒よろしくお願い致します。

  • オートフィルタ マクロについて

    質問です。 オートフィルタで複数列を1つの条件で抽出したいのですが、教えてください。 たとえばA列が納品書No.・B列が受注No.・C列が商品No.なのですがすべて数字の為、出来ればInBox一回でA-C列を検索してほしいです。 指定納品書NO 受注NO 元品番 21812 3252608 77 21880 3307989 32B 22053 3389769 95414A 22050 3389770 67312H 22052 3389771 67312H 22050 3389773 67118H 以下の様なマクロを作ってみましたが、 A-C列全てに一致しないと抽出しないようです。 どなたかご教授いただけないでしょうか? マクロ '条件1 の設定 Dim 検索NO As Variant '抽出キーの入力指示 検索NO = InputBox("検索NOを入力てください。") 'キャンセルした場合の処理 If 検索NO = Empty Then Exit Sub End If 'オートフィルタがかかっていなかったらかける 'かかっていたら念の為一度解除し再設定 If ActiveSheet.AutoFilterMode = False Then Range("A2:O2").Select Selection.AutoFilter Else Selection.AutoFilter Range("A2:O2").Select Selection.AutoFilter End If Selection.AutoFilter Field:=1, _ Criteria1:=">=" & 検索NO, Operator:=xlAnd, Criteria2:=" " & 検索NO Selection.AutoFilter Field:=2, _ Criteria1:=">=" & 検索NO2, Operator:=xlAnd, Criteria2:=" " & 検索NO2 Selection.AutoFilter Field:=3, _ Criteria1:=">=" & 検索NO3, Operator:=xlAnd, Criteria2:=" " & 検索NO3 AutoFilterMode = False Application.ScreenUpdating = True End Sub よろしくお願いいたします。

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

  • Excelのフィルタ条件の付け方(VBA使用)

    ご存知の方、教えてください。 フィルタの条件を、マクロ実行時に入力できる仕組みを作成したいと思うのですが、うまくいきません。 あるリストから、「売上日」フィールドを使って「○月○日」~「○月○日まで」という抽出を試みました。 inputboxを使えばいいような気がしたので、最初に hiduke1、hiduke2を変数指定しておき、 hiduke1 = inputbox("抽出開始日を入力してください) としました。 そして、フィルタの抽出条件に criteria1 := "<=hiduke1" と指定したところ、抽出結果が0件でした・・・。 さらに criteria1 := <= hiduke1 とダブルクォーテーションを取ったところ、「コンパイルエラー」が出てしまいました。 ・抽出条件に変数を使用したい。 ・criteria1,criteria2プロパティでは不等号をどのようにあらわすのか。 以上2点、よろしくお願いします。

  • Excelのマクロについて

    sheetのB列からInputboxで入力した値を含むセルを1~複数個選択してフィルターする場合、どのようにすれば良いのでしょうか 一応自力で考えてみた結果、こんな感じになったのですが、上手くいきませんでした Range(B11).Select Myc=Inputbox(番号を半角数字で入力) Range("B11:B100").AutoFilter Field:=2, Criteria:=Myc 初心者なので、かなり雑な上に間違いだらけかもしれませんが、そこは勘弁して下さい よろしくお願いします

専門家に質問してみよう