下記の表(元データ:シート名「山田」)があります。
----------------------------------------------------------------
   A      B      C      D
1)  名前     A子     B子     C子
2) 退会日   2017/3/7  2017/4/12  2017/4/3
----------------------------------------------------------------

上記より、特定月に退会する人のみの情報を別シートに抽出したいのですが、
どのように数式を組めば良いのか分からず、悩んでいます。
どんな関数を使用すれば良いのか、具体的に教えて頂ければ幸いです。

下記は、抽出する先のシートの様子です。
----------------------------------------------------------------
   A      B      C      D
1)  4月
2)  名前    担当者    退会日
3)
4)
5)
----------------------------------------------------------------

抽出したい退会月は、抽出シートのA1セルに入れています。
(「2017/4/1」と入力したものをユーザー設定で『4月』と表示しています)
元データから抽出したい項目は、A列の名前とC列の退会日なので、
A列の3行目以降、C列の3行目以降に関数を入れて反映したいと考えています。

※元データ:シート名「山田」の場合、
B子さんとC子さんの名前と退会日が抽出できればOK!


また、元データのシート名は「担当者」の名前にしています。
もし、元データのシート名を、抽出シートのB列に反映できる技があれば、
そちらもご教示ください。

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

A 回答 (3件)

こんばんは!



VBAになりますが、一例です。

↓の画像のように担当者分のSheetが存在していて、各シートとも画像のような配置だとします。
尚、抽出するシート名は「抽出」としています。

標準モジュールにしてください。

Sub Sample1() '//この行から//
Dim j As Long, k As Long, lastRow As Long, wS As Worksheet
With Worksheets("抽出")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 2 Then
Range(.Cells(3, "A"), .Cells(lastRow, "C")).ClearContents
End If
.Range("C:C").NumberFormatLocal = "yyyy/m/d"
For k = 1 To Worksheets.Count
Set wS = Worksheets(k)
If wS.Name <> .Name Then
For j = 2 To wS.Cells(2, Columns.Count).End(xlToLeft).Column
If Month(wS.Cells(2, j)) = Month(.Range("A1")) Then
With .Cells(Rows.Count, "A").End(xlUp).Offset(1)
.Value = wS.Cells(1, j)
.Offset(, 1) = wS.Name
.Offset(, 2) = wS.Cells(2, j)
End With
End If
Next j
End If
Next k
End With
End Sub '//この行まで//

※ 関数でないので
データ変更があるたびにマクロを実行する必要があります。m(_ _)m
「別シートから月(MONTH)で抽出する方」の回答画像3
    • good
    • 0
この回答へのお礼

ご回答頂き、ありがとうございます。
ただ、VBAは勉強不足で理解出来ておりません・・・
折角ご教示頂いたのに、申し訳ございません。
今後、知識が身に付いた時に参考にさせて頂きます。
本当にありがとうございました!

お礼日時:2017/04/17 14:40

B列に担当者(シート名)を表示させるということは、


シート名を指定せずに、月だけの指定でA列・C列を表示させ、更に該当するシート名をB列に表示させたいということですか?
関数で検索するのであれば、少なくともシート名の指定は必要です。
具体的な指定でなくても、シート名一覧(この場合担当者名一覧でも可)が必要です。

シート名一覧の横に、各シートの該当データがいくつあるかを表示させ、
抽出したいセルのデータがどのシートのものであるかを判断し、 ←これがB列に表示するデータです。
そのシートにある該当する番目のデータの列を把握し、
その列にある表示させたい行のデータを抽出する。 ←これがA列・C列に表示するデータです。
という段階を踏まなければなりません。

一覧を用いずにブック全体を検索したいというのであれば、VBAでの回答をお待ちください。
    • good
    • 0
この回答へのお礼

ご回答頂き、ありがとうございます。
質問内容が分かりづらく、申し訳ございません。。。

シート名を指定せずに、A列・C列を表示させたい、という訳ではありません。
B列には、シート名になっている担当者名を反映できれば良いな~と思っていたので、
ついでにB列についても質問させて頂きました。

A列・C列の数値を他のシートから引っ張ってくるのなら、
シート名を指定せずにやることが出来ないことは理解しております。
その上で、特定月に退会する人のみの情報を
別シートに抽出する方法をお教え頂ければ幸いです。

お礼日時:2017/04/17 14:33

元データーに「退会月」を設けて、


退会月=month(退会日)
とすれば、それを検索値とできます。
しかし、前年来年も同じ「退会月」にはなってしまいますが…
    • good
    • 0
この回答へのお礼

ご回答頂き、ありがとうございます。
参考にさせて頂きます。
本当にありがとうございました!

お礼日時:2017/04/17 14:23

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

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


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

人気Q&Aランキング

おすすめ情報