出産前後の痔にはご注意!

Sub データ抽出()
Selection.AutoFilter Field:=9, Criteria1:=">=2009/9/1", Operator:=xlAnd, _
Criteria2:="<=2009/9/30"
End Sub

上記はI列の2009年9/1~9/30のデータをオートフィルタで抽出するという単純なマクロの自動記録ですが、例えば今日上記のマクロを実行すると2009年10/1~10/31、来月上記のマクロを実行すると2009年11/1~11/30、来年の1月上記のマクロを実行すると2010年1/1~1/31というように常に当月分のデーターを抽出したいのです。アドバイスをお願いします。

A 回答 (2件)

次のような式ではどうでしょう。


Sub データ抽出()
Selection.AutoFilter Field:=9, Criteria1:=">=" & DateSerial(Year(Date), Month(Date), 1), Operator:=xlAnd, _
Criteria2:="<=" & DateSerial(Year(Date), Month(Date) + 1, 0)
End Sub
    • good
    • 0
この回答へのお礼

出来ました。ありがとうごさいます。

お礼日時:2009/10/26 17:50

FirstDate = Format(Date, "yy/mm/1")


LastDate = DateValue(Year(Date) & "/" & Month(Date) + 1 & "/1") - 1

この回答への補足

素人なんですいませんが、上記のマクロの自動記録にこのコードをどう組み入れたらいいのわかりません。

補足日時:2009/10/26 17:31
    • good
    • 0

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

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

このQ&Aを見た人が検索しているワード

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

Q1年分のデータから特定の月分のデータを抽出→表示

エクセル初心者です。
仕事で機材の貸し出しをしておりまして、
それを受付、まとめ、集計しているエクセルの表があります。

受付日、貸し出し機材、貸し出し先、使用時間を日毎にベタ打ちしたものがあり、
それが1年分、エクセルの表で1シートにまとめています。

その中から、月ごとのデータをシート2に抽出したい(それを元に、月別のまとめをするので)のですが、
どうすればいいでしょうか。
理想は、4/1と入力したら、4/1~4/30までのデータが表示される、
というようなものなのですが…。

そういうものになると、やはりマクロなどになりますでしょうか?
オートフィルではなく、関数で表示させたいです。

ただ表示させるだけでいいのですが…。

初心者なのに高望みをして申し訳ないのですが、
作れと上司から命令されています…。
どうかお力をお貸しください。よろしくお願いいたします。

Aベストアンサー

こんばんは!
一例です。

↓の画像で説明します。
左側が元データでSheet1・右側が表示させるデータでSheet2とします。
Sheet2のA1セルに検索したい月の数値を入力すると4行目以降に表示させるようにしてみました。

Sheet1に作業用の列を1列設けます。
作業列E2セルに
=IF(OR(Sheet2!A$1="",MONTH(A2)<>Sheet2!A$1),"",ROW())
という数式を入れこれ以上データはない!というくらいしっかり下へオートフィルでコピーしておきます。

そしてSheet2のA4セルに
=IF(COUNT(Sheet1!$E:$E)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!$E:$E,ROW(A1))))
という数式を入れD4セルまで右にコピー!
そして
A4セルの表示形式は「日付」に、
D4セルの表示形式は「時刻」(←本来であればユーザー定義から [h]:mm としておいた方が良いと思います9
最後にA4~D4セルを範囲指定 → D4セルのフィルハンドルで下へコピーすると
画像のような感じになります。m(_ _)m

こんばんは!
一例です。

↓の画像で説明します。
左側が元データでSheet1・右側が表示させるデータでSheet2とします。
Sheet2のA1セルに検索したい月の数値を入力すると4行目以降に表示させるようにしてみました。

Sheet1に作業用の列を1列設けます。
作業列E2セルに
=IF(OR(Sheet2!A$1="",MONTH(A2)<>Sheet2!A$1),"",ROW())
という数式を入れこれ以上データはない!というくらいしっかり下へオートフィルでコピーしておきます。

そしてSheet2のA4セルに
=IF(COUNT(Sheet1!$E:$E)<ROW(A1),"",INDEX(Sheet1!A:A,...続きを読む

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QExcelで日別に入力されたデータを月別に集計するにはどうしたらいいのでしょうか。

Excelで月別の集計をしたいのですが
例えば
  日付    数量
10月25日  200
10月27日  150
10月30日  120
11月 1日  200
11月 3日  150
のように、日付が飛び飛びで連続していなくい日々の数量を、上の行から順番に入力していった場合に(月が替わる行が決まっていない)月別の集計を取る方法はないでしょうか。


 

Aベストアンサー

どのように集計する月を指定するのかが書かれていませんが、例えば11月分の合計を出したいなら

1)11月までの合計から10月までの合計を引く方法
 =SUMIF(A:A,"<=11/30",B:B)-SUMIF(A:A,"<=10/31",B:B)

2)月が「11」のB列を合計する方法
 =SUMPRODUCT((MONTH(A2:A100)=11)*(B2:B100))

なども考えられます。

でもエクセルなら一番オーソドックスな方法はピボットテーブルでしょう。C列に
 =TEXT(A1,"YYYY/MM")
で「2008/11」のような文字列を生成しておいてピボットテーブルで集計すれば、シート上にある全ての月の合計が一発で求められます。
ピボットテーブルの使い方はGoogleなどで検索したらたくさん見つかります
http://www.viplt.ne.jp/tomy/pibot.html

QVBAで先月、先々月を求める方法

Excel マクロで 先月、先々月を求め

「3月」「4月」(今月は5月)

と表示させたいのですが、どのようにして
求めたらよいのでしょうか?

Aベストアンサー

Sub test01()
sg = DateSerial(Year(Date), Month(Date), 0)
ssg = DateSerial(Year(Date), Month(Date) - 1, 0)
MsgBox "先月は" & Month(sg) & "月、先々月は" & Month(ssg) & "月"
End Sub

では?

Q2つのシート間での重複データのチェック

Excelについて教えてください。
以下の2つのシートがあります。

Sheet1
すずき 03-0000-0000
やまだ 03-1111-1111
たなか 03-2222-2222

Sheet2
03-1111-1111
03-4444-4444
03-0000-0000
03-2222-2222

Sheet1には名称と電話番号、Sheet2には別所から抽出した電話番号のみのデータがあります。
Sheet1のデータの中からSheet2に電話番号があるものだけを知りたいのですが、たとえばSheet1の 各行のC列 に Sheet2に一致する番号があった場合は●等付けるにはどうすればよいでしょうか。

よろしくお願いします

Aベストアンサー

シート1のC列に式を入れます。
=IF(ISNA(VLOOKUP(B1,Sheet2!A:A,1,FALSE))=TRUE,"-","●")

【式の説明】
シート1のセルB1の値が、シート2のA列に、存在する場合は●を、存在しない場合は-をセット。

Qエクセル COUNTIF関数 検索条件を 5月中のように広く指定したい

エクセル COUNTIF関数で
検索条件の項目を
一つの数値や文字列でなく、
シリアル値で入力されている5月というふうに指定したいのですが、
どのように入力したらいいのでしょうか。

仮に
=COUNTIF(A1:A10,検索条件)
として、A1からA10にはシリアル値で日付が入力されているとして
5月1日から5月31日を調べたいとき
検索条件にどのように入力したらよいでしょうか。

宜しくお願いします。

Aベストアンサー

B列を作業列に使います。

(1)B1に「=MONTH(A1)」と入力し、A10までコピー
(2)C1に「=COUNTIF(B1:B10,5)」と入力

これで5月の数がC1に出ます。

Qエクセルの複数条件に一致したセルを抽出したいのですが、関数で教えてくだ

エクセルの複数条件に一致したセルを抽出したいのですが、関数で教えてください。

               A列   B列    C列
Aファイルには 行 【注文月日】、【氏名】、【商品金額】が記入されています。
Bファイルには 行 【注文月日】、【氏名】、【税金額】が記入されています。

AファイルのD列に、Aファイルの【注文月日】かつ【氏名】がBファイルの【注文月日】かつ【氏名】と一致する場合のBファイルC列の【税金額】を表示したいのです。

VLOOKUP関数では条件が1つだけなので使用できませんが、似たような関数で複数条件ができる関数があるなら教えてください。

Aベストアンサー

こんばんは!
一例です。
↓の画像で右側(Bファイル)の方に作業用の列を設けています。
作業列D2セルを
=A2&B2
としてオートフィルで下へずぃ~~~!っとコピーします。

そして、AファイルのD2セルに
=IF(OR(A2="",COUNTIF([Bファイル.xls]Sheet1!D$2:D$1000,A2&B2)=0),"",INDEX([Bファイル.xls]Sheet1!C$2:C$1000,MATCH(A2&B2,[Bファイル.xls]Sheet1!D$2:D$1000,0)))
という数式を入れ、オートフィルで下へコピーすると
画像のような感じになります。
尚、数式はBファイルの1000行目まで対応できるようにしていますが、
データ量によって範囲指定の領域はアレンジしてみてください。

以上、参考になれば良いのですが
他に良い方法があれば読み流してくださいね。m(__)m

Qエクセルで特定の列にある日付データの中から、指定した日付範囲を抽出する方法を教えてください

例えばこんなデータなのですが、

2002/07/01 99 25 36
2002/07/05 55 33 25
2002/08/01 80 20 51

日付の入っている列を検索して、2002/07/01から2002/07/31
の範囲ならば、その行のデータを別のシートに抽出したいのですが、
日付の範囲は関数でどうすればよいのか分かりません。ACCESSなら
between 9999/99/99 and 9999/99/99って感じで簡単にできるの
ですが。。。エクセルの関数だとIF関数の論理式にAND関数を使って
>=2002/07/01
<=2002/07/31
と入力したので、2002/07/05ならば、いずれもTRUEなので、値を返して
くれると考えたのですが、なぜかダメでした。
(↓こういう入力をしました)
=IF(AND(Sheet2!A1>=2002/7/1,Sheet2!A1<=2002/7/31),Sheet2!A1,"該当月ありません")

Aベストアンサー

こんばんは!

=IF(AND(Sheet2!A1>=2002/7/1,Sheet2!A1<=2002/7/31),Sheet2!A1,"該当月ありません")

おしいですね(^^;
日付をそのまま入力してしまうと数式上では
 2002/7/31 → 2002÷7÷31 になってしまいます。
ダブルクォーテーションで括って(文字列)入力して
それを数値化しましょう!

=IF(AND(Sheet2!A1>="2002/7/1"*1,Sheet2!A1<="2002/7/31"*1),Sheet2!A1,"該当月ありません")

文字列 ="10" に対して 乗算 *1 としても数式が
なり立ち文字列の数字が数値化されます。="10"*1

------------余談--------------------------
ご質問の条件例の場合特例で 2002/7でればOKなので

=IF(TEXT(Sheet2!A1,"yyyym")="20027",Sheet2!A1,"該当月ありません")

でも可能ですね!

こんばんは!

=IF(AND(Sheet2!A1>=2002/7/1,Sheet2!A1<=2002/7/31),Sheet2!A1,"該当月ありません")

おしいですね(^^;
日付をそのまま入力してしまうと数式上では
 2002/7/31 → 2002÷7÷31 になってしまいます。
ダブルクォーテーションで括って(文字列)入力して
それを数値化しましょう!

=IF(AND(Sheet2!A1>="2002/7/1"*1,Sheet2!A1<="2002/7/31"*1),Sheet2!A1,"該当月ありません")

文字列 ="10" に対して 乗算 *1 としても数式が
なり立ち文字列の数字が数値化されます。="10"*1

--...続きを読む

QVBAフォームのテキストボックスに初期値を表示するには?

VBAのフォームのテキストボックスに、初期値としてフォームを開いた当日の日付を表示したいのです。
開いたときは今日の日付が既に表示されていて、必要に応じて書き換える、そんなふうにしたいのですが。

Aベストアンサー

こんにちは。

こういうことかな?

Private Sub UserForm_Initialize()
  TextBox1.Text = Format$(Date, "yy/mm/dd")
End Sub

QエクセルVBAで#N/Aのようなエラー値を含むセルの検出は

エクセルVBAでセルに#N/Aのようなエラー値を含む場合Ifを使った構文で制御したいのですが、エラー値であるかどうかを調査するにはどうすれば良いでしょうか。教えてください。

Aベストアンサー

ワークシート関数のISERRORを使えばよいようです。

#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!、#NAME?、#NULL! のいずれでもTRUEが返ります。

エラーの種類を検出するには、ERROR.TYPE関数を使用します。ただし、ERROR.TYPE関数でエラーのないセルを参照すると、#N/A が返ります。

詳細は、キーワード「エラー」または「IS関数」でヘルプをご参照ください。

VBAを使う場合は、CVErr 関数でエラー値を検出できます。
(詳細は、キーワード「セルのエラー値」で。)


人気Q&Aランキング