エクセルVBAでのAutoFilterの使用方法と変数の定義について

このQ&Aのポイント
  • エクセルVBAのAutoFilterを使って特定の期間のデータを抽出し、別シートにコピーする方法を知りたいです。
  • UserFormのTextBoxを使って変数を定義しようとしていますが、うまくいきません。正しい書式は何ですか?
  • AutoFilterの記録したマクロで日付を指定する部分を変数で指定する方法について教えてください。
回答を見る
  • ベストアンサー

エクセル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の形ではうまくいかないようです。

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

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

1.VBE画面で、挿入-ユーザーフォーム 2.ユーザーフォーム上にテキストボックスを2個貼りつける。コマンドボタンを1個貼りつける(フィルタ実行起動用)。 3.コマンドボタンをダブルクリック。 Private Sub CommandButton1_Click() End Sub が出る。 4.コードを下記のようにする。 Private Sub CommandButton1_Click() datefrom = UserForm1.TextBox1.Text dateto = UserForm1.TextBox2.Text ' MsgBox datefrom ' MsgBox dateto '---- Range("a1:c12").Select Selection.AutoFilter Field:=1 _ , Criteria1:=">" & datefrom, Operator:=xlAnd _ , Criteria2:="<" & dateto End Sub 5.実行-SUB/ユーザーフォームの実行をクリック。 6.始期年月を入力。2004/5/14のように。TABキーで 次のテキストボックスへ移動 7.終期年月を入力。2004/5/20のように。 8.コマンドボタンをクリック。 9.フィルタが実行されて、ワークシートに 日時 氏名 コード 2004/5/14 山村 k 2004/5/16 植山 d 2004/5/17 下山 r 2004/5/18 中山 f 2004/5/19 山中 g 2004/5/20 山内 h -------- テスト用元データはA1:C12に 日時 氏名 コード 2004/4/23 山田 a 2004/4/30 山下 b 2004/5/13 山上 c 2004/5/14 山村 k 2004/5/16 植山 d 2004/5/17 下山 r 2004/5/18 中山 f 2004/5/19 山中 g 2004/5/20 山内 h 2004/5/21 外山 I 2004/5/22 大山 j でした。

Poulenc
質問者

お礼

初歩的な質問に、丁寧な回答をありがとうございました。TextBoxからの所得は"Value"ではなく、"Text"で行えばいいんですね。ありがとうございました。

関連するQ&A

  • {VBA}Autofilterの設定について

    Autofilterでの抽出方法についてご教示ください。初めてVBAを使って顧客シートを作成しようとしているのですが、躓いてしまいました。お力をお貸しください。 以下のようなシートがあり、返却日の条件A1セル:”2011/6/20”以降としてフィルタリングをしようとしています。VBAでCriteria:=">"&Range("A1")としているのですが、フィルタリングされません。 どのように書き換えれば、宜しいかご教示ください。 2011/6/20 契約日   名前 金額   返却日 2011/6/1   AA ○○  2011/7/1 2011/6/18  BB ○○○ 2011/6/20 宜しくお願い申し上げます。

  • 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日で終わる月もありますよね。 どんな月の範囲指定をしても、ちゃんと抽出できるようにするにはどうしたらいいでしょうか? 諸先輩方、どうぞよろしくお願いします。

  • VBAでオートフィルタを使った抽出がうまくいきませんのでどなたか教えて

    VBAでオートフィルタを使った抽出がうまくいきませんのでどなたか教えてください。 A列、C列に日付が入っていて、A列は空白以外のセルを表示し、かつC列は、開始日、終了日で抽出したいのですが、うまくいきません。 With Worksheets("sheet").Activate 開始日 = ">=" & TextBox1.Text 終了日 = "<=" & TextBox2.Text .Range("A1:N200").AutoFilter Field:=1, Criteria1:="<>" .Range("A1:N200").AutoFilter Field:=3, _ Criteria1:=開始日, Operator:=xlAnd, _ Criteria2:=終了日

  • エクセルVBA、年齢計算について質問です

    失礼いたします、生年月日、基準日をテキストボックスに入力し、年齢を算出するマクロを作成してるのですが質問です。 以下のようなマクロを組んでいるのですが。 Dim 生年月日 As String Dim 開始日付 As String Dim 年齢 As String 生年月日 = "H" + UserForm1.TextBox1.Value + "/" + UserForm1.TextBox2.Value + "/" + UserForm1.TextBox3.Value 年齢基準日 = "H" + UserForm4.TextBox1.Value + "/" + UserForm1.TextBox5.Value + "/" + UserForm1.TextBox6.Value 年齢 = Application.Evaluate("=datedif(""" & Format(生年月日, "yyyy/mm/dd") _ & """,""" & Format(年齢基準日, "yyyy/mm/dd") & """,""y"")") 上記のようにそれぞれH”年”/”月”/”日”という形で取得しています。 この場合、適正な値が入力されると上手くいきますが、日付として成立しない値(例えば月に80など)を入力した場合にエラーが発生します。 エラーが発生した場合にエラー処理(例としてMsgBox+Goto処理)をしたいのですがどのようなコードを記入すればいいでしょうか?

  • エクセルVBA リストビュー選択項目を別フォームへ

    皆さんこんにちは。 エクセル2013使用のVBA初心者です。 エクセルVBAのリストビューについて教えてください。 Userform1上にListview1とコマンドボタン1があります。 Listview1はSheet1を呼び込んだものが反映されており 左から駅名・顧客名・店舗名が記載されています。 Listview1でどれかを選択してコマンドボタン1を押したら Listview1で選択した項目の 駅名をUserform2のTextbox1に 顧客名を〃のTextbox2に 店舗名を〃のTextbox3に反映したいのですが リストビューの情報がネット上にも少なく コードをどのように書いたら良いか見当がつきません。 Userform2のPrivate Sub UserForm_Initialize()に TextBox1 = UserForm1.ListView1.FocusedItem.SubItems(0).Text を記載してみたものの、コンパイルエラーが出てしまいます。 (スイマセン、あまり意味が分かっていないで書きました) リストビューで選択した項目を別のユーザーフォームに 反映させるにはどうしたら良いでしょうか? どなたかヒントをいただけると助かります。

  • 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

  • エクセルVBAで指定先のセルの値でデータ抽出

    エクセルVBAで作った売上帳シートのF2セルに顧客名を入力するようにしています。 その入力した顧客名のみの内容をオートフィルで抽出させるようにしたいのですが、うまくいきません。 Sub 顧客抽出() Range("B4").AutoFilter Field:=2, Criteria1:="山田太郎" End Sub でマクロを実行させるとできるのですが、『山田太郎』の部分は、F2セルに入力した顧客名で実行させたいのです。 どのようにすればできるのでしょうか?

  • UserForm自体を変数でループ化したいのですが・・

    質問をさせてください。 USERFORMを使い、処理を行っているのですが USERFORM自体を変数とし、それを元にループで 処理をしたいと思っています。 こんな感じで変数を!!→UserForm(t) 例えば下記のような処理を・・ Private Sub UserForm_Activate() Do While t <= 10 And Cells(t, 1) <> "" Select Case t Case 1 To 3 'UserForm1処理 With UserForm1 UserForm1の処理 (リストやテキストボックスにエクセルシートの値を代入させています。) ※こんな感じで。。 .Controls("textbox" & 1) = Cells(t, 1).Value End With Case 4 To 6 'UserForm2処理 With UserForm2 UserForm2の処理 (リストやテキストボックスにエクセルシートの値を代入させています。) ※こんな感じで。。 .Controls("textbox" & 1) = Cells(t, 1).Value End With Case 7 To 10 'UserForm3処理 With UserForm3 UserForm3の処理 (リストやテキストボックスにエクセルシートの値を代入させています。) ※こんな感じで。。 .Controls("textbox" & 1) = Cells(t, 1).Value End With End Select Loop end sub このような処理が一つのUserFormを開くと全てのUserForm間での処理がズラーッとあるわけですが処理内容は 変わりませんのでUserForm自体を変数で対応すれば書式もスッキリしてみやすく もし何かトラブルが生じてもすぐに対応できることから質問をさせていただきました。 よろしくお願いいたします。

  • AutoFilterプロパティについて

    Excel VBAのAutoFilterプロパティについて質問です。 (Excelのバージョンは2010です。) ■背景 ・マクロ実行時、オートフィルタを解除し、終了直前に実行前の抽出状態を復元するマクロを組んでいます。 ・実行前の抽出情報を取得するために、ワークシートのAutoFilterプロパティから必要な情報を事前に配列に格納しています。 (具体的には、Criteria1、Operator、Criteria2の3つのプロパティをn×3次元の配列に格納) ■問題 ・以下の通り、ワークシートにデータが入力されていたとします。   A列  1 10  2 11  3 11  4 11  5 12 ・通常、「トップテン」のオートフィルタで「上位3項目」などのように指定する場合は、以下のプロパティをAutoFilterメソッドに渡します。(細かい記述は割愛)   Criteria1:= 3   Operator:= xlTop10Items  ※Excelのオートフィルタの仕様上、上述の例で言えば、A1~A4が表示されます。 ・このような絞り込みがなされたフィルタ情報を取得しようとした場合、以下の様にAutoFilterプロパティに格納されているため、このまま配列に受け渡した上で、再度オートフィルタを復元しようとしてもエラーとなってしまいます。   Criteria1:= ">=11"   Operator:= xlTop10Items  ※Operatorに敢えて「0」を受け渡し、「11以上」と指定させるようフィルタを復元することで、    結果的な表示はA1~A4が表示された状態に戻せるのですが、    本来であれば「上位3項目」というフィルタを復元させたいです。 ・上記の例の場合、「上位2項目」「上位3項目」「上位4項目」いずれの絞り込みをしたとしても、AutoFilterプロパティには「11以上」という状態しか保持していないため、「上位何項目で絞り込んだか」をRANK関数等から逆算することもできません。 ■質問 ・「トップテン」のオートフィルタで絞り込みをした場合、「上位何項目で絞り込んだか」を取得するようなプロパティ、または方法(多少無理矢理でも構いません)をご存知でしたら、ご教示頂ければ幸いです。 以上、宜しくお願い致します。

  • VBA Excelのyy/mmm/ddをUserFormに入力

    また、質問させていただきます。 今、UserFormが開くと【TextBox1】【TextBox2】【TextBox3】に現在の日付が入るようになっています。   【TextBox1】(年 08)   【TextBox2】(月 03)   【TextBox3】(日 03) UserFormには、【CommandButton1】(登録)と【CommandButton2】(呼び出し)があります。 【CommandButton1】(登録)をクリックするとExcelに '08/03/03と表示されます。 ある日、データを間違えて入力してしまい【CommandButton2】(呼び出し)をクリックし修正する時にExcelに登録している日を【TextBox1】(年 08)【TextBox2】(月 03)【TextBox3】(日 03)と自動的に入力することは出来るでしょうか? 宜しくお願いいたします。

専門家に質問してみよう