[[20060609170140]] 『hlookup関数』(sk) ページの最後に飛ぶ

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

 

『hlookup関数』(sk)

 表でセルC6:AI6,C21:AE21には「機械番号」、C7:AI7,C22:AE22には「不良率」が記録されている。
 ・セルB21からF21に「不良率」をLarge関数で大きい順に表示しています。
 ・セルB20からF20に、セルB21からF21に対応する、セルC6:AI6,C21:AE21の「機械番号」を表示したい。
 HLOOKUP関数でトライしましたがうまくできません。B20の具体的な関数を教えていただけませんか。

 続き?
[[20060606134815]]

 レスがつかないのは、やはり、面倒なんですよね、計算対象が二つの範囲にあるのは。
ひとつの範囲を探して、なかったら、もうひとつの範囲をさがして、って。
あとは、不良率も計算結果でしょうから、同値重複もありうるということで、
不良率だけから機械番号を検索できるか、というと、難しい。
(不良率が同じなら同じ機械番号を引っ張り出してしまう)
 
レイアウトの変更不可、ということなので、作業シートを使用してください。
整列させちゃったほうが絶対楽です。
 
仮に作業シートをSheet2とします。
C6:AI6を作業シートのA2へ「リンク貼り付け」
C21:AE21を作業シートのAH2へ「リンク貼り付け」、
つまり、2行目へ一行に並ぶようにリンク貼り付けします。
同様に不良率のセル範囲も作業シート3行目へリンク貼り付け。
作業シートの1行目には次の数式を入力して、作業シートのBJ1までコピー。
=RANK(A3,$A$3:$BJ$3)+COLUMN()/100
この数式は不良率の高いもの、また、左側のものほど数値が小さくなります。
 
表のシート
B20 =HLOOKUP(SMALL(Sheet2!1:1,COLUMN(A1)),Sheet2!1:3,2,FALSE)
B21 =HLOOKUP(SMALL(Sheet2!1:1,COLUMN(A1)),Sheet2!1:3,3,FALSE)
 
としてこの二つの数式をF列までフィル・・・って、ここまで書いて・・・。

できないじゃん!

  
C21:F21が機械番号と重複しますよ、これ。不自然。
もしかして、からかってます?
 
(みやほりん)(-_∂)b

(みやほりん)(-_∂)bさん
 大変失礼しました。C6:AI6,C21:AE21以外は実際の表のセルを確認せず、一つずらして記入
したつもりでした。その際下側の段のセル重複にきずきませんでした。

 再度実際のセル番号を正確に記入しますのでよろしくお願いします。

 機械番号:C6:AI6,C21:AE21
 不良率 :C13:AI13,C28:AE28
 不良率順位 :R47:V47
 その機械番号:R48:V48


 R47=LARGE(($C$13:$L$13,$C$28:$I$28),COLUMN(A1))
 ★V47まで、右にコピー

 R48=IF(COUNTIF($C$13:$AI$13,R47)>=COUNTIF($R$47:R47,R47),INDEX($A$6:$AI$6,SMALL(IF($C$13:$AI$13=R47,
  COLUMN($C$13:$AI$13)),COUNTIF($R$47:R47,R47))),INDEX($A$21:$AE$21,SMALL(IF($C$28:$AE$28=R47,COLUMN($C$28:$AE$28)),
  COUNTIF($R$47:R47,R47)-COUNTIF($C$13:$AI$13,R47))))
 ★この式は「配列数式」です。式を入力後、Ctrl+Shift+Enter をおして、式を確定させてください。
 ★確定すると、式の両端に{ }がつきます。
 ★式を確定させてから、V48まで右にコピー
 (Maron)

(Maron)さん

 大変有難うございました。希望している内容が実現できました。
 同じように表示必要な項目があり、COLUMN(A1)を(A2)、(A3)に変更することにより実現できました。
 $A$6を$C$6に変更すると正しく動作しない理由や(A1)の意味等解らないままですが、見事に動作し大変感謝いたします。


(Maron)さん

 前記の如く内容を理解できないまま運用。別途様式に同じように展開しようとしましたが
うまくできません。どこに問題があるのか、正しい関数はどうすべきかご援助お願いしたいのですが。
 機械番号表示:C11:AH11とC29:AF29
 効率表示    :C18:AH18とC36:AF36
 不良率表示  :C20:AH20とC38:AF38

 効率順位   :S3:W3(Small関数で表示させることができました)
 その機械番号:S2:W2⇒下記参照。
 不良率順位 :S5:W5(large関数で表示させることができました)
 その機械番号:S4:W4⇒下記参照。

 ・S2には次の関数をインプット。結果は数式エラー表示
 IF(COUNTIF($C$18:$AH$18,S3)>=COUNTIF($S$3:S3,S3),
 INDEX($A$11:$AH$11,SMALL(IF($C$18:$AH$18=S3,COLUMN($C$18:$AH$18)),
 COUNTIF($S$3:S3,S3))),INDEX($A$29:$AF$29,SMALL(IF($C$36:$AF$36=S3,
 COLUMN($C$36:$AF$36)),COUNTIF($S$3:S3,S3)-COUNTIF($C$18:$AH$18,S3))))

 ・S4に次の関数をインプット。結果は「#NUM!」となる。
 IF(COUNTIF($C$20:$AH$20,S5)>=COUNTIF($S5:S$5,S5),
 INDEX($A$11:$AH$11,SMALL(IF($C$20:$AI$20=S5,COLUMN($C$20:$AH$20)),
 COUNTIF($S5:S$5,S5))),INDEX($A$29:$AF$29,SMALL(IF($C$38:$AF$38=S5,
 COLUMN($C$38:$AF$38)),COUNTIF($S5:S$5,S5)-COUNTIF($C$20:$AH$20,S5))))


 >効率順位   :S3:W3(Small関数で表示させることができました)
 S3=SMALL(($C$18:$AH$18,$C$36:$AF$36),COLUMN(A1))
 ★右にコピー
 ◆その機械番号:S2:W2
 S2=IF(COUNTIF($C$18:$AH$18,S3)>=COUNTIF($S$3:S3,S3),
  INDEX($A$11:$AH$11,SMALL(IF($C$18:$AH$18=S3,COLUMN($C$18:$AH$18)),
  COUNTIF($S$3:S3,S3))),INDEX($A$29:$AF$29,SMALL(IF($C$36:$AF$36=S3,
  COLUMN($C$36:$AF$36)),COUNTIF($S$3:S3,S3)-COUNTIF($C$18:$AH$18,S3))))
 ★「配列数式」ですので、Ctrl+Shift+Enter で式を確定させてください

 >不良率順位 :S5:W5(large関数で表示させることができました)
 S5=LARGE(($C$20:$AH$20,$C$38:$AF$38),COLUMN(A1))
 ★右にコピー
 ◆その機械番号:S4:W4
 S4=IF(COUNTIF($C$20:$AH$20,S5)>=COUNTIF($S$5:S5,S5),
  INDEX($A$11:$AH$11,SMALL(IF($C$20:$AH$20=S5,COLUMN($C$20:$AH$20)),
  COUNTIF($S$5:S5,S5))),INDEX($A$29:$AF$29,SMALL(IF($C$38:$AF$38=S5,
  COLUMN($C$38:$AF$38)),COUNTIF($S$5:S5,S5)-COUNTIF($C$20:$AH$20,S5))))
 ★「配列数式」ですので、Ctrl+Shift+Enter で式を確定させてください

 ◆S2の式は、skさんの式と同じように思います。
 ◆効率順位の式が異なるか、Ctrl+Shift+Enter をしていないか?よくわかりません?

 ◆S4の式は、一部違う箇所があります。

 ◆基本的に、展開の考え方はあっているように思います

 ◆データを分割しても、計算ができないわけでは、ありませんが、難しくなります
 ◆すでに、ご指摘がありましたように、同じ種類のデータは1行にされる方が、いいように思います
 (Maron)


 >$A$6を$C$6に変更すると正しく動作しない理由やCOLUMN(A1)の意味等解らないままですが
 ◎COLUMN(A1)の意味等解らない
 ◆どこかのセルに、=COLUMN(A1) と入力してください。「1」と表示されます
 ◆その式を、右にコピーしてください、すると 、=COLUMN(B1) となり、表示は「2」になります
 ◆SMALL(範囲、順位)で第2引数に、1,2,3,4・・として利用しています
 ◆参考までに、下にコピーする場合は、ROW(A1)を使用します
 ◆また、COLUMN() とすると、式を入力してある、列番号を表示します

 ◎$A$6を$C$6に変更すると正しく動作しない理由
 ◆S2の式中の、数式バーの、SMALL(IF($C$20:$AH$20=S5,COLUMN($C$20:$AH$20)),COUNTIF($S$5:S5,S5))  
 の部分を指定して、「F9」を押してください
 ◆S3の数値が、$A$11:$AH$11 にあれば、S3 の数値があるセルの列番号が表示されているはずです
 ◆INDEX関数は、INDEX(配列、行番号、列番号) ですが、配列が1行の場合は行番号が省略でき、
 配列が1列の場合は列番号を省略できます
 ◆この式も、行番号を省略しています
 ◆列番号が計算されているので、INDEXの配列がA列からにする必要があります

 ◆わかりにくい説明ですが
 (Maron)


(Maron)さん
懇切な回答有難うございます。段々もやが晴れてきました。

当方の間違い

 ・S5=LARGE(($C$20:$AH$20,$C$38:$AF$38),COLUMN(A1))を
 ・S5=(LARGE(($C$20:$AH$20,$C$38:$AF$38),COLUMN(A2))/1000000)と記入。
 ◆S4にアルファベットの間違いがありましたが、基本的には「/1000000」に問題ありました。
 これを削除すると正常に機能しました。
 Q1:(A1)は(A2)でも問題はないように感じましたが如何でしょうか?
 ◆一覧表の不良率はPPMで表現しており、S5の表示はスペースの関係等で、%に変更したい。
 Q2:「/1000000]で表示するよい方法は無いでしょうか?

 ◆このブックには、31枚(31日分)の同じワークシートが有ります。全てに同じ式を貼付けています。
 ファイルを開く時、「数式を計算できません。開いているブックに循環参照がありますが、この場合循環参照は表示されません。・・・・」の表示が出ます。
 ◆そのまま使用しても、S4,S6の表示は問題ないようですが、S3,S5については、ワークシートの2枚目以降は反映されません。(ワークシート1枚目はOK)
 Q3:厚かましいお願いですが、この解決方法は無いでしょうか?


コメント返信:

[ 一覧(最新更新順) ]


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