• ベストアンサー

表中から最大値と最小値の見出しを求める方法を教えて

エクセルで作成した表があります。 表中から行の最大値と最小値の列見出しを求める方法を教えてください。 表は、行に1から1000、列に(1)~(10)とそれぞれ見出しをつけ、表の中には1.000から1.500のランダムな数字があります。 行の番号をB2セルに入れると最大値と最小値の列の見出し{例えば“(5)”というように…)を求めたいのです。行の数字は複数同じ値がある場合もあります。 良い方法がありましたら、教えてください。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

こんにちは。お邪魔します。 例えば、  =INDEX($D$2:$K$2,1,MATCH(MAX(INDEX($D$3:$K$1002,$B$2,0)),INDEX($D$3:$K$1002,$B$2,0),0))  =INDEX(列見出し範囲,1,MATCH(MAX(INDEX([データ範囲],$B$2,0)),INDEX([データ範囲],$B$2,0),0))  =INDEX($D$2:$K$2,1,MATCH(MIN(INDEX($D$3:$K$1002,$B$2,0)),INDEX($D$3:$K$1002,$B$2,0),0))  =INDEX(列見出し範囲,1,MATCH(MIN(INDEX([データ範囲],$B$2,0)),INDEX([データ範囲],$B$2,0),0)) のような感じでしょうか。 > 行の番号をB2セルに入れると最大値と最小値の列の見出し{例えば“(5)”というように…)を求めたいのです。 ここまではいいとして、 > 行の数字は複数同じ値がある場合もあります。 最大値・最小値が重複している場合は、 どうしたいのか、書いてありませんから悩ましいですね。 上の数式は、最大値・最小値が重複している場合でも、 最も左にある列見出し、ひとつ、を返します。 それでも良ければ普通に数式で解決できる訳ですが、 数式での回答が未だに付かない処をみると、 「最大値・最小値が重複している場合、該当する列見出しを列挙したものを返したい」 と読むのが、どうやら皆さんの解釈のようです。 関数だけでは無理なんじゃないでしょうか。 私には出来ないってだけかも知れませんが、 関数書ける人がいらっしゃったら私も勉強させて頂きたいです。 /// 私に出来ることとして、 最大値・最小値が重複している場合、該当する列見出しを列挙したものを返す ユーザー定義関数を書いてみました。     ' ' 以下、【標準モジュール】に過不足なくコピペ ' ' ============================== Option Explicit   Private Const MAXNUM As Double = 1.5   Private Const MINNUM As Double = 1 ' '  ――――――――――――――――――――――――――― Function MaxLookOver(データ範囲 As Range, ByVal 相対行位置 As Long, _             Optional ByVal 区切り文字 As String)   Dim mtxData()   Dim mtxFieldName()   Dim sBuf As String   Dim dblTarget ' As Double   Dim dblTemp ' As Double   Dim arrnIdxTarget() As Long   Dim tnXSize As Long   Dim cnEqv As Long   Dim i As Long   If データ範囲.Row < 2 Then     MaxLookOver = "#データ範囲!"     Exit Function   End If   mtxFieldName() = データ範囲.Rows(1).Offset(-1).Value   mtxData() = データ範囲.Value   tnXSize = UBound(mtxData, 2)   dblTarget = MINNUM   For i = 1 To tnXSize     dblTemp = mtxData(相対行位置, i)     Select Case dblTemp     Case Is > dblTarget       dblTarget = dblTemp       cnEqv = 0&       ReDim arrnIdxTarget(cnEqv)       arrnIdxTarget(cnEqv) = i     Case dblTarget       cnEqv = cnEqv + 1&       ReDim Preserve arrnIdxTarget(cnEqv)       arrnIdxTarget(cnEqv) = i     End Select   Next i   Erase mtxData()   sBuf = mtxFieldName(1, arrnIdxTarget(0))   For i = 1 To cnEqv     sBuf = sBuf & 区切り文字 & mtxFieldName(1, arrnIdxTarget(i))   Next i   Erase mtxFieldName(), arrnIdxTarget()   MaxLookOver = sBuf End Function ' '  ――――――――――――――――――――――――――― Function MinLookOver(データ範囲 As Range, ByVal 相対行位置 As Long, _             Optional ByVal 区切り文字 As String)   Dim mtxData()   Dim mtxFieldName()   Dim sBuf As String   Dim dblTarget ' As Double   Dim dblTemp ' As Double   Dim arrnIdxTarget() As Long   Dim tnXSize As Long   Dim cnEqv As Long   Dim i As Long   If データ範囲.Row < 2 Then     MinLookOver = "#データ範囲!"     Exit Function   End If   mtxFieldName() = データ範囲.Rows(1).Offset(-1).Value   mtxData() = データ範囲.Value   tnXSize = UBound(mtxData, 2)   dblTarget = MAXNUM   For i = 1 To tnXSize     dblTemp = mtxData(相対行位置, i)     Select Case dblTemp     Case Is < dblTarget       dblTarget = dblTemp       cnEqv = 0&       ReDim arrnIdxTarget(cnEqv)       arrnIdxTarget(cnEqv) = i     Case dblTarget       cnEqv = cnEqv + 1&       ReDim Preserve arrnIdxTarget(cnEqv)       arrnIdxTarget(cnEqv) = i     End Select   Next i   Erase mtxData()   sBuf = mtxFieldName(1, arrnIdxTarget(0))   For i = 1 To cnEqv     sBuf = sBuf & 区切り文字 & mtxFieldName(1, arrnIdxTarget(i))   Next i   Erase mtxFieldName(), arrnIdxTarget()   MinLookOver = sBuf End Function ' ' ============================== 以上を【標準モジュール】に貼り付けたら、 セルに普通の数式を入力するのと同じように、  =MaxLookOver($D$3:$K$1002,$B$2)  =MaxLookOver([データ範囲],$B$2)  =MinLookOver($D$3:$K$1002,$B$2)  =MinLookOver([データ範囲],$B$2) のように記入して普通に確定すれば、出来上がりです。 [データ範囲]には、列見出し・行見出しを含まないデータ範囲を指定します。 [データ範囲]先頭行のひとつ上の行に、列見出しがあるという前提です。 オプションで、第三引数に区切り文字を指定できます。 引数を省略すると、  "(5)(8)" が返る場合で例えると  =MaxLookOver([データ範囲],$B$2,"-") のように指定することで  "(5)-(8)" 指定した区切り文字を挿入した文字列を返します。 関数の名前はデタラメですので、替えてもらった方がいいです。  /// 実際にニーズがどのようなものか、こちらの理解が至っていませんので、 何かあれば、補足欄にでも書いてみてください。 以上です。

udonnteisyoku
質問者

お礼

会社から帰りマクロを使わせていただきました。 質問の足らないところを補っていただき有難うございました。理想結果が出ました。マクロの難しさを痛感しています。本当に有難うございました。

その他の回答 (2)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

関数で処理する方法で作業列を使って行います。 元のお示しのデータがB4セルからK4セルにかけて(1)~(10)が入力されており、A5セルから下方に1からの番号が入力されているとします。 そこでL5セルには次の式を入力して下方にドラッグコピーします。 =IF(COUNTIF(B5:K5,MAX(B$5:K$1500)),ROUNDDOWN(MAX(L$4:L4),-2)+100,IF(COUNTIF(B5:K5,MIN(B$5:K$1500)),MOD(SUM(L$4:L4),100)+1,"")) そこで結果の表示ですが例えばB2セルには最大値、B3セルには最小値とそれぞれ文字列を入力します。C2セルには最大値を、C3セルには最小値を表示させ、D列から右の列には2行目では最大値の入った列の(1),(2)などの項目名を、3行目には最小値の入った項目名を表示させます。そのためにC2セルには次の式を入力して右横方向にドラッグコピーしたのちに1行目下方までドラッグコピーします。 =IF(COLUMN(A1)=1,IF(ROW(A1)=1,MAX($B$5:$K$1500),MIN($B$5:$K$1500)),IF(AND(COLUMN(A1)>1,ROW(A1)=1),IF(COUNTIF($L:$L,(COLUMN(A1)-1)*100)=0,"",INDEX($B$4:$K$4,MATCH(MAX($B$5:$K$1500),INDEX($B:$K,MATCH((COLUMN(A1)-1)*100,$L:$L,0),1):INDEX($B:$K,MATCH((COLUMN(A1)-1)*100,$L:$L,0),10),0))),IF(AND(COLUMN(A1)>1,ROW(A1)=2),IF(COUNTIF($L:$L,COLUMN(A1)-1)=0,"",INDEX($B$4:$K$4,MATCH(MIN($B$5:$K$1500),INDEX($B:$K,MATCH(COLUMN(A1)-1,$L:$L,0),1):INDEX($B:$K,MATCH(COLUMN(A1)-1,$L:$L,0),10),0))),""))) これで最大値や最小値に加えて、最大値や最小値にダブりが有る場合でも(1)、(2)などの見出しが表示されます。

udonnteisyoku
質問者

お礼

お礼が遅くなり申し訳ありません。説明の至らない質問にもかかわらず回答いただき有難うございました。 関数の組み合わせで複雑なことが出来るのは勉強になりました。有難うございました。

  • Nouble
  • ベストアンサー率18% (330/1783)
回答No.1

特定の列において その最大と最小を求め 見出しとして表示したい と、言うことでいいですか? MAX MIN と、言う関数があります。 指定範囲中の各々の最大、最小を求め、 表してくれます。 如何でしょうか? お役に立てていたならば幸いです。

udonnteisyoku
質問者

お礼

返事遅くなり申し訳ありません。回答いただき有難うございました。

udonnteisyoku
質問者

補足

最大値と最小値は求められているのですが、その数値がどの位置にあるか、見出しの値を返し知りたいのです。 解かりすらい質問でごめんなさい。

関連するQ&A

  • エクセルの表から近似値の行列番号を求めたい

    エクセルで作成した表があります。 その表中から別に指定した値の近似値の一番上の行と一番左の列の値を求める方法を教えてください。 表は、行に1~9、列にA~Eとそれぞれ見出しをつけ、表の中にはランダムな数字があります。 その中から、別に指定した値の近似値の行列の見出し(例えば“3-C”というように…)を求めたいのです。 良い方法がありましたら、教えてください。 よろしくお願いします。

  • 条件に合う最大・最小

    エクセル 条件に合う最大 最小 について このような感じです。 1___A_____G_______H_____I_____O____ 2_________4_______3____3.1____1____ 3_________4_______3____3.1____2____←最大値 4_________3.1_____3____3.1____2__ 5________-2.1____-2_____1____-1__ 6________-2.5____-2_____1____-2____←最小値 7________-2.2____-2_____1____-2___ 以下値があります。 I列の最大値又は、最小値で複数最大(最小)がある場合には、 その最大(最小)の同じ行のO列の大きい(小さい)方で、 最大値(最小値)を判断する。 同様にO列も同じならH列の大きい(小さい)方で、 また、H列も同じなならG列の大きい(小さい)方で、 最大値(最小値)を求める。 優先順位は、I列→O列→H列→G列の順 *最小値の場合には、全て小さい値を対象。 上記例示の場合には、 最大値は3行目 最小値は6行目 値を重み付け(I列を1000倍等)してから合計して、最大・最小を求める方法以外での質問です。例示では、簡単に示していましたが、それぞれ値の桁数が異なる場合には、重み付けの係数をその都度してしなければならなくなりますので。 また、最大値・最小値に値する行(A列)に最大・最小等を追記したい。 行で単純に順次値を比較する方法はないのでしょうか? 解決法を教えて頂きたいのですが、宜しくお願いします。

  • Excel2000 エクセル 範囲内で条件を満たす最小の列を返す方法

    Excel2000 エクセル 範囲内で条件を満たす最小の列を返す方法 Excelで関数を使って「ある範囲内で条件を満たす最小の列を返す」 というセルの作成方法を教えていただけませんか? 例えばA1からJ1の1行に 0 0 0 1 2 1 3 6 0 0 という数値が入力されているとします。 この10個のセルを左から順に「セル内の値>0となる」という条件に合うか調べた場合、 何列目に条件を初めて満たす事ができるかを返すセルを作りたいのです。 この場合「セル内の値>0」の条件を満たす最小の列のセルは、 「1>0」となるセルD1となり、左から4列目なので 「4」 を返したい。 出来れば「ある範囲内で条件を満たす最大の列を返すセル」の作成法も教えていただけませんか? (1)の例の場合「セル内の数値>0」の条件を満たす最大の列のセルは、 「6>0」となるセルH1となり、左から8列目なので「8」を返すようなセルを作りたい。 複数のシートにデータがあり、それらのシートに一括でこのセルを作りたいため、 補助となる行を入れるのはよいのですが、 行列を入れ替えるような操作がいらない方法が知りたいです。 どうかよろしくお願いします。

  • セル内で変化する値の最大値、最小値を抜きだす。

     初めまして、よろしくお願いします。  セル内でランダムに変化させる値の最大値と最小値を抜き出すマクロを教えていただきたいと思います。  セルD10からD20まで、セルおのおのランダムに変化させていきます。そのセルごとで、表示された最大値の値をF10からF20に、最小値をH10からH20へ抜き出していきたいと思います。 セルが変化した場合に実行する Private Sub Worksheet_Change(ByVal Target As Range) を使用し、FやHの数値と比べて、最大値、最小値の条件が合えばコピーして抜き出すやり方だと思います。他のやり方が有れば、他の方法でもかまいません。  他のセルには他のデーターが入っています。  当方初心者ですので、応用が利くように説明していただければありがたいと思います。(おのおの変化するセルがD10からD30へ範囲の拡大した場合の説明。位置がD列からE列、F列列からG列、H列からJ列へと変化した場合の説明、セルD10からD20まで、D列ですが、ランダムに変化するセルがI10からR10の行へ、同様に抜き出す最大値がI15からR15行へ、最小値がI18からR18へ、列から行へ、変化できるような説明)  解る方、よろしくお願いします。

  • Excelで、ある範囲内の最大値や最小値の『文字の形』や『文字の大きさ』を変えたいのですが・・・

     エクセルの初心者です。よろしくお願いいたします。  ある範囲内(複数のセル・行・列・シート)で、数値の最大値と最小値の文字の『形』や『色』を変えたいのです。  例えば、「セルA1」から「セルA100」までに入力されている、100個の数値の中で、  最大値は「明朝体」に、  最小値は「斜体」に、  変えるということを行いたいのです。  簡単な方法があればお教えください。よろしくお願いいたします。

  • エクセルの最大値と最小値に色をつける方法について教えてください。

    こんちには。 エクセルの最大値と最小値に色をつける方法を教えてください。 列でなく行でしたいのですが、なかなか思うようにできません。 他の質問も見て、条件付き書式を使うのはわかっているのですが…。 例えば、B3からH3の最大値を赤、最小値を青にしたいのですが、 複写?をすると同じ数字がずらーっと並んでしまうのです。 そのまま下のB4からH4、またその下に…と複写もできる最大値と最小値の色のつけ方を教えてください。 よろしくおねがいします。

  • エクセルで見出しの設定について

    エクセル2003で帳票作成中、初期設定では列の見出しはAから始まるローマ字で行見出しは1から始まる数字になっていますが、作成中の列見出しのローマ字が数字に変わってしまいました。元に戻すための方法について教えていただけないでしょうか?

  • ExcelVBA表の見出しを付ける方法について

    ExcelVBAで複数の表に、同じ見出し行を入れる方法を教えて下さい。 ExcelのSheet1に数字だけで構成された表があります。それぞれ意味があり、例えば「4列は市町村コード」「5列は性別」「17列は年齢」「20列は疾病コード」という感じです。 VBAで市町村・男女別で、年齢と疾病コードに一致した場合にカウントする場合の表は回答をいただき作成できました。 ですが50以上×男女分の表を作るのに疾病コードを  Range("C3,C136").Value = 14500  Range("D3,D136").Value = 14510 と、していると、入力間違えも発生しかねないですし、きりがなく、他に良い方法があればご教授いただけましたらと思います。 疾病コードの数字は連番ではないためコピーができません。 疾病コードは「132」あります。 よろしくお願い致します。

  • エクセルの任意範囲の最大値最小値の取得について

    エクセルデーター任意範囲の最大値と最小値の取得方法について教えて下さい。 例は以下の形式です。 //////////////////////////////////////////////////////////////// A B C D E G H I O 1 0.51 1.32 0.32 0.34 2 0.59 1.43 0.33 0.35 3 0.62 1.59 0.30 0.36 4 0.60 1.57 0.31 0.30 5 0.59 1.62 0.34 0.39 ←"+1"          6 0.68 1.64 0.34 0.34 7 0.68 1.60 0.33 0.33 8 0.59 1.58 0.31 0.30 9 0.49 1.40 0.33 0.29 10 0.38 1.20 0.29 0.29 . . . . . 11 -1.2 -2.3 -1.3 -1.4 . . . . . E列:昇順に1からの値 G列,H列,I列,O列:完全な規則性はない正負小数点の値。大きく見ると値は増加や減少ではあるが、1行ずつ見ると常に増加や減少とはなっていない。 最終行も未確定で、10回または、5回の同じ様なデーターの繰り返しで、繰り返し点(最大・最小)の値も決まっていない。 10回または、5回の各繰り返し点(最大・最小)を抽出し、以下の値を追記したい。 I列の最初の最大値の同じ行(B列)に"+1"、最小値の同じ行(B列)に "-1"を追記したい。同様に、"+1"~"+10","-1"~"-10"または、 "+1"~"+5","-1"~"-5"を追記したい。 I列が同じ場合、O列→H列→G列の順に最大値と最小値を判断する。 説明不足であるかもしれませんが、エクセル関数の組み合わせや、マクロ、VBAいかなる方法でもかまわないので、早急に処理できる良い方法はないでしょうか? よろしくお願いします。

  • Excelの表で、行と列の見出しを、そっくりそのまま入れ替えたい。

    Microsoft Excel2000(OS=Win・XP)で表(表の内容は賃金センサスです。)を作成しているのですが、行と列の見出しをそのまま入れ替えて、セルもちゃんと内容に合うように、自動的に入れ替わるような方法って無いでしょうか???もし方法があれば誰か教えて下さい~! (↓表の状態です) ・ワークシートは、入力用・印刷用1・印刷用2の、合計3つがあります。 ・入力用と印刷用1のワークシートは、”行が年齢、列が年度”となっています。 ・印刷用2のワークシートは、”行が年度、列が年齢”となっています。 ・印刷用1のワークシートのセルには、計算式を入れてあり、入力用のワー クシートのセルに入力すると、ある計算をして、自動的に数字が表示され るようにしています。 ・印刷用2のワークシートのセルには、計算式はまだ入れていません。 →印刷用1も2も、列と行が交差するセルの内容は同じだし、どうにか簡単に印刷用2を作成できないかとおもっているのです。

専門家に質問してみよう