エクセル | の学校 |
8.一覧 | 9.HOME |
1.Top | 2.Last |
『抽出したデータを並べて文章をつくりたい』(ぽむ)
元データ
Aさん Bさん Cさん Dさん R1年 87 77 42 78 R2年 55 32 90 40 R3年 59 22 15 30
基準値 50
こういったデータから、関数で下記のような文章を作成したいのですが、 どういった関数で組み立てることができるでしょうか。
・R1年では、Aさん、Bさん、Dさんが基準値以上となり、Cさんが基準値以下となった。 ・R2年では、Aさん、Cさんが基準値以上となり、Bさん、Dさんが基準値以下となった。 ・R3年では、Aさんが基準値以上となり、Bさん、Cさん、Dさんが基準値以下となった。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
基準値以上は基準値を含む。 基準値以下も基準値を含む。 ちょうど基準値ちょうどの人は両方に表示させるのだろうか? (ねむねむ) 2024/04/23(火) 15:27:29
あとどちらかが一人もいない場合にはどう表示させるのだろうか? (ねむねむ) 2024/04/23(火) 15:32:58
どちらかが一人もいない場合は、 R○年では、全ての人が基準値以上(未満)となった。 という表示にしたいです。
(ぽむ) 2024/04/23(火) 15:46:22
A B C D E F G 1 Aさん Bさん Cさん Dさん 50 2 R1年 87 77 42 78 3 R2年 55 32 90 40 4 R3年 59 22 15 30 のようなレイアウトだとして。 =A2&"では"&IF(OR(COUNTIF(B2:E2,"<"&G$1)=0,COUNTIF(B2:E2,">="&G$1)=0),"すべての人が基準値"&IF(COUNTIF(B2:E2,"<"&G$1),"未満","以上")&"となった。",TEXTJOIN("、",TRUE,IF(B2:E2>=G$1,B$1:E$1,""))&"が基準値以上となり、"&TEXTJOIN("、",TRUE,IF(B2:E2<G$1,B$1:E$1,""))&"が基準値未満となった。") と入力して下へフィルコピーではどうだろうか?
ただ、現在2016でしか確認できないため確実に上記でOKというチェックができていないためダメだったらすまない。 (ねむねむ) 2024/04/23(火) 16:24:05
試してみた結果、成功しました。 ご教授ありがとうございます。感謝いたします。
(ぽむ) 2024/04/23(火) 16:30:09
解決済みですが、せっかく作ったので置いておきます。
A B C D E 1 Aさん Bさん Cさん Dさん 2 R1年 87 77 42 78 3 R2年 55 32 90 40 4 R3年 49 22 15 30 5 6 基準値 50
上記のレイアウトで結果はG列に出力
Sub Sample() Const Msg1 = _ "・Y年では、Upperが基準値以上となり、Lowerが基準値未満となった。" Const Msg2 = _ "・Y年では、全員が基準値UpDownとなった。"
Dim dat As Range Set dat = Cells(1).CurrentRegion Set dat = Intersect(dat, dat.Offset(1, 1)) Dim ref As Long ref = Range("B6").Value
Dim Upper As String, Lower As String Dim res As String Dim r As Range, c As Range For Each r In dat.Rows Upper = "": Lower = "" For Each c In r.Cells If c.Value >= ref Then Upper = Upper & "、" & Cells(1, c.Column).Value Else Lower = Lower & "、" & Cells(1, c.Column).Value End If If Upper = "" Then res = Replace(Replace(Msg2, "Y年", Cells(c.Row, 1).Value), "UpDown", "未満") ElseIf Lower = "" Then res = Replace(Replace(Msg2, "Y年", Cells(c.Row, 1).Value), "UpDown", "以上") Else res = Replace(Msg1, "Y年", Cells(c.Row, 1).Value) res = Replace(res, "Upper", Mid(Upper, 2)) res = Replace(res, "Lower", Mid(Lower, 2)) End If Next Cells(r.Row, "G") = res Next End Sub (hatena) 2024/04/23(火) 16:36:37
]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.