[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『データ抽出[誕生日]』(さっちん)
シート1「名前リスト」から誕生日の人を抽出するプログラムを作っているんですけど、
シート1は名前(D列)と誕生日(G列に月、H列に日)があり
シート2の月(K3)日(O3)にマッチしていたら、
シート2のB6に"名前"さん誕生日です。おめでとうございます。
と表示されるようにしたいのですがどうすればいいんですか??教えてください。。。
 
えくせる2000 XPデス
関数でよろしいのでしょうか? マクロかな?
 Sheet1
      D   E    F   G        H
  1 名前	月		日
  2 あ	1		2
  3 い	1		4
  4 う	2		6
  5 え	2		8
  6 お	3		10
  7 か	3		12
  8 き	4		14
  9 く	4		16
 10 け	5		18
 11 こ	5		20
 12 さ	6		22
 13 し	6		24
 14 す	7		26
 15 せ	7		28
 16 そ	8		30
 17 た	8		1
 18 ち	9		3
 19 つ	9		5
 20 て	10		7
 21 と	10		9 
 Sheet2
    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O 
 1                               月           日
 2 
 3                                2            8
 4 	
 5
 6     えさん誕生日です。おめでとうございます。
 Sheet2の
 B6 =IF(SUM((Sheet1!E1:E21=K3)*(Sheet1!H1:H21=O3))<>0,
INDIRECT("Sheet1!D"&MAX((Sheet1!E1:E21=K3)*(Sheet1!H1:H21=O3)*ROW(A1:A21)))&
"さん誕生日です。おめでとうございます。","")
 ↑上記式は配列数式なので、Ctrl+Shift+Ennterで確定
って感じでしょうか? もっと簡単になりそうな気がしますが、、、 とりあえずってことで(汗 (キリキ)
 え〜と、、、
 ROW関数で、どの列かってのを出すためなんですが・・・
 分解すると、
 ROW(A1:A21) → ROW({1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21})
 ってことで、それにその前の条件に該当するものを掛けることによって
 何処が条件に適用しているか?を調べて
 MAX(別にMAXでなくてもいいのですが、、、)で、数字を一つに絞ってます・・・
説明が苦手でして。。。
なぜ出るんだろう??? 上記式をコピペでも出ます?
関数でなく、マクロでもいいですか?
 Sub test()
 Dim Mysh1 As Worksheet, Mysh2 As Worksheet
 Dim Myr As Long, Bmon As Long, Bday As Long, c As Long
 Set Mysh1 = Worksheets("Sheet1")
 Set Mysh2 = Worksheets("Sheet2")
Bmon = Mysh2.Cells(3, 11) Bday = Mysh2.Cells(3, 15)
     For c = 2 To Mysh1.Range("E65536").End(xlUp).Row
         If Bmon = Mysh1.Cells(c, 5) Then
             If Bday = Mysh1.Cells(c, 8) Then
                 Mysh2.Cells(6, 2) = Mysh1.Cells(c, 4) & "さん誕生日です。おめでとうございます。"
             End If
         End If
     Next c
 End Sub
上記式を、標準モジュールにコピペしてください (キリキ)
何か結合しているセルには出来ないって言われ、セル結合を解除してみたら
=IF(SUM((名前リスト!G$3:G$35=J3)*(名前リスト!H$3:H$35=N3))<>0,INDIRECT("名前リスト!d$3:d$35"&MAX((名前リスト!G$3:G$35=J3)*(名前リスト!H$3:H$35=N3)*ROW(A1:A21)))&"さん誕生日です。おめでとうございます。","")
シート1「名前リスト」    名前(D列)と誕生日(G列に月、H列に日)
シート2「15-15日曜、祝日」 月(K3)日(O3)
遅くなりました〜 少し確認します、シート名は 名前リスト?「名前リスト」?
 =IF(SUM((名前リスト!G$3:G$35=J3)
          ~~~~~~~~~~
             ↑ご自身のsheet名に変更してください
ROW(A1:A21))) 
    ~~~~~~~~
      ↑ROW()の部分は、参照部分と同等にしてください
        上記の場合は、ROW(A3:A35)
 =IF(SUM((名前リスト!G$3:G$35=J3)*(名前リスト!H$3:H$35=N3))・・・
                             ~~~                     ~~~
 J3?N3?
 誕生日の入っているところは、K3・O3ではないのですか?
以上を確認してみてください (キリキ)
=IF(SUM((バイトリスト!G$3:G$35=K3)*(バイトリスト!H$3:H$35=Q3))<>0,INDIRECT("バイトリスト!d$3:d$35"&MAX((バイトリスト!G$3:G$35=K3)*(バイトリスト!H$3:H$35=Q3)*ROW(バイトリスト!A$3:A$35)))&"さん誕生日です。おめでとうございます。","")
K3に月、Q3に日が書いてあります。(途中で変更しちゃいました・・・ごめんなさい)
やっぱり
セルが結合されてるんですがそれってやっぱり問題ありますか??
あと・・・
ROW(バイトリスト!A$3:A$35)))&"
この書き方であっているのでしょうか??
>シート名は名前リスト 「」入らないデス と、なっているのに、 >=IF(SUM((バイトリスト!G$3:G$35=K3) ??? 名前リストなの?バイトリストなの?どっち?
 >INDIRECT("バイトリスト!d$3:d$35"&
                        ~~~~~~~~~~
                           ↑σ(^o^;)の最初のところを見てください。チョット違う気が・・・
>ROW(バイトリスト!A$3:A$35)))&" これは、どっちでも平気ですよ〜(数式が長いから取っちゃえば?)
>セルが結合されてるんですがそれってやっぱり問題ありますか?? どの部分が、どういったようになっているのでしょう? σ(^o^;)にも、わかるように説明してください。
 =IF(SUM((バイトリスト!G$3:G$35=K3)*(バイトリスト!H$3:H$35=Q3))<>0,INDIRECT("バイトリスト!D"&MAX((バイトリスト!G$3:G$35=K3)*(バイトリスト!H$3:H$35=Q3)*ROW(A$3:A$35)))&"さん誕生日です。おめでとうございます。","")
 上記を配列数式で確定!!
もう一つ! マクロのほうは如何でした? シート名の変更や、セルの場所が変ってるので変更しないと動かないと思いますが、、、 (キリキ)
INDIRECT("バイトリスト!d$3:d$35"& はINDIRECT("バイトリスト!d"&
に修正しました!!
表の構成上1つのセルが小さいんで
A112〜AN113まで結合して、上の式入れてCtrl+Shift+Enter押したら
「配列数式は結合したセルでは正しくありません」と表示されます。
マクロはヴィジュアルベイシック開いてモジュールに追加して
Sub test()
のtestは好きな名前でいいんですよね??
Sub birthday()
にして、貼り付けて見ました・・・
私、マクロのことよく分からないんで、どこがどういう式でどうなってどういう風に修正して使えばいいのか分からないんデス!ごめんなさいダメダメでm(_ _)m
>A112〜AN113まで結合して 今回の対象セルの中ではないですね〜 バイトリスト!G$3:G$35やバイトリスト!H$3:H$35の中には結合セルは無いのですね?
>上の式入れてCtrl+Shift+Enter押したら もしかして、結合してあるセルにこの数式を入れたのかな? だとしたら、関係無いセル(例えば BA1)に入力して、配列数式に そして、B6 =BA1 では、如何でしょう?
(キリキ)
あとついでって言っては変ですが、
名前の前に"今日は"って言葉入れたいんですけどどこに書けばいいんですか??
"今日は"ROW(A$3:A$35)))&"さんの誕生日です。おめでとうございます。","")
"今日は"(バイトリストから名前をぬき出した名前)"さんのお誕生日です!!"
みたいな感じにしたいんです
でも上の式だと出来ませんでした・・・
いや〜 良かった良かった(^^)
>名前の前に"今日は"って言葉入れたいんですけど・・・
INDIRECT( の前に、””を&でくっつけてください〜
 "今日は"&計算式&"さんの誕生日です。"
         ~~~~~~~
          ↑は、上記計算式です
 見たいな感じで出来ると思いますよ〜♪
 (キリキ)
う〜ん(ー_ー;)
計算式により、抜き出したものの一部の色は、変えられないかも。。。
マクロでできるのかな〜?? どちらにしても、σ(^o^;)のレベルでは無理です〜!! すいません・・・m(_ _)m (キリキ)
 >名前の部分だけ文字色変える
 キリキさんのコードを使って、1行追加しました。
 一応、こちらでは動作確認しています。 (Hatch@Excel2002)
 Sub test()
 Dim Mysh1 As Worksheet, Mysh2 As Worksheet
 Dim Myr As Long, Bmon As Long, Bday As Long, c As Long
 Set Mysh1 = Worksheets("Sheet1")
 Set Mysh2 = Worksheets("Sheet2")
 Bmon = Mysh2.Cells(3, 11)
 Bday = Mysh2.Cells(3, 15)
     For c = 2 To Mysh1.Range("E65536").End(xlUp).Row
         If Bmon = Mysh1.Cells(c, 5) Then
             If Bday = Mysh1.Cells(c, 8) Then
'この下の2行を変更&追加しています。文字色は赤(3)です。
                 Mysh2.Cells(6, 2) = "今日は" & Mysh1.Cells(c, 4) & "さんの誕生日です。"
                 Mysh2.Cells(6, 2).Characters(Start:=4, Length:=Len(Mysh1.Cells(c, 4).Value)).Font.ColorIndex = 3
             End If
         End If
     Next c
 End Sub
Hatchさん、フォローありがとうです〜♪
遅くなったので、もう見られていないかもですが、、、
Hatchさんが作ってくれたコードで、 さっちんさんの表用に、変更してみました。 Sheet2は、ご自分のシート名に変更してください。
 Sub birthday2()
 Dim Mysh1 As Worksheet, Mysh2 As Worksheet
 Dim Myr As Long, Bmon As Long, Bday As Long, c As Long
 Set Mysh1 = Worksheets("バイトリスト")
 Set Mysh2 = Worksheets("Sheet2")  '←"Sheet2"は、自分のシート名に変えてね
 Bmon = Mysh2.Cells(3, 11)
 Bday = Mysh2.Cells(3, 15)
     For c = 2 To Mysh1.Range("G65536").End(xlUp).Row
         If Bmon = Mysh1.Cells(c, 7) Then
             If Bday = Mysh1.Cells(c, 8) Then
'この下の2行を変更&追加しています。文字色は赤(3)です。
                 Mysh2.Cells(6, 2) = "今日は" & Mysh1.Cells(c, 4) & "さんの誕生日です。"
                 Mysh2.Cells(6, 2).Characters(Start:=4, Length:=Len(Mysh1.Cells(c, 4).Value)).Font.ColorIndex = 3
             End If
         End If
     Next c
 End Sub
(キリキ)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
 Modified by kazu.