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)"
指定した区切り文字を挿入した文字列を返します。
関数の名前はデタラメですので、替えてもらった方がいいです。
///
実際にニーズがどのようなものか、こちらの理解が至っていませんので、
何かあれば、補足欄にでも書いてみてください。
以上です。
会社から帰りマクロを使わせていただきました。
質問の足らないところを補っていただき有難うございました。理想結果が出ました。マクロの難しさを痛感しています。本当に有難うございました。
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)などの見出しが表示されます。
お礼が遅くなり申し訳ありません。説明の至らない質問にもかかわらず回答いただき有難うございました。
関数の組み合わせで複雑なことが出来るのは勉強になりました。有難うございました。
No.1
- 回答日時:
特定の列において
その最大と最小を求め
見出しとして表示したい
と、言うことでいいですか?
MAX MIN と、言う関数があります。
指定範囲中の各々の最大、最小を求め、
表してくれます。
如何でしょうか?
お役に立てていたならば幸いです。
この回答への補足
最大値と最小値は求められているのですが、その数値がどの位置にあるか、見出しの値を返し知りたいのです。
解かりすらい質問でごめんなさい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
英数字のみ全角から半角に変換
-
Excel テーブル内の空白行の削除
-
Microsoft365で提供しているアプリ
-
会社PCのメールが更新されない
-
【マクロ】違うブックのCallス...
-
大学のレポート A4で1枚レポー...
-
エクセルでXLOOKUP関数...
-
Microsoft Formsの「個人情報や...
-
Outlook で宛先が複数の場合の人数
-
【Excel VBA】PDFを作成して,...
-
outlookのメールが固まってしま...
-
会社のPCに入っているExcelでバ...
-
teams設定教えて下さい。 ①ビデ...
-
エクセルやワードを無料で使え...
-
Office2021を別のPCにインスト...
-
バソコンが二台とも壊れ後換装...
-
エクセルで英文字に入れた下線...
-
別シートの年間行事表をカレン...
-
【マクロ】文字を1文字づつ、...
-
マクロ自動コピペ 貼り付ける場...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
英数字のみ全角から半角に変換
-
outlookのメールが固まってしま...
-
会社PCのメールが更新されない
-
マイクロソフト 一時使用コード...
-
大学のレポート A4で1枚レポー...
-
Officeを開くたびの「再起動メ...
-
Microsoft Formsの「個人情報や...
-
one drive使えるpcを買う
-
マクロ自動コピペ 貼り付ける場...
-
PDFのハイパーリンクを自動的に変更し...
-
あらかじめ用意したテンプレー...
-
別シートの年間行事表をカレン...
-
【Excel VBA】PDFを作成して,...
-
エクセルでXLOOKUP関数...
-
office365って抵抗感ないですか?
-
ステータスバーの合計に表示さ...
-
【スプレドシート】IF関数の複...
-
Teamsで課題を提出します。 画...
-
Outlook で宛先が複数の場合の人数
-
Microsoft Officeを2台目のPCに...
おすすめ情報