【復活求む!】惜しくも解散してしまったバンド|J-ROCK編 >>

お世話になっております。会社の在籍者名簿を作成したいのですが、次のような課題があります。

sheet1に以下のマスターデータがあります。

  A    B     C    D    
1 個人コード 所属コード 開始日付  終了日付
2  01   6000   2008/04/01 9999/12/31
3  02   1200   2008/03/01 9999/12/31
4  03    7000   2008/05/01 2008/05/20
5  04   1100   2008/03/01 9999/12/31

sheet2に期間以下の5月の在籍指定条件を設定します。
開始日付 2008/05/01 終了日付 2008/05/31

この期間内に該当する対象者が下記の通り抽出されます。

  A    B     C    D    
1 個人コード 所属コード 開始日付  終了日付
2  01   6000   2008/04/01 9999/12/31
3  02   1200   2008/03/01 9999/12/31
4  04   1100   2008/03/01 9999/12/31

日付についてのルールは以下の通りです。

A.個人コード03は、終了日付が2008/05/31前の為該当しません。月末まで在籍する方が対象となります。
B.在籍指定条件の開始日付より前に開始日付がスタートしている方は対象となります。

私の質問表現に曖昧な点がありましたらお許し下さい。ご回答をいただければ嬉しく存じます。宜しくお願い致します。

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

A 回答 (3件)

次の方法は如何でしょうか。


(1)sheet2のA1に「開始日付」A2に「<2008/5/1」、B1に「終了日付」B2に「>2008/5/31」を入力
(2)sheet2の任意セルを選択(仮にA4)→データ→フィルタ→フィルタオプションの設定
(3)「指定した範囲」にチェック、リスト範囲欄にSheet1!A:D、検索条件範囲欄にA1:B2、抽出範囲欄にA4→OK
因みに(2)~(3)をマクロ記録しておくと後々操作が楽になります。
    • good
    • 0
この回答へのお礼

mu2011様

ご丁寧に回答いただきありがとうございます。

オートフィルター以外の方法で、関数利用またはVBA利用による方法はありますでしょうか?

ご回答可能な範囲内で構いません。宜しくお願い致します。

お礼日時:2008/07/01 13:05

NO1です。


>関数利用またはVBA利用による方法はありますでしょうか?
⇒エクセルで行単位の抽出処理をすることは、関数・VBAでも簡単ではありませんので簡単な方法を提案した次第です。
 一度、本サイトで「行抽出」をキーワードに検索してご確認下さい。

この回答への補足

mu2011様

お世話になります。ひとつだけ質問させてください。

オートフィルタにて、sheet1の抽出元からsheet2の抽出先(この場合A4)へフィルターを実行した場合、別シートへはコピー出来ませんとメッセージがでました。対処法はありますでしょうか?
恐れ入りますが、ご教示頂きたくお願い致します。

補足日時:2008/07/01 15:52
    • good
    • 0
この回答へのお礼

mu2011様

ご連絡ありがとうございます。
とても参考になりました。ありがとうございました。

お礼日時:2008/07/01 14:25

ご指名外ですが・・


> 別シートへはコピー出来ませんとメッセージがでました。
先にSheet2を選びデータメニュー - フィルタ - フィルタオプションの設定を開きます。
※抽出先がアクティブシートでなければならないだけで、参照元が別シートでもかまいません
    • good
    • 0
この回答へのお礼

Masa2072様

ご回答ありがごうございます。ご指定の方法で無事操作が出来ました。

ご親切にありがとうございました。

お礼日時:2008/07/01 18:57

このQ&Aに関連する人気のQ&A

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

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

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

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

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

--...続きを読む

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行までとしていますが、必要に応じて変更して下さい

Q入退社日より各月末の在籍者数を把握できる関数

教えてください。

エクセル2010を使用しております。
社員の入退社日から毎月の月末時における入社数、退社数、在籍者数を把握できる表を作成したいと考えております。

各スタッフの氏名、入社日、退職日、在籍年数のデータが入力された表があり、行を変えてC列に年月日(月末)、D列に入社数、E列に退社数、F列に在籍者数を表示させたいと考えております。

また、B列に日付を入力して、エンド・オブ・マンスを使って翌月末日をC列に表示させました。月末の日付を表示させるには、他に良い方法があるでしょうか。

よろしくお願いいたします。

Aベストアンサー

入社数、退社数とは、当月1ヶ月間の人数ですね。以下、その前提での一例です。

B列に入社日、C列に退職日、明細行が101行まであり、集計を103行目に表示するものとします。
C103は当月の月末日です。

入社数 入社日が当月1日から当月末日までの人数をカウント
D103 =COUNTIFS(B2:B101,"<="&$C103,B2:B101,">="&DATE(YEAR($C103),MONTH($C103),1))
退社数 退職日が当月1日から当月末日までの人数をカウント
E103 =COUNTIFS(C2:C101,"<="&$C103,C2:C101,">="&DATE(YEAR($C103),MONTH($C103),1))
在籍者数 (入社日が当月末日までの人数) - (退職日が当月末日までの人数)
F103 =COUNTIF(B2:B101,"<="&$C103)-COUNTIF(C2:C101,"<="&$C103)

なお、月末日の求め方はEOMONTHの他前のご回答にもあるとおり
DATE関数でも求められます。
=DATE(YEAR(A1),MONTH(A1),0) 先月末日
=DATE(YEAR(A1),MONTH(A1)+1,0) 当月末日

入社数、退社数とは、当月1ヶ月間の人数ですね。以下、その前提での一例です。

B列に入社日、C列に退職日、明細行が101行まであり、集計を103行目に表示するものとします。
C103は当月の月末日です。

入社数 入社日が当月1日から当月末日までの人数をカウント
D103 =COUNTIFS(B2:B101,"<="&$C103,B2:B101,">="&DATE(YEAR($C103),MONTH($C103),1))
退社数 退職日が当月1日から当月末日までの人数をカウント
E103 =COUNTIFS(C2:C101,"<="&$C103,C2:C101,">="&DATE(YEAR($C103),MONTH($C103),1))
在籍者数 (入...続きを読む

Qエクセルで複数の条件を抽出し自動的に別シートに反映する方法を教えてください。

こんばんは。教えてください。

元データ(sheet1)を更新するたび
2つの条件にあったデータを
別シートに自動的に抽出したいので
適した関数がありましたら教えてください。



◇シート1◇ ※元データ
 A      B     C     D     F
1 氏名 役職 部署 年齢 移動時期     
2 山田 社員 開発 45  未調整
3 田中 社員 人事 42  4/1~
4 鈴木 派遣 企画 30  
5 高橋 役員 人事 50  未調整
6 坂野 社員 企画 33  未調整  
7 井上 派遣 企画 29  未調整

◇シート2◇ ※部署が人事で移動時期が未調整の人のみ抽出
 A      B     C     D    F
1 氏名 役職 部署 年齢 移動時期 
2 高橋 役員 人事 50  未調整


補足
・元データ(シート1)はこれからもデータを追加するので
 その度、シート2、シート3もそれぞれ自動で反映されるようにした いです。

・マクロ、VBAは知識がないので
 関数で作成したいです。

・できるだけエラー(#N/Aなど)表示されないようにしたいです。

説明が不十分で伝わりにくいかと思いますが
よろしくお願いします。

こんばんは。教えてください。

元データ(sheet1)を更新するたび
2つの条件にあったデータを
別シートに自動的に抽出したいので
適した関数がありましたら教えてください。



◇シート1◇ ※元データ
 A      B     C     D     F
1 氏名 役職 部署 年齢 移動時期     
2 山田 社員 開発 45  未調整
3 田中 社員 人事 42  4/1~
4 鈴木 派遣 企画 30  
5 高橋 役員 人事 50  未調整
6 坂野 社員 企画 33  未調整  
7 ...続きを読む

Aベストアンサー

> 部署を"人事"と"企画"の両方で抽出する条件を追加する

おはようございます、merlionXXです。
Operator:=xlOr, Criteria2:="=企画" と、OR条件で"企画"を加えれば可能です。
一応、各コードの動きに解説もつけておきました。(解説は’でコメントアウトしてますのでこのまま貼り付けてもOKです。)

Private Sub Worksheet_Activate() 'このシートがアクティブになったら自動実行
With Sheets("Sheet1") 'Sheet1対して
.AutoFilterMode = False 'オートフィルタ終了(あればエラーになるため)
.Range("A1:E1").AutoFilter 'A1:E1にオートフィルタ設定
.Range("A1:E1").AutoFilter Field:=3, Criteria1:="=人事", Operator:=xlOr, Criteria2:="=企画" '左から3つ目のフィルタを"人事"と"企画"のOR条件で抽出
.Range("A1:E1").AutoFilter Field:=5, Criteria1:="未調整" '左から5つ目のフィルタを"未調整"で抽出
.Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A1") 'A1から最終セル範囲の可視セルをこのシートのA1以降に貼り付け
.AutoFilterMode = False 'オートフィルタ終了
End With 'Sheet1に対する記述おわり
End Sub

> 部署を"人事"と"企画"の両方で抽出する条件を追加する

おはようございます、merlionXXです。
Operator:=xlOr, Criteria2:="=企画" と、OR条件で"企画"を加えれば可能です。
一応、各コードの動きに解説もつけておきました。(解説は’でコメントアウトしてますのでこのまま貼り付けてもOKです。)

Private Sub Worksheet_Activate() 'このシートがアクティブになったら自動実行
With Sheets("Sheet1") 'Sheet1対して
.AutoFilterMode = False 'オートフィルタ終了(あればエラーになるた...続きを読む

Qエクセルで特定の行を抽出させる方法について。

エクセルでの関数についての質問ですが、

     A     B    C     D  
 1  名前   日付  場所   時間
 2  Aさん  10/7  工場1   8.0
 3  Bさん  10/7  工場1   8.0
 4  Cさん  10/7  工場2   4.0
 5  Cさん  10/7  工場1   8.0
 6  Aさん  10/8  事務所   8.0
 7  Cさん  10/8  工場2   8.0
 8  Aさん  10/9  事務所   4.0

以上の表から別のシート2にAさんだけの行を抽出するには、どのようにすれば良いのでしょうか?
INDEXやMATCH・LOOKUPを使っていろいろ試したのですがイマイチうまく行かないもので・・・。

因みに、シート2のイメージは

      A     B     C  
 1   名前  :  Aさん 
 2
 3   日付   場所   時間
 4   10/7   工場1    8.0
 5   10/8   事務所    8.0
 6   10/9   事務所   4.0

このような感じです。

よろしくお願いします。

エクセルでの関数についての質問ですが、

     A     B    C     D  
 1  名前   日付  場所   時間
 2  Aさん  10/7  工場1   8.0
 3  Bさん  10/7  工場1   8.0
 4  Cさん  10/7  工場2   4.0
 5  Cさん  10/7  工場1   8.0
 6  Aさん  10/8  事務所   8.0
 7  Cさん  10/8  工場2   8.0
 8  Aさん  10/9  事務所   4.0

以上の表から別のシート2にAさんだけの行を抽出するには、どのように...続きを読む

Aベストアンサー

こんにちは!

極端にデータ量が多い場合はおススメできませんが・・・
一気に表示する方法です。

↓の画像で右側がSheet2とします。
Excel2007以降のバージョンをお使いだとして・・・

Sheet2のA4セルに
=IF($B$1="","",IFERROR(INDEX(Sheet1!B$1:B$1000,SMALL(IF(Sheet1!$A$1:$A$1000=$B$1,ROW(A$1:A$1000)),ROW(A1))),""))
これは配列数式になってしまいますので、Shift+Ctrl+Enterで確定!
この画面から数式をコピー&ペーストする場合は
上記数式をドラッグ&コピー → Sheet2のA4セルを選択 → 数式バー内に貼り付け
→ そのまま(編集可能なまま)Shift+Ctrlキーを押しながらEnterキーで確定!
数式の前後に{ }マークが入り配列数式になります。
これをC4セルまでコピー!

A4セルの表示形式は「日付」にし、A4~C4セルを範囲指定 → C4セルのフィルハンドルで下へコピー!

これで画像のような感じになります。m(_ _)m꜊

こんにちは!

極端にデータ量が多い場合はおススメできませんが・・・
一気に表示する方法です。

↓の画像で右側がSheet2とします。
Excel2007以降のバージョンをお使いだとして・・・

Sheet2のA4セルに
=IF($B$1="","",IFERROR(INDEX(Sheet1!B$1:B$1000,SMALL(IF(Sheet1!$A$1:$A$1000=$B$1,ROW(A$1:A$1000)),ROW(A1))),""))
これは配列数式になってしまいますので、Shift+Ctrl+Enterで確定!
この画面から数式をコピー&ペーストする場合は
上記数式をドラッグ&コピー → Sheet2のA4セルを選択 → 数式バ...続きを読む

Qエクセルで条件に合うものを別シートに抽出(関数)

希望日    りんご   ばなな   みかん   担当   配達チェック
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に山田と入力すると抽出されるととても便利なのですが・・・。
皆様のお知恵を拝借させてください!!

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

というデータがsheet1に入力されています。
<条件>
 ・担当 山田の...続きを読む

Aベストアンサー

こんばんは!
一例です。

↓の画像で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

QExcel:セルに入力されている日付の、半年後の日付を自動表示させたい

誰か教えてください。
A列のセルに「2004/3/4」という日付が入っていたとします。
A列の日付を参照して、B列に「半年後」、C列に「16ヶ月後」という日付を自動表示させたいのですが、そういう事って出来ますか?
出来るとしたらどんな関数を書けばいいのでしょう?
教えてください!

Aベストアンサー

こんにちは。maruru01です。

基本形(半年後)は、

=DATE(YEAR(A1),MONTH(A1)+6,DAY(A1))

です。
(16ヶ月後は、数式中の6→16にする)
ただし、月末の場合は問題があります。
例えばA1に、「2004/8/31」と入力すると、半年後は、「2005/3/3」になります。
これを、「2005/2/28」にするなら、数式を、

=MIN(DATE(YEAR(A1),MONTH(A1)+6,DAY(A1)),DATE(YEAR(A1),MONTH(A1)+6+1,))

とします。
また、分析ツールが利用出来るのなら、

=EDATE(A1,6)

としても、「2005/2/28」という日付が求まります。
なお、分析ツールは、メニューの[ツール]→[アドイン]→[分析ツール]にチェックをすると利用可になります。

QエクセルVBAでテキストボックスの値の取得と変更について

エクセルのVBAを使ってシート上のテキストボックスのテキストを取得・変更するマクロを作成したいと思っていますがうまく行きませんので、お知恵を拝借したいとおもいます。

環境:WindowsXPでオフィス2002
状況:
エクセルブックa.xlsのシートに「コントロールツールボックス」のテキストボックスを配置(オブジェクト名はTEXTBOX_C)
エクセルブックb.xlsにコードを書き、a.xlsのTEXTBOX_CのプロパティのValueかTextを取りだしたい

試した事:
コントロールを配置したシートに次のマクロ
TEXTBOX_C.Text = "これはコントロールのテキストボックス"
を書くとテキストボックスに文字を入れ込めますが、別のエクセルブックからだと上手く行きません。

また、オートシェイプのテキストボックスの場合は簡単に出きるのですが、コントロールツールボックスではどうしても上手く行きませんので、対象法などご存知の方いらっしゃいましたら教えてください

Aベストアンサー

エクセルを新規に開きました。
そのSheet1に(コントロールツールボックスの)TextBoxを貼りつけました。
そのBook1から、ファイル-開くで別ブックを開きました。
別ブックのMojule1側に下記を書いて
Sub test02()
MsgBox Workbooks("book1").Worksheets("sheet1").textbox1.Text
End Sub
を実行すると、Book1のTextBoxに入れた文字列が表示
されました。
がそんな質問ではないのですか。

QエクセルのIF関数で、文字が入力されていたならば~

エクセルのIF関数で文字が入力されていたならば~、という論理式を組み立てたいと思っています。

=IF(A1="『どんな文字でも』","",+B1-C1)

A1セルに『どんな文字でも』入っていたならば、空白に。
文字が入っていなければB1セルからC1セルを引く、という状態です。

この『どんな文字でも』の部分に何を入れればいいのか教えてください。

またIF関数以外でも同様のことができれば構いません。

宜しくお願いします。

Aベストアンサー

=IF(ISTEXT(A1),"",B1-C1)

でどうでしょうか?

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を見た人がよく見るQ&A

人気Q&Aランキング