[[20210904212624]] 『複数項目の照らし合わせと、部位判定を行なった上』(ほぼほぼ初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『複数項目の照らし合わせと、部位判定を行なった上での結果出し』(ほぼほぼ初心者)

初めまして。
関数を使用して複数の項目を照らし合わせ、まとめる方法を模索中ですが
煩雑になりすぎて、初心者には手に負えませんのでご教授お願いします。

内容は、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 >


使用がunknownになってましたので訂正します。
Excel2016 Windows10です。
よろしくお願いします。
(ほぼほぼ初心者) 2021/09/05(日) 08:04

 両名共に部位・判定を整形するわけにはいかないのでしょうか?
 項目ごと行を合わせられれば、以下の関数でどうでしょう。
 整形不可の場合は、他の方の回答をお待ちください。

    |[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(日) 10:00

 これは関数限定なんですか、それともマクロ案も可?

 関数限定の場合、作業エリアも使用不可なんですか?

(半平太) 2021/09/05(日) 11:54


返事が遅くなり申し訳ありません。
関数限定です。マクロは不可です。
作業エリアは使用可能です。
(ほぼほぼ初心者) 2021/09/06(月) 11:59

 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


ありがとうございます。
マクロは使用できないので、マクロを使用しない方法を試してみたいと思います。
(ほぼほぼ初心者) 2021/09/07(火) 09:38

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.