プロが教えるわが家の防犯対策術!

いつもお世話になっております。
エクセルVBAのChangeイベントについてご教授いただきたいと思います。
VBA初心者です。


【やりたいこと】
日付の入った一覧表があります。
これを、A1セルに入力した月の数字で自動で抽出できるようにしたいのです。
(A1に「11」月と入力すると、一覧表の11月分が自動で抽出)


抽出したい月は何度も変わるので、A1セルの入力値が変更される度に動かしたいのですが、
一回目は実行できても二回目以降が動きません。
考え方が違うのか、コードが足りないのかも分からない状態です。

何とぞご教授のほど、お願いいたします。



Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1")) Is Nothing Then
Exit Sub
Else
Range("A1").Select
Selection.AutoFilter field:=1, Criteria1:=Range("A1").Value, Operator:=xlAnd
End If
End Sub

質問者からの補足コメント

  • GooUserラック様

    説明不足ですみません。
    一覧表の月はA列に表記されています。

      補足日時:2017/11/19 01:45

A 回答 (2件)

もしかしたら以下のような事ですか?


--------------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "A1" Then
Cells.AutoFilter Field:=1, Criteria1:=Target.Text
End If
End Sub
--------------------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

出来ました!

早速のご回答、ありがとうございます!
本当に助かりました。
また分からないことがありましたらご教授いただけると嬉しいです。

お礼日時:2017/11/19 11:48

ちなみに月はどの列に記入されているのでしょうか?

    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QExcelオートフィルタで複数のセルの値を参照して抽出したい

VBA初心者ですみません

フィルタ内D列にA社、B社、C社・・・と入力してあり、フィルタ外でA社(BA3)、B社(BA4)、C社(BA5)とある場合で、フィルタ外の値(BA3~5)を参照して表示する場合で分からなくて困っています

B社のみを表示する場合は
Range("A1").AutoFilter field:=4, Criteria1:=Range("BA4").Value
これでいけました

ここからが壁になってまして
B社、C社を表示する場合は
Range("A1").AutoFilter field:=4, Criteria1:=Range("BA4:BA5").Value
なんて安易に考えてやってみたところ
B社を表示した直後C社を表示して終わる結果になってしまいました
B社とC社を同時表示してほしいのですが・・・。

そんなのも分からないならセル参照なんてしないでArrayで直接社名指定しろよと怒られそうですが
すでに入力してあるデータ整理の為、何か方法があれば教えて頂けると幸いです。

Aベストアンサー

こんにちは!

OR条件が三つと判っているのであれば・・・

Sub Sample1()
Dim myAry As Variant
myAry = Array(Range("BA3"), Range("BA4"), Range("BA5"))
Range("A1").AutoFilter field:=4, Criteria1:=myAry, Operator:=xlFilterValues
End Sub

くらいで大丈夫だと思います。

OR条件の数が限定されない場合は

Sub Sample2()
Dim i As Long, myStr As String, myAry As Variant
For i = 3 To 5 '←ここでフィルタ条件数を決める//
myStr = myStr & Cells(i, "BA") & ","
Next i
myAry = Array(Split(Left(myStr, Len(myStr) - 1), ","))
Range("A1").AutoFilter field:=4, Criteria1:=myAry, Operator:=xlFilterValues
End Sub

といった感じで対応できると思います。m(_ _)m

こんにちは!

OR条件が三つと判っているのであれば・・・

Sub Sample1()
Dim myAry As Variant
myAry = Array(Range("BA3"), Range("BA4"), Range("BA5"))
Range("A1").AutoFilter field:=4, Criteria1:=myAry, Operator:=xlFilterValues
End Sub

くらいで大丈夫だと思います。

OR条件の数が限定されない場合は

Sub Sample2()
Dim i As Long, myStr As String, myAry As Variant
For i = 3 To 5 '←ここでフィルタ条件数を決める//
myStr = myStr & Cells(i...続きを読む

Qexcelオートフィルタの検索条件をセルに入力したい

以下のようなexcelのリストがあるとします。

    A       B    C~
1 佐藤・鈴木  Aタイプ
2 田中・山田  Bタイプ
3  佐藤     Aタイプ
4  田中     Cタイプ
5 山田・鈴木  Cタイプ

A列の"田"が含まれる行を抽出したい場合
オートフィルタをかけ、オプションの抽出条件の指定で
"田"を含む、で検索すれば良い、というのはわかります。
ですが、この動作をもうちょっと簡単にできないかと思っています。
具体的には、以下のようにセルに入力して検索・抽出するとはできないでしょうか。

    A       B    C~
1   田


4   A       B    C~
6 田中・山田  Bタイプ
8  田中     Cタイプ
9 山田・鈴木  Cタイプ
(1、2行目=検索用 3行目=空き 4行目以降=リスト)

過去の質問で、同じようにセルに入力して抽出する方法を
聞いていた方がいらっしゃったので参考にしようと思ったのですが
方法がVBAを使ったもので、VBAの知識がまったく無いために
さっぱり理解することができませんでした。

何か良い方法がありましたら教えていただけないでしょうか。

以下のようなexcelのリストがあるとします。

    A       B    C~
1 佐藤・鈴木  Aタイプ
2 田中・山田  Bタイプ
3  佐藤     Aタイプ
4  田中     Cタイプ
5 山田・鈴木  Cタイプ

A列の"田"が含まれる行を抽出したい場合
オートフィルタをかけ、オプションの抽出条件の指定で
"田"を含む、で検索すれば良い、というのはわかります。
ですが、この動作をもうちょっと簡単にできないかと思っています。
具体的には、以下のようにセルに入力し...続きを読む

Aベストアンサー

関数でもできるのでご参考に。(imogasi方式)
データ例 A1:B6に
AB
佐藤・鈴木Aタイプ
田中・山田Bタイプ
佐藤Aタイプ
田中Cタイプ
山田・鈴木Cタイプ
E1に「田」の字を入れておく。
C2に
=IF(ISERROR(FIND($E$1,A2)),"",MAX($C$1:C1)+1)
C3:C6に式を複写する。C2:C6は
空白
1
空白
2
3
E3に
=INDEX($A$1:$B$6,MATCH(ROW()-2,$C$1:$C$6,0),COLUMN()-4)
と入れてF3に複写。
E3:F3を範囲指定し、F3に+ハンドルを出しF3まで引っ張る。
結果
田中・山田Bタイプ
田中Cタイプ
山田・鈴木Cタイプ
C列、E列、F列は別の列へ変えられる。別シートにも替えられる。
ただし式のセル指定・範囲指定、マイナスする値 を変えなければなりません。

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

QExcelマクロ:オートフィルタ3つ以上の条件

添付の画像を使って質問させて頂きます。
バージョンは2010です。

お客様名 A,B,C,D,E 以外のお客様名を抽出するようにマクロを組みたいのですが

ActiveSheet.Range("$A$1:$D$15").AutoFilter Field:=2, Criteria1:= _
"<"&">&"A", Operator:=xlOr, Criteria2:="<"&">&"B""

の様に考えましたが一つの列に3つ以上の条件では対応できないことが分かりました。

添付の画像は実際使用している表を簡素化しているため
お客様名が少ないですが、実際は多様なお客様名があります。

その中で特定した5社以外のお客様の情報を抽出したいです。

宜しくお願い致します。

Aベストアンサー

>特定した5社以外のお客様の情報を抽出したい

sub macro1()
 dim a
 a = application.transpose(range("B2:B" & range("B65536").end(xlup).row).value)

 a = filter(a, "A", false)
 a = filter(a, "B", false)
 a = filter(a, "C", false)
 a = filter(a, "D", false)
 a = filter(a, "E", false)

 range("A:D").autofilter field:=2, criteria1:=a, operator:=xlfiltervalues
end sub

とかでいいです。

Q[エクセル] セルが空だったら一つ上のセルを自動入力する

こちらには困ったときにいつもお世話になっております。
今回もよろしくお願いいたします。

EXCEL2002にて、セルが空だったら一つ上のセルを自動入力するようにしたいのです。状況といたしましては、ある個人情報管理アプリケーションが、吐き出すCSVファイルがあります。それが、困ったことに一人の人に複数の情報がある場合、個人情報ナンバーを省略します。わかりずらいと思いますので、以下の表をご覧ください。

個人情報ID 電話番号
0001     01-2345-1111
0002     01-2345-2222
        01-2345-2223
0003     01-2345-3333
        01-2345-3334
        01-2345-3335
        01-2345-3336
0004     01-2345-4444

以上のような表になります。そこで、「0002」の下の空のセルにも0002。「0003」の下の3つの空のセルすべてに0003を自動的に入力できるようにしたいのです。各々コピーしていけば何とか埋まるのですが、データ量が多くかなり時間がかかってしまいます。

解決方法をご存知の方がいらっしゃいましたら、お力添えの程、よろしくお願いいたします。

こちらには困ったときにいつもお世話になっております。
今回もよろしくお願いいたします。

EXCEL2002にて、セルが空だったら一つ上のセルを自動入力するようにしたいのです。状況といたしましては、ある個人情報管理アプリケーションが、吐き出すCSVファイルがあります。それが、困ったことに一人の人に複数の情報がある場合、個人情報ナンバーを省略します。わかりずらいと思いますので、以下の表をご覧ください。

個人情報ID 電話番号
0001     01-2345-1111
0002     01-2345-2222
...続きを読む

Aベストアンサー

こんにちは

・A列の対象範囲を選択
・編集 ジャンプ セルの選択 「空白セル」にチェック
・数式バーに =An(注) と入力後
 [Ctrl]を押したまま[Enter] で入力確定

セル行(n) はアクティブセルの直上セル行値です
 対象セル(空白セル)が選択された状態で1箇所だけ
 反転していないセルがアクティブセルです。
例えば以下の場合
 A4がアクティブセルになっている筈なので =A3 と
 なります。

   A       B
1 個人情報ID 電話番号
2 0001     01-2345-1111
3 0002     01-2345-2222
4         01-2345-2223
5 0003     01-2345-3333
6         01-2345-3334
7         01-2345-3335
8         01-2345-3336
9 0004     01-2345-4444

QエクセルVBAで5行目からオートフィルタモードに設定したいたい

抽出項目が5行目にあり、オートフィルタを5行目から表示させたいのですが、うまくいきません。
Macro1では項目が消えてしまい、▼が1行目に、Macro2では項目は残りますが、▼は同じく1行目になってしまいます。どうしたら5行目にオートシェイプの▼が配置できるでしょうか?
Sub Macro1()
Range("A5").Select
Selection.AutoFilter
End Sub

Sub Macro2()
Range("A5").AutoFilter
End Sub

Aベストアンサー

こんばんは。

通常は、これでよいのですが、
Sub Macro2()
Range("A5").AutoFilter
End Sub

つまり、Range("A5").CurrentRegion という同じ設定になるので、そこを含む、4角形の連続の範囲の頂点からが、AutoFilter に組み込まれます。通常は、フィルターモードに取り込り込みたくないデータは、間を空けると良いのですね。

もし、そういう状況なら、私なら、こう書きますが、こんな面倒なことしなくてもよいです。

Sub Macro3()
  ActiveSheet.AutoFilterMode = False
 With Range("A5").CurrentRegion
   .Rows(5).HorizontalAlignment = xlCenter '真ん中寄せ
   Range("A5", .Cells(.Count)).AutoFilter
 End With
End Sub


>でも項目が消えてしまっています。これを回避できますか?

ただ、別に、項目が消えたわけではありませんね。単に、文字(または数字)が右に行っているので、ドロップダウンボタンと重なり合っているだけです。上記のコードで参考にできるところがあったら、使ってみてください。

こんばんは。

通常は、これでよいのですが、
Sub Macro2()
Range("A5").AutoFilter
End Sub

つまり、Range("A5").CurrentRegion という同じ設定になるので、そこを含む、4角形の連続の範囲の頂点からが、AutoFilter に組み込まれます。通常は、フィルターモードに取り込り込みたくないデータは、間を空けると良いのですね。

もし、そういう状況なら、私なら、こう書きますが、こんな面倒なことしなくてもよいです。

Sub Macro3()
  ActiveSheet.AutoFilterMode = False
 With Range("A5").Cu...続きを読む

QEXCELマクロでワイルドカードを使ったオートフィルタ処理の方法がわからない

エクセルのマクロがうまく動かないので、教えてください。
あるセルにカーソルをおいて、そのセルの文字を含んだ文字で(ワイルドカードを使って)オートフィルタ処理をしたいのですが、
「構文エラー」となってしまいます。

Dim num As String

num = ActiveCell.Value

Sheets("リスト").Select
Columns("AN:AN").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="=*"&num&"*", Operator:=xlAnd
ActiveWindow.ScrollColumn = 2
Range("A1").Select

Criteria1:="=*"&num&"*"の部分で
「構文エラー」になっているようなのですが…
お分かりになる方教えてください。よろしくお願いします。

Aベストアンサー

こんにちは。

特に、そこ自体に問題ないというか、
VBAの特徴なのですが、「&」の前後に半角スペースが必要です。

"=*"&num&"*"
  ↓
"=*" & num & "*"

細かいことですが、この「*」アステリク を入れるというのは、対象も文字列ですから、数字が入れば、被検索対象列は、文字列でないといけないはずです。

Columns("AN:AN").Select

また、通常、このような選択をするというのは、飛び石になっている途中の空白も含むという意味になります。ただし、データ列の最後尾から下のセルは含まれません。

Range("AN1").CurrentRegion となります。特に、CurrentRegion がなくても動作的には同じです。

-------------------------------------------------

Dim num As String

num = ActiveCell.Value

Sheets("リスト").Select
'Columns("AN:AN").Select ←不要
Range("AN1").CurrentRegion.AutoFilter Field:=1, Criteria1:="=*" & num & "*", Operator:=xlAnd
'ActiveWindow.ScrollColumn = 2  ←不要
'Range("A1").Select  ←不要

-------------------------------------------------

こんにちは。

特に、そこ自体に問題ないというか、
VBAの特徴なのですが、「&」の前後に半角スペースが必要です。

"=*"&num&"*"
  ↓
"=*" & num & "*"

細かいことですが、この「*」アステリク を入れるというのは、対象も文字列ですから、数字が入れば、被検索対象列は、文字列でないといけないはずです。

Columns("AN:AN").Select

また、通常、このような選択をするというのは、飛び石になっている途中の空白も含むという意味になります。ただし、データ列の最後尾から下のセルは含まれませ...続きを読む

QVBAを利用しオートフィルタで日付抽出でエラー

会員管理表を作っています。
集計シートと入金管理シートがあり、入金管理シートに入金日を
入力させ集計シート上でオートフィルターを実行し、表示された
データだけを入金管理シートに抽出し印刷するというマクロを
作っています。

問題は、入金管理シートに"2007/4/27"と入力し、このセルを
Stringで宣言した変数に格納すると値が"2007/04/27"となります。
オートフィルタでこの変数を使用すると、当然2007/04/27で検索され
ますが、集計シートの日付は"2007/4/27"と表示されていてヒット
しません。月や日付の04や05の0が入らないように変数にセット
する方法はありますか?ちなみにどちらの書式設定は、日付で
yyyy/m/dを指定しています。教えてください。

集計シートはこんな感じです。入金日でフィルタをかけてます
 A    B   C    D
会員番号 会員名 入金日   入金額
0001   ぐうた 2007/4/27 1,000
0002   ぐうこ 2007/5/1  500

管理シートはこんな感じです。入力時には04と入力せず4と入力
しています。
【2007/4/27】入金データ
A     B   C
会員番号 会員名 入金額
0001   ぐうた 1,000

会員管理表を作っています。
集計シートと入金管理シートがあり、入金管理シートに入金日を
入力させ集計シート上でオートフィルターを実行し、表示された
データだけを入金管理シートに抽出し印刷するというマクロを
作っています。

問題は、入金管理シートに"2007/4/27"と入力し、このセルを
Stringで宣言した変数に格納すると値が"2007/04/27"となります。
オートフィルタでこの変数を使用すると、当然2007/04/27で検索され
ますが、集計シートの日付は"2007/4/27"と表示されていてヒット
しません...続きを読む

Aベストアンサー

こんにちは。#1 のWendy02です。

こちらは、以下のようにすれば通るのですが、どうも、バグっぽい感じがまだ残っていますね。
私は、Excel 2003 + XP で行っているから出来るともいえます。

>"4/27/2007"となってしまいました。
と見えるものは、関係ありません。それは、Date型のリテラル値です。もちろん、文字で比較するわけではありません。しかし、最初に書いたように、Excelのバージョンで反応が変わってくるはずです。

>オートフィルタでヒットする日付は”2007/4/27”だけで”2007/04/27”では返ってきません。オートフィルタではシリアル値で検索していないのでしょうか?

ワークシートからは、Enter キーを入れることによって、代入値の型の自動変換がありますが、ワークシートでは型の自動変換はありません。

それは、ともかく、以下でうまく行かないのでしたら、Excelのバージョンを示してくださらないと、オートフィルタにはバージョンによって、まったく出来ないバグがあるのですから、分からないのです。

書式の一致は関係ありません。

Sub testSort()
Dim nyu_day As Date
nyu_day = Cells(3, "C").Value
Selection.AutoFilter Field:=8, Criteria1:=nyu_day, Operator:=xlAnd
End Sub

なお、うまく行かない簡単な対処法としては、隠し列を作って、そこにシリアル値に変換した数値をいれておき、次に、セルから取った検索値を、Long型の変数に入れて、検索するという方法があります。

こんにちは。#1 のWendy02です。

こちらは、以下のようにすれば通るのですが、どうも、バグっぽい感じがまだ残っていますね。
私は、Excel 2003 + XP で行っているから出来るともいえます。

>"4/27/2007"となってしまいました。
と見えるものは、関係ありません。それは、Date型のリテラル値です。もちろん、文字で比較するわけではありません。しかし、最初に書いたように、Excelのバージョンで反応が変わってくるはずです。

>オートフィルタでヒットする日付は”2007/4/27”だけで”2007/04/27”では返っ...続きを読む

QExcelVBA:オートフィルタをかけたシート上でのセル内の値参照について

オートフィルタをかけた状態で、セル内の値を参照しても、オートフィルタがかかってないセル(隠れているセル)の値を参照してしまいます。

例えば、ある条件でオートフィルタをかけて、行が1,2、6,7、8・・・となって、3,4,5行が非表示になっているのにもかかわらず、

Range("A1").Offset(0, 2).Value

を参照すると、6行目の値ではなくて、非表示の3行目の値を拾ってきてしまいます。

このように、オートフィルタをかけたシート上で値を参照する際に、非表示行を無視して行数取りし、値を参照したいのですが、何か方法はありますでしょうか?

上の例ですと、6行目のセルを3行目として扱いたいわけです。

どなたか、ご教授くださいませ。
よろしくお願い致します。

Aベストアンサー

例データ
コード計数
a11
b44
c56
a23
s12
a25
d72
フィルタでaを選択
そして
ーー
Sub test01()
Dim r As Range
d = Range("a65536").End(xlUp).Row
Range("A2:A" & d).SpecialCells(xlCellTypeVisible).Select
For Each cl In Selection
MsgBox cl.Offset(0, 1)
Next
End Sub
を実行すると
11
23
25
がMsgboxで順次表示される。
ーー
十分確信は無いが、フィルタと関連付けて質問者は質問しているが
本質は、フィルター>(行の)Visibleプロパティをエクセルがいじくる、という仕組みのようなので、上記のようなコードを考え付いたわけ。
適当にCTRLを押しつつ、行を選択し、手動で書式ー行ー表示しない
にして、上記コードを実行しても似たことになる。
ーー
FilterModeなんてあるが、まず使わなくて良いと思う。
http://msdn.microsoft.com/ja-jp/library/microsoft.office.tools.excel.worksheet.filtermode(VS.80).aspx

例データ
コード計数
a11
b44
c56
a23
s12
a25
d72
フィルタでaを選択
そして
ーー
Sub test01()
Dim r As Range
d = Range("a65536").End(xlUp).Row
Range("A2:A" & d).SpecialCells(xlCellTypeVisible).Select
For Each cl In Selection
MsgBox cl.Offset(0, 1)
Next
End Sub
を実行すると
11
23
25
がMsgboxで順次表示される。
ーー
十分確信は無いが、フィルタと関連付けて質問者は質問しているが
本質は、フィルター>(行の)Visibleプロパティをエクセルがいじくる、と...続きを読む

Qオートフィルタで3つ以上の条件を検索する事はできる

タイトルの件、質問します。

下記のデータがあるとします。この内、オートフィルタで
●世田谷区 ●葛飾区 ●港区
の3つの区の情報のみ表示する事はできますか??
2つの情報なら選択できるようになっていますが、3つ以上はできません。

【データ】
東京都世田谷区A町
東京都葛飾区 B町
東京都港区 c町
東京都港区 d町
東京都新宿区B町
東京都板橋区B町
東京都墨田区B町

ご存知の方、いらっしゃいましたら、宜しくお願いします。

Aベストアンサー

オートフィルタでは出来ないが、フィルタオプションの設定で別シートに抽出可能ですが如何でしょうか。
検索条件欄で1行目にデータの見出し名、2行目に*世田谷*、3行目に*葛飾区*、4行目に*港区*とすれば抽出できます。
元データに見出し行がなければ、追加定義して下さい。

操作説明は添付のURLを参照下さい。

参考URL:http://www.eurus.dti.ne.jp/~yoneyama/Excel/filter3.htm


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング