• 締切済み

グループの中の最大値の属性を表示したい。

お世話になります。 ちょっと行き詰ってしまったので、ご教示ください。 貼付画像のとおりの表について、(1)整理番号のグループで属性毎の数値の合計を比較して最大値のものをグループの属性として導きだしたいです。 何度もやってみましたが、ピボットテーブルを使ってみたり・・(汗)属性毎の合計を表示させるまではできましたが、そこから先が進みません。 何卒、よろしくお願いいたします。

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.6

回答No.5の補足です。 結果を出力するシートの3つのセル((1)整理番号、(2)属性(・・・)、備考)は手入力した状態でマクロを実行してください。(1)整理番号の1つ下のセルが「答えの書き出し位置」になります。

すると、全ての回答が全文表示されます。
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.5

私は、このような時にはマクロを使うようにしています。 ピボットで属性そのものを出そう(数値的な意味合いでない文字列など)を表示しようとすると大変です。VBAでピボットの機能を改造する必要があります。 数式を使っても出せますが、算式が複雑になり、変更が大変になります。一番危ないのが算式の登録忘れです。削除忘れもあります。 下記マクロは標準モジュールに貼り付けてください。 ※マクロの使い方は、ネットにたくさんあると思います。 ※開発タブを表示してVisual Basicを選択し、挿入>標準モジュールとします。 「Sheet1」、「Sheet2」、「データの書き出し位置」、「答えの書き出し位置」A3、B3などは実際のBookに合わせてください。 質問の添付図にある「答え」の文字は入力しないでください。コードを貼り付けて、別名保存して実行してみてください。 当方、Excel2010です。 Public ws1 As Worksheet  '// データのシート Public ws2 As Worksheet  '// 答えのシート Public Const TopS = "A3" '// データの書き出し位置 *** Public Const TopD = "B3" '// 答えの書き出し位置 *** Sub 抽出01()  Dim num As Long  '// 整理番号  Dim rgS As Range, rgD As Range '// 書き出しセル  Dim dMax As Long, Zokusei As String '// 最大値とその属性  Dim rw As Long, rw2 As Long '// 行カウンタ  Set ws1 = Worksheets("Sheet1"): Set rgS = ws1.Range(TopS) '// ***  Set ws2 = Worksheets("Sheet2"): Set rgD = ws2.Range(TopD) '// ***  '// 答えエリアをクリア(何も無いときに対応)  rgD.Value = "Dummy": rgD.Offset(1, 0).Value = "Dummy"  ws2.Activate: rgD.CurrentRegion.Select  Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Clear  '// データを調べる  With rgS   num = .Offset(rw, 0): dMax = 0   While .Offset(rw, 0) <> ""    If .Offset(rw, 0) = num Then     '// 最大値を探す     If .Offset(rw, 3) > dMax Then      Zokusei = .Offset(rw, 2)      dMax = .Offset(rw, 3)     End If    Else     '// 整理番号が変われば書き出し     rgD.Offset(rw2, 0) = num: rgD.Offset(rw2, 1) = Zokusei     rw2 = rw2 + 1              '// 新たな整理番号データ     num = .Offset(rw, 0): Zokusei = .Offset(rw, 2):     dMax = .Offset(rw, 3)    End If    rw = rw + 1   Wend   '// 最後の整理番号   rgD.Offset(rw2, 0) = num: rgD.Offset(rw2, 1) = Zokusei  End With  '// 罫線を引く  rgD.CurrentRegion.Borders.LineStyle = True  rgD.Select End Sub

bambootake
質問者

お礼

お忙しいところ、ご回答いただきありがとうございます。 急ぎの仕事だったので結局、手作業で行きました。 マクロは今の自分の能力ではなかなか難しく、数式が崩れたときに再現不可なので、もう少し、スキルを上げてから試してみようと思います。 ありがとうございます。

すると、全ての回答が全文表示されます。
  • msMike
  • ベストアンサー率20% (371/1817)
回答No.4

[No.2補足]へのコメント、 》 #NAME?がすべてのセルに表示され、できません そっかぁ~、[定義された名前]の範疇にある[名前の定義][名前の引用][名前の貼り付け][選択範囲から名前を作成][名前の管理]等の[名前]とは何かをご存知ないのですねぇ。序乍ら #NAME? の意味は「そんな名前なんてありゃシネ~よ」という意味です。 そのことは、追々ご自分で勉強なさるとして、… [回答No.2]に於いて、 1.は削除 2.で提示した式を下記に変更して、  ̄ ̄=SUMPRODUCT(($A$2:$A$19=$A22)*($C$2:$C$19=D$21)*$D$2:$D$19) 3.を再実行してみてくださいナ 乞結果報告

bambootake
質問者

お礼

ありがとうございます。 試してみましたが、うまくいかず、急ぐ仕事だったので結局、力技で手作業で行きました。 自分の技術不足、能力不足にかかわらず、教えていただきありがとうございました。 また、次も同じような課題が出そうです。 ちょっとづつ、スキルを身に着けていきたいと思います。 今後ともよろしくお願いいたします。

すると、全ての回答が全文表示されます。
  • msMike
  • ベストアンサー率20% (371/1817)
回答No.3

[No.2お礼]へのコメント、 》 こちら、ウィンドウズです 当方も同じですよ。 そんなことより、Excel のバージョンを示すのが質問する際の常識です。今回が初めての質問でもあるまいにィ~ 当方は Win10配下で Excel 2019 を使用中です。(という具合にネ!) 恐らく Excel 2007以降も同じと推察してますが… Alt+MC(または /MC)の意味は、下記と同じ操作です。 [数式](forMulas)⇒[選択範囲から作成](Create from selection)

bambootake
質問者

お礼

すいません。 苦戦して頭いっぱいでした。 エクセルのバージョンは2019 32ビットでした。 OSはWIN10 pro です。

すると、全ての回答が全文表示されます。
  • msMike
  • ベストアンサー率20% (371/1817)
回答No.2

添付図参照 1.範囲 A1:D19 選択 ⇒ Alt+MC ⇒ “上端行”のみにチェック入れ ⇒ [OK] 2.次式を入力したセル D22 を右方&下方にズズーッとオートフィル  ̄ ̄=SUMPRODUCT((Mno=$A22)*(Atr=D$21)*Val) 3.次式を入力したセル B22 を下方にズズーッとオートフィル  ̄ ̄=INDEX(D$21:G$21,MATCH(MAX(D22:G22),D22:G22,0))

bambootake
質問者

お礼

すいません。 画像が添付できず、困ってます。 回答ありがとうございます。 早速、教えていただいたとおりにやってみようと思います。 Alt+MCのMCキーがありません。 こちら、ウィンドウズです。汗 調べてみたのですが、わからず。。

bambootake
質問者

補足

何度もやってみましたが、#NAME?がすべてのセルに表示され、できません。汗

すると、全ての回答が全文表示されます。
  • msMike
  • ベストアンサー率20% (371/1817)
回答No.1

数式が貴方の希望通りになるか否かを検証するために、[答え]表の属性欄を埋めたものを示してください。(そのくらいは言われなくてもォ~…)

bambootake
質問者

補足

有難うございます。 属性欄埋めました。 画像アップしますのでよろしくお願いいたします。

すると、全ての回答が全文表示されます。

関連するQ&A