希望日    りんご   ばなな   みかん   担当   配達チェック
6月1日      2             1     山田
6月3日             4      2     佐藤      
6月1日      3                   山田      済
6月2日             1            佐藤 
6月2日                    2     山田

というデータがsheet1に入力されています。
<条件>
 ・担当 山田のもの
 ・6月2日以前(このデータでは1日と2日)
 ・配達チェックが済でないもの(空白です)

この条件を満たすものをsheet2に抽出したいのです。
希望日    りんご   ばなな   みかん   担当   配達チェック
6月1日      2              1     山田
6月2日                    2     山田
とsheet2に表示させるには関数でできますか?
できれば、セル参照でA1セルに6月2日、B1に山田と入力すると抽出されるととても便利なのですが・・・。
皆様のお知恵を拝借させてください!!

このQ&Aに関連する最新のQ&A

アンサープラス

エクセルを使うとあるデータ全体から条件に合わせた一部のデータを取り出すことが出来ますね。


以下サイトにデータ抽出方法が紹介されています。

モーグ 複数条件や数値などでデータを抽出する
http://www.moug.net/learning/exkan/exkan006-1.html

A 回答 (6件)

こんばんは!


一例です。

↓の画像でSheet1に作業用の列を設けています。
作業列G2セルに
=IF(COUNTBLANK(Sheet2!$A$1:$B$1),"",IF(AND(A2<=Sheet2!$A$1,E2=Sheet2!$B$1,F2=""),ROW(),""))
という数式を入れオートフィルでずぃ~~~!っと下へコピーしておきます。

そしてSheet2のA4セルに
=IF(COUNT(Sheet1!$G:$G)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL(Sheet1!$G:$G,ROW(A1))))
という数式を入れ列方向と行方向にオートフィルでコピー!

A列の表示形式は「日付」にしておきます。
ただ、このままではSheet1に空白セルがあれば「0」が表示されてしまいますので、
当方使用のExcel2003の場合ですが、
メニュー → ツール → オプション → 「表示」タブ → 「ゼロ値」のチェックを外すと
画像のような感じになります。

以上、参考になれば良いのですが・・・m(__)m
「エクセルで条件に合うものを別シートに抽出」の回答画像1
    • good
    • 7
この回答へのお礼

ありがとうございます!!

なるほど、そういうふうに組み合わせればいいのですね!
勉強になりましたっ
画像まで添付していただきとてもわかりやすかったです(^o^)

お礼日時:2011/06/08 23:11

もう回答は出尽くしていますが、いつも気になることを書きます。


この種の質問は週に3度ぐらい出ます。
タイプは「条件付き抜き出し問題」です。
しかし関数でやるのは、1セル当たりでも非常に長い式で、関数の5式以上の組み合わせになる式になります。
エクセルに検索に適した関数が作られてないことが原因です。
初心者には、自分で生み出せる式でなく、式の意味もわからないと思う。コピペして出来ましたと、其れで良い人は使ったら良い。しかし質問者の場合への修正も一苦労。
ーー
解法のタイプは((1)(2)(3)は広く言えば関数による解法でしょう)
(1)A 作業列を使う
   B 使わない
(2)A 配列数式を使う
   B 使わない(通常の式)
(3)A ユーザー定義関数を使うー 一種のVBA
  B 使わない。
(4)フィルタ
の別になると思います。
ーーー
ですから、私は
(1)操作 フィルタ
を使うことをすすめます。
(2)VBA
(3)特別のソフト(フリーソフト)ただし見つけるのが難しい
を考える人もあるでしょう。
ーーー
私は長年「imogasi方式」というのを書いてきました。
上記で言うと(1)のAにあたります
Googleで「imogasi方式」で照会すれば、沢山の質問回答の例が出て、私以外の、今回既に出ているタイプの回答も毎回出ています。
ーー
imogasi方式では
例データ  Sheet3
 A列ーH列(G列は飛ばし) --は左寄せ表示防止のために入れたもので、実際は空白セル。山田と日付(A1toB1セル)が条件を入れるセルと仮定。
山田2011/6/2
希望日りんごばななみかん担当配達チェック
6月1日2--1山田1
6月3日--42佐藤
6月1日3----山田済
6月2日--1--佐藤
6月2日------山田2
H列が作業列で、H3の式は
=IF(AND(E3=$A$1,A3<=$B$1,F3=""),MAX($H$1:H2)+1,"")
下方向に式を複写してます。
やっていることは、条件に合う行に連番を振ってます。連番にしているところがミソです。
ーー
Sheet4  のA3で
=INDEX(Sheet2!$A$1:$F$100,MATCH(ROW()-2,Sheet2!$H$1:$H$100,0),COLUMN())
F列まで式を複写
A3-F3の式を下方向に式を複写
A列の表示形式を日付、B,C,D列の表示形式を数値に設定。
ーー
結果 Sheet3 A3から
2011/6/12 0 1 山田0
2011/6/20 0 0 山田0
ーー
残された問題点
・0を空白にする ーー>(表示形式で[=0]"";G/標準 の設定など)
・下の行の#N/Aを出さないようにする
は略(上記Googleで「imogasi方式」で照会して出てくる記事に)WEBには書いています)
    • good
    • 13

[No.4]の訂正



添付図の左下図が「Sheet1」となっているのは「Sheet2」の間違いです。
なお、その上の図は「Sheet1」で正しいです。
    • good
    • 7

[フィルタオプションの設定]による方法を案内しておきます。


添付図参照

1.Sheet2 のセル C2 に次式を入力
   =AND(Sheet1!A2<=A$1,Sheet1!E2=B$1,Sheet1!F2="")
  なお、セル C1 は空白のままにしておく
2.Sheet2 をアクティブにして、[データ]→[フィルタ]→[フィルタ
  オプションの設定]を実行して、次の設定を行なった後で[OK]を
  クリック
   [抽出先]→    “指定した範囲”
   [リスト範囲]→  Sheet1!$A$1:$F$10
   [検索条件範囲]→ $C$1:$C$2
   [抽出範囲]→   $A$3:$F$3
「エクセルで条件に合うものを別シートに抽出」の回答画像4
    • good
    • 1
この回答へのお礼

ありがとうございました

「フィルタオプションの設定」初めてこの機能を知りました!
勉強になりました。

お礼日時:2011/06/08 23:50

補助列なしにSheet2のA3セル以下に該当データを表示させたいなら、以下のような関数を入力して下方向にオートフィルしてください。



F3セル:
=INDEX(Sheet1!E:E,SMALL(INDEX(((Sheet1!$A$2:$A$100>$A$1)+(Sheet1!$E$2:$E$100<>$B$1)+(Sheet1!$F$2:$F$100="済"))*1000+ROW($A$2:$A$100),),ROW(E1)))&""

A3セル:(右方向にD3セルまでオートフィル)
=IF($E3="","",INDEX(Sheet1!A:A,SMALL(INDEX(((Sheet1!$A$2:$A$100>$A$1)+(Sheet1!$E$2:$E$100<>$B$1)+(Sheet1!$F$2:$F$100="済"))*1000+ROW($A$2:$A$100),),ROW(A1))))

B3:D3セルの空白部分に0を表示しないのであれば、その範囲を右クリックしてセルの書式設定の表示形式をユーザー定義にして「0;;」と入力してください。

#エクセルのバージョンが記載されていないので、すべてのバージョンに対応できる数式を示しましたが、この数式は必ずしも最適な方法とは限りません。
Officeソフトはバージョンによって使用できる機能や操作方法が異なりますので、ご質問の際には必ずバージョンを明記するようにしましょう。
    • good
    • 3
この回答へのお礼

ありがとうございます

いろいろな方法があるのですね!
勉強になりました!

お礼日時:2011/06/08 23:19

商業高校卒業してます。


29歳主婦です。
参考までに聞いてください。

別のシートに、
条件があう情報を抜き出して一覧表示したい、
ということですよね??

別のシートに表示させる必要がない方法を教えます。
違ったらスルーしてくださいね☆

まず、入力した『希望日』から『配達チェック』までをドラッグします。
※日付や数字を入力したところは含まず、見出しの行のみ。
上部の『データ』タブを開いて、『フィルタ』を選択して、
『オートフィルタ』を選択すると、各見出しの右端にボタンが現れます。
自分の欲しい希望日のみを表示したいときは、
希望日のボタンを押して、(例)6月2日を選ぶと6月2日のみ表示されますし、
更にその中から、担当が山田のもののみ表示させたいときは、
希望日で6月2日と操作したボタンはそのままにして、
更に担当のボタンをおして『山田』を選択してください。
希望日は関係なく、山田担当のもののみ表示させい時は、
希望日で操作したボタンを『すべて』に戻す必要があります。

長くなりましたが、オートフィルタボタンを使うと、
それらを更に昇順や降順にも並べ替えられますから、便利ですよ。
データが消えるわけではないですし、
使い勝手いいと思います。
頑張ってください!!
    • good
    • 6
この回答へのお礼

ありがとうございます

説明不足で申し訳ありませんが、今現在オートフィルタで処理しているのです。
ですが担当者が非常に多くフィルタで抽出する時間と手間が非常にかかるので別シートに抽出したかったのです。

お礼日時:2011/06/08 23:16

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

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

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

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

Qアクセスで和暦から6月3日現在の年齢

アクセスで和暦の生年月日から平成17年6月3日辞典の年齢をクエリで作成したいのですが、どうもうまくいきません。ちなみに現在まではわかるので、下記を改良すればいいとは思うのですが、よろしくお願いします。

年齢:IIf(Format([生年月日],"mmdd")>Format(Date(),"mmdd"),DateDiff("yyyy",[生年月日],Date())-1,DateDiff("yyyy",[生年月日],Date()))

Aベストアンサー

こんにちは。

>アクセスで和暦の生年月日から...

ここで言う「和暦」とは表示の書式であって、フィールドの型は「日付/時刻型」であることが必要です。


【平成17年6月3日時点の場合】

年齢:IIf(Format([生年月日],"mmdd")>Format(#2005/6/3#,"mmdd"),DateDiff("yyyy",[生年月日],#2005/6/3#)-1,DateDiff("yyyy",[生年月日],#2005/6/3#))

で求められます。日付の場合 #2005/6/3# のように # でくくります。


【[調査日]を入力する場合(パラメーターを渡す)】

ユーザーが指定する任意の時点[調査日]における年令を計算する場合には、次の様になります。

年齢:IIf(Format([生年月日],"mmdd")>Format([調査日],"mmdd"),DateDiff("yyyy",[生年月日],[調査日])-1,DateDiff("yyyy",[生年月日],[調査日]))

Q日付28日、30日、31日、月ごとに自動表示させたい。

日付28日、30日、31日、月ごとに自動表示させたい。

1、月によって28日、30日、31日と自動表示させたいです。

2、(添付画像:カレンダー)「D2」1日を基準に
「年」「日付」「曜日」「祝日」を自動表示とセルに条件つき書式を使って
色を付けたのですが、その下のセルにも月が変わるごと自動で色をつけたいです。
名前(1番~15番)の列(日付、曜日、祝日)です。

上記の2点教えて下さい。
よろしくお願いします。

Aベストアンサー

No.3です!
エラーになっちゃいましたか~?

違っていたらごめんなさい。
もしかして、A1・C1はシリアル値で表示形式だけを変えているということはないでしょうか?

前回の数式の場合はA1は単に「2010」と「西暦年」を!
C1は「11」という「月」の数値でないとエラーになると思います。

それからこの場を借りて前回の訂正をしたいと思います。
前回は2・3行目だけの色付け方法を投稿し、もし下の列も色付けしたいのであれば、
条件付き書式でそのままの数式で良い!というようなことを書いていましたが、

もし下の列も色付けしたいのであれば、範囲指定後に条件付き書式の数式を
=WEEKDAY(D$2)=7
のようにしてください。(全ての条件の数式に必要です)
行番号の前に「$」マークを付けないと望み通りの結果にならないと思います。

この程度ですがエラーが他の原因ならごめんなさいね。m(__)m

QAccess2000のクリエで月ごとに1~10日、10~20日、20~31日で抽出したい

Access2000でパートさんの月報と日報を組み合わせた請求書を作っています。
月報には月の仕事ごとの時間と給料の集計と、交通費。
日報には日にちごとの仕事ごとの時間と1日の仕事時間の合計、月の仕事時間の合計が入っています。(サブレポート)
どうにかこれをA4一枚に収めたいのですが、日報の日数が多くなると、どうしても一枚に収まらないので、月を三つに分けてそれぞれで抽出し、サブフォームで横に並べようかと考えています。
そのためには月ごとに1~10日、11日~20日、21日~31日で抽出できるクリエを作成したいです。
抽出条件にBetweenで入れようとしたんですが、*をいれて抽出すると、データ型が違うと出てしまい(データは、日数型)、条件に日数型で入れると*が使えません。(すべての月でつかえるようにしたいのです。ちなみに月のクループ化はしてあります。
なにかいい方法はないでしょうか?

Aベストアンサー

Switch(Day([日付]) Between 1 And 10,"上旬",
   Day([日付]) Between 11 And 20,"中旬",
   Day([日付]) Between 21 And 31,"下旬")

式がちょっと間違っていました。
訂正版です。

Q複数のSheetの参照

こんばんは。
エクセルのデータ参照を利用したいのですが・・
回答者さんの意見も頂きながら、
=VLOOKUP(B3,Sheet2:Sheet3!A3:N41,2,FALSE)

このような式を作っても#VALUE!が出てしまいます。
シート間でSHIFTによる選択もできているので問題はないと思うのですが・・。
これができたらもっと多くのシートを参照先にしてデータを
呼び出したいと思っています。

ご教授いただければと思います。
よろしくお願いします。

Aベストアンサー

ShiftやCtrlでの範囲選択は関数が対応していない範囲も指定する事ができてしまいます。
たとえばこんな成立しない式でも、Shiftキーを使って入力できます。
=A1+Sheet1:Sheet2!A2

残念ながらVLOOKUPの検索範囲は単一シートが対象ですので、各シートに作業用のセルを作る等の対応が必要でしょう。

QEXCELでSheetにデータを蓄積したい

Sheet1に入力シートを作成し、Sheet2に蓄積シートを作成しました。
Sheet1で作成されたデータをSheet2に蓄積させておきたい。
Sheet1のA2の値が入力された場合に実行するとすると
Sheet1のデータ数は、毎回異なります。
他を参考に以下のように作ってみたのですが、
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastA As Long, lastB As Long, ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("入力シート")
Set ws2 = Sheets("蓄積シート")
With Target
If .Address <> "$A$2" Or .Count <> 1 Or IsEmpty(Target) Then Exit Sub
If WorksheetFunction.Count(ws1.Range("a1:s1")) <> 19 Then Exit Sub
lastA = ws2.Range("a65536").End(xlUp).Row
lastB = ws1.Range(("a2:s2"), Selection.End(xlDown)).Select
ws2.Range("a" & lastA + 1).Resize(1, 19).Value = _
ws1.Range("a2:S2").Resize(1, 19).Value
End With
End Sub
'ws1.Range("a2:S2").Resize(1, 19).Value の部分で
'上記ws1の範囲の内、Row2の値しかws2へ反映されません
どなたか教えて頂けないでしょうか。

Sheet1に入力シートを作成し、Sheet2に蓄積シートを作成しました。
Sheet1で作成されたデータをSheet2に蓄積させておきたい。
Sheet1のA2の値が入力された場合に実行するとすると
Sheet1のデータ数は、毎回異なります。
他を参考に以下のように作ってみたのですが、
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastA As Long, lastB As Long, ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("入力シート")
Set ws2 = Sheets("蓄積シート")
With Target
If .Address <> "$A$2" Or ...続きを読む

Aベストアンサー

#1産の補足説明を拝見しました。
質問者さんのロジックに矛盾を感じるのですが多分下記で出来ると思います。
シート1にコントロールツールボックスのコマンドボタンを作成しそのボタンを押下すると下記のロジックを動かすようにして下さい。

Public La, Lb
Private Sub CommandButton1_Click()
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets(1)
Set ws2 = Sheets(2)
La = ws2.Range("a65536").End(xlUp).Row
Lb = ws1.Range("a65536").End(xlUp).Row
For j = 1 To Lb
For i = 1 To 19
ws2.Cells(La + j, i).Value = ws1.Cells(j, i).Value
Next
Next
End Sub


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

このカテゴリの人気Q&Aランキング

おすすめ情報