[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数項目の照らし合わせと、部位判定を行なった上での結果出し』(ほぼほぼ初心者)
初めまして。
関数を使用して複数の項目を照らし合わせ、まとめる方法を模索中ですが
煩雑になりすぎて、初心者には手に負えませんのでご教授お願いします。
内容は、2人に同じものを見てもらい5項目までの回答を出します。
回答は1つの項目ごとに部位と判定を出します。部位の頭には、右・左・両が入ります。
例えば
Aさん Bさん → 結果
部位 判定 部位 判定 部位 判定
右A みかん 右A みかん 右A みかん
右B りんご 左B りんご 両B りんご
両C いちご 両D ぶどう 両C いちご
両D ぶどう 左C いちご 両D ぶどう
右E りんご 右E りんご
と、回答をもらった場合に、結果の様に返したいのです。
みかんは2人とも部位が右Aなので、右A みかんとして
りんごは2つ回答があり
部位がBに対しては右と左と回答があったので、両B りんごとします。
部位Eは単独ですので、右E りんごとします。
いちごとぶどうは書き込まれているセル位置が違いますが、それぞれ回答が
ありますので採用し、
いちごは片方が両と回答があったので、両C いちごとします。
ぶどうは2人とも同じなので、両D ぶどうとします。
場合によっては、結果は最大10個になる場合もあります。
この様に部位の判定とセル位置の違いそれぞれを照らし合わせたうえで、結果を出せるようにするための方法を教えて頂きたくこちらに書き込ませていただきました。
かなり無茶な感じだと思いますがよろしく皆様の御知恵をお借し下さい。
長文になり申し訳ありません。よろしくお願いします。
< 使用 Excel:unknown、使用 OS:unknown >
両名共に部位・判定を整形するわけにはいかないのでしょうか? 項目ごと行を合わせられれば、以下の関数でどうでしょう。 整形不可の場合は、他の方の回答をお待ちください。
|[A] |[B] |[C] |[D] |[E] |[F] [1]|Aさん| |Bさん| |結果 | [2]|部位 |判定 |部位 |判定 |部位 |判定 [3]|右A |みかん|右A |みかん|=IF(COUNTA(A3,C3)=2,IF(A3=C3,A3,"両"&RIGHT(A3,1)),A3&C3)|=IF(COUNTA(B3,D3)=2,B3,B3&D3) [4]|右B |りんご|左B |りんご|両B |りんご [5]|両C |いちご|左C |いちご|両C |いちご [6]|両D |ぶどう|両D |ぶどう|両D |ぶどう [7]| | |右E |りんご|右E |りんご [8]|左F |もも | | |左F |もも (大根おろし) 2021/09/05(日) 09:03
これは関数限定なんですか、それともマクロ案も可?
関数限定の場合、作業エリアも使用不可なんですか?
(半平太) 2021/09/05(日) 11:54
AさんとBさんで同じ部位で違う判定となることはあるのだろうか? もしあるのであればその場合はどのように表示させればいいのだろうか? (ねむねむ) 2021/09/06(月) 13:10
3つの値と数式を以下の通り入力してください。
※もし入力が面倒と思う時は、後記マクロを利用すれば、自動的に入れられます。
1.値 k1セルに「右」 L1セルに「左」 M1セルに「両」
2.数式 (1) H2セル =MID(A3,2,LEN(A3))&"-"&IF(COUNTBLANK(B3),ROW(),B3)&"-"&LEFT(A3) H6セルまでコピー (2) H7セル =MID(C3,2,LEN(C3))&"-"&IF(COUNTBLANK(D3),ROW(),D3)&"-"&LEFT(C3) H11セルまでコピー (3) I2セル =INDEX(H$2:H$11,AGGREGATE(15,6,ROW($Z$1:$Z$10)/(MATCH(H$2:H$11,H$2:H$11,0)=ROW($Z$1:$Z$10)),ROW(A1))) (4) J2セル =IFERROR(INDEX(I$2:I$11,MATCH(ROW(A1),COUNTIF(I$2:I$11,"<"&I$2:I$11)+1,0)),"") これは配列数式として入力する(Ctrl+Shiftを押しながらEnterキーを押下)
(5) K2セル =IF(RIGHT($J2)=K$1,COUNTIFS($H$2:$H$11,$J2),"") M2セルまでコピー (6) N2セル =IF(J2="","",LEFT(J2,LEN(J2)-2)) (7) O2セル =IF(IF(N2=N3,OR(K2&L3="11",K3&L2="11",SUM(M2:M3))),"両"&LEFT(N2,FIND("-",N2)-1),IF(N1=N2,"",IFERROR(LOOKUP(9,K2:M2,K$1:M$1)&LEFT(N2,FIND("-",N2)-1),""))) (8) P2セル =IF(O2="","",ROW()*1000+FIND("-",N2))
H2〜P2セルを選択して、11行目までコピー
(9) E3セル =IFERROR(INDEX(O:O,INT(SMALL($P:$P,ROW($Z1))/1000)),"") (10) F3セル =IFERROR(MID(INDEX(N:N,INT(SMALL($P:$P,ROW($Z1))/1000)),MOD(SMALL($P:$P,ROW($Z1)),1000)+1,100),"")
E3〜F3セルを選択して12行目までまでコピー
<結果図> 行 __A__ ___B___ __C__ ___D___ __E__ ___F___ _G_ _____H_____ _____I_____ _____J_____ _K_ _L_ _M_ ____N____ _O_ __P__ 1 Aさん Bさん 結果 右 左 両 2 部位 判定 部位 判定 部位 判定 A-みかん-右 A-みかん-右 -6- - 3 右A みかん 右A みかん 右A みかん B-りんご-右 B-りんご-右 A-みかん-右 2 A-みかん 右A 3002 4 右B りんご 左B りんご 両B りんご C-いちご-両 C-いちご-両 B-りんご-右 1 B-りんご 両B 4002 5 両C いちご 両D ぶどう 両C いちご D-ぶどう-両 D-ぶどう-両 B-りんご-左 1 B-りんご 6 両D ぶどう 左C いちご 両D ぶどう -6- -6- C-いちご-左 1 C-いちご 両C 6002 7 右E りんご 右E りんご A-みかん-右 B-りんご-左 C-いちご-両 1 C-いちご 8 B-りんご-左 C-いちご-左 D-ぶどう-両 2 D-ぶどう 両D 8002 9 D-ぶどう-両 E-りんご-右 E-りんご-右 1 E-りんご 右E 9002 10 C-いちご-左 #NUM! 11 E-りんご-右 #NUM!
※上記の入力作業が面倒と思う場合、以下の手順で数式等を自動入力してください。(思わなければこれ以降は読む必要ありません)
1.対象シートの「シート見出し」を右クリックして、「コードの表示(V)」を選ぶ。 すると、画面中央に白いエリアが出ます。(VBE画面と呼ばれています。) 2.そのエリアに下記マクロコードを貼り付ける。 3. F5キーを押下する(マクロ「onlyOnce」 が 実行される) 4.Ctrl+Zキーで上記マクロを消す(用済みなので、書き込み前に戻す) 5.ALT+F11でエクセルに戻る
以上で、所要データと数式の入力は完了です。
Private Sub onlyOnce()
With Me .Range("K1").Value = "右" .Range("L1").Value = "左" .Range("M1").Value = "両"
Rem 数式セルをまとめて処理 .Range("H2:H6").FormulaR1C1Local = "=MID(R[1]C[-7],2,LEN(R[1]C[-7]))&""-""&IF(COUNTBLANK(R[1]C[-6]),ROW(),R[1]C[-6])&""-""&LEFT(R[1]C[-7])" .Range("I2:I11").FormulaR1C1Local = "=INDEX(R2C[-1]:R11C[-1],AGGREGATE(15,6,ROW(R1C26:R10C26)/(MATCH(R2C[-1]:R11C[-1],R2C[-1]:R11C[-1],0)=ROW(R1C26:R10C26)),ROW(R[-1]C[-8])))" .Range("J2").FormulaArray = _ "=IFERROR(INDEX(R2C[-1]:R11C[-1],MATCH(ROW(R[-1]C[-9]),COUNTIF(R2C[-1]:R11C[-1],""<""&R2C[-1]:R11C[-1])+1,0)),"""")" .Range("J2").AutoFill Destination:=Range("J2:J11"), Type:=xlFillDefault .Range("K2:M11").FormulaR1C1Local = "=IF(RIGHT(RC10)=R1C,COUNTIFS(R2C8:R11C8,RC10),"""")" .Range("N2:N11").FormulaR1C1Local = "=IF(RC[-4]="""","""",LEFT(RC[-4],LEN(RC[-4])-2))" .Range("O2:O11").FormulaR1C1Local = "=IF(IF(RC[-1]=R[1]C[-1],OR(RC[-4]&R[1]C[-3]=""11"",R[1]C[-4]&RC[-3]=""11"",SUM(RC[-2]:R[1]C[-2]))),""両""&LEFT(RC[-1],FIND(""-"",RC[-1])-1),IF(R[-1]C[-1]=RC[-1],"""",IFERROR(LOOKUP(9,RC[-4]:RC[-2],R1C[-4]:R1C[-2])&LEFT(RC[-1],FIND(""-"",RC[-1])-1),"""")))" .Range("P2:P11").FormulaR1C1Local = "=IF(RC[-1]="""","""",ROW()*1000+FIND(""-"",RC[-2]))" .Range("E3:E12").FormulaR1C1Local = "=IFERROR(INDEX(C[10],INT(SMALL(C16,ROW(R[-2]C26))/1000)),"""")" .Range("F3:F12").FormulaR1C1Local = "=IFERROR(MID(INDEX(C[8],INT(SMALL(C16,ROW(R[-2]C26))/1000)),MOD(SMALL(C16,ROW(R[-2]C26)),1000)+1,100),"""")" .Range("H7:H11").FormulaR1C1Local = "=MID(R[-4]C[-5],2,LEN(R[-4]C[-5]))&""-""&IF(COUNTBLANK(R[-4]C[-4]),ROW(),R[-4]C[-4])&""-""&LEFT(R[-4]C[-5])"
End With End Sub
(半平太) 2021/09/06(月) 20:30
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.