ExcelのLARGEとSMALLについて

このQ&Aのポイント
  • ExcelのLARGE関数とSMALL関数を使用して、指定された条件に基づいて列番号を取得する方法について質問があります。
  • 質問者は、Excelの機能を使って列番号を取得しようとしていますが、特定の条件(○、×)を考慮する必要があります。
  • マクロの使用が制限されているため、関数だけを使用して解決する方法を探しています。
回答を見る
  • ベストアンサー

ExcelのLARGEとSMALLについて

こんにちは、冬の猫と申します。 ExcelのLARGEとSMALLについて教えてください。 添付画像のようなエクセルで、2行目に入力されている値から 一番左と一番右の「列番号」について取得したいと思っています。 ただし、1行目で「×」が付いているものは除外しないといけません。 ○、×の判断を除けば、 =IF(COUNTA(2:2)=0,"",LARGE(IF(2:2<>"",COLUMN(2:2)),1)) と =IF(COUNTA(2:2)=0,"",SMALL(IF(2:2<>"",COLUMN(2:2)),1)) で解決出来ました。 ですが、○、×の判断を入れることが出来ません・・・ 添付画像であれば、 2行目最小:2 2行目最小:3 5行目最小:6 5行目最大:7 の答えが欲しいのです。 また、作業領域を追加するとしても 行間ではNGとなっており、 この場合J列以降であれば、隠し作業領域として使用できます。 マクロは使ってはいけないルール(Excel管理上の会社規定)となっており なんとか、関数だけで実現を目指しております。 どうかよろしくお願いします。

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

  • ベストアンサー
  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.4

Q ○、×の判断を除けば、 =IF(COUNTA(2:2)=0,"",LARGE(IF(2:2<>"",COLUMN(2:2)),1)) と =IF(COUNTA(2:2)=0,"",SMALL(IF(2:2<>"",COLUMN(2:2)),1)) で解決出来ました。 ですが、○、×の判断を入れることが出来ません・・・ A 単純な添削では次のような数式で良いでしょう。 =IF(COUNTA(2:2)=0,"",LARGE(IF((2:2<>"")*(1:1="○"),COLUMN(2:2)),1)) と =IF(COUNTA(2:2)=0,"",SMALL(IF((2:2<>"")*(1:1="○"),COLUMN(2:2)),1)) 論理演算のANDは四則演算の乗算に置き換えられます。

その他の回答 (4)

  • Chiquilin
  • ベストアンサー率30% (94/305)
回答No.5

=MATCH(0,0/(A1:I1="○")/(A2:I2<>""),0) Ctrl + Shift + Enterで確定 =LOOKUP(1,0/(A1:I1="○")/(A2:I2<>""),COLUMN(A:I)) Enterで確定

WinterCat-Huyu
質問者

お礼

早速のご回答有難うございます。 大変勉強になりました。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 一例です。 最小の場合 =IF(COUNTA(2:2),MIN(IF((1:1="○")*(2:2<>""),COLUMN(1:1))),"") 最大の場合 =IF(COUNTA(2:2),MAX(IF((1:1="○")*(2:2<>""),COLUMN(1:1))),"") どちらも配列数式になりますので、Ctrl+Shift+Enterで確定してください。 ※ 該当データがない場合(×の列にしかデータがない場合)は「0」が表示されます。m(_ _)m

WinterCat-Huyu
質問者

お礼

早速のご回答有難うございます。 AND式でやっても駄目だったのですが、四則演算で可能だったのですね・・・ 大変勉強になりました。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.2

>なんとか、関数だけで実現を目指しております。 2行目の最大値 A3=LARGE(INDEX((1:1="○")*(2:2<>"")*COLUMN(1:1),0),1) 2行目の最小値 B3=LARGE(INDEX((1:1="○")*(2:2<>"")*COLUMN(1:1),0),COUNTIFS(1:1,"○",2:2,"<>")) 貼付画像はExcel 2013で検証した結果です。 Excel 2007以降のバージョンで再現できます。 最小値を求めるのにLARGE関数は不適切と思われるでしょうが対象外のセルに大きな数値を返す配列を数式内に設定することが複雑になるので対象セル数をカウントして逆順の値を抽出する手法を使いました。 尚、此処で使っているINDEX関数は配列値を加工するために使用していますのでLARGE関数へ引き渡す値は配列値になります。

WinterCat-Huyu
質問者

お礼

早速のご回答有難うございます。 このようなやり方もあるのですね。 勉強になりました。

回答No.1

K2 =min(index(column(a2:i2)+9^9*((a1:i1="×")+(a2:i2="")),)) L2 =max(index((a1:i1<>"×")*(a2:i2<>"")*column(a2:i2),))

WinterCat-Huyu
質問者

お礼

早速のご回答有難うございます。 大変勉強になりました。

関連するQ&A

  • ExcelのSMALL関数について

    ExcelのB列(B2:B50)にフラグ「0」または「1」が入力されています。 フラグ「0」が入力されている行番号を関数を使用して取得したいと思っています。 B列のフラグは順次更新されており、フラグ「0」の個数は複数あります。 下記の関数式(以下多めにオートフィル)で上記のことができるようになったのですが、 =IF(COUNTIF(B$2:B$50,0)<ROW(A1),"",SMALL(INDEX((B$2:B$50<>0)*10^5+ROW(B$2:B$50),),ROW(A1))) SMALL関数式の部分↓↓の意味がよくわかりません。 SMALL(INDEX((B$2:B$50<>0)*10^5+ROW(B$2:B$50),),ROW(A1)) どなたかご教授いただけないでしょうか。

  • MATCH LARGE などで重複を防ぐには

    いつもお世話になります。 WIN7 EXCELL2010 です。 次のような問題点があります。 シート「記入」から シート「月別」AC列 AD列を作業列に。 この時、例えば シート「月別」AD6 AD7 に同じ金額の20,000があり Z5 Z6 に「佐々木」が重複し 「星野」が表示されません。 これを防ぐ方法で何かいい解決策はありませんでしょうか。 ご指導いただければ幸甚です。 よろしくお願いします。 参考 Y4 =IF(OR(記入!C2="",AA2=0),"",COUNTA(記入!$C$2:$C2)) Z4 =IF(COUNTIF($AC$4:$AC$100,"?*")<ROW(G1),"",INDEX(AC$4:AC$100,MATCH(LARGE($AD$4:$AD$100,ROW(G1)),$AD$4:$AD$100,0))) AA4 =IF(AC4="","",SUMIF($AC$3:$AC$100,Z4,$AD$3:$AD$100)) AC4 =IF(COUNT(記入!$G$1:$G$3000)<ROW($A1),"",INDEX(記入!$C$1:$C$3000,SMALL(記入!G$1:G$3000,ROW(A1)))) AD4 =IF(AC4="","",SUMPRODUCT((記入!$B$2:$B$3000>=DATEVALUE($AB$2))*(記入!$B$2:$B$3000<DATEVALUE($AH$2))*(記入!$C$2:$C$3000=AC4),記入!$D$2:$D$3000))

  • エクセル 関数式の応用

    こんにちは エクセル2010を使っています。 画像の様なデータがあって、次のような式を教えてもらいました。 =IFERROR(INDEX($B$1:$B$7,SMALL(IF($A$1:$A$7=C$1,ROW($A$1:$A$7)),ROW(A1))),"") 画像では A列 B列の データが7行目までなのですが、これを3万行まで広げようと次のような式に変更してみましたが上手く行きません。(空白が返される) =IFERROR(INDEX($B$1:$B$30000,SMALL(IF($A$1:$A$30000=C$1,ROW($A$1:$A$30000)),ROW(A1))),"") 詳しい方、教えていただけませんか? よろしくお願いします。

  • エクセルの関数について。

    エクセルの関数。 Sheet1の作業列1のA2セルに =IF(COUNTA(Sheet2!2:2)=0,"",IF(Sheet2!A2="",A1,Sheet2!A2)) →数式1とする 作業列2のB2セルに =IF(A2=$D$2,ROW(),"") →数式2とする という数式を入れA2・B2セルを範囲指定 → B2セルのフィルハンドルで下へコピーしておきます。 (Sheet2の行数以上コピーしておく) そしてE2セルに =IF(COUNT($B:$B)<ROW(A1),"",INDEX(Sheet2!B:B,SMALL($B:$B,ROW(A1)))&"") →数式3とする という数式を入れオートフィルで列方向・行方向にコピーする。 教えて頂きたいことは、数式1、数式2、数式3が何を意味しているのか。 と、この数式を使って、表を作成したのですが、ある特定の数字(コード、D2セルに入力)を入力しても反応してくれない。 (E2~H2まで、空白セルの状態になります。) (sheet2は約1200行あります。) 教えて頂けないでしょうか?

  • エクセルの行挿入を楽にするには?マクロ?

    エクセルで、1000行近くのデータの各行間に、4列ずつ行挿入しています。 手作業のため時間がかかってしまいます。(4000行!) この作業をマクロ化できませんか? できれば、あける行間数も、4行以外の任意の数に指定できると更に助かります。

  • Excelでこのようなマクロを作りたい。

    Excelで列のA,B,Cがあります。 (列A,行1)のカラムには、果物というカラムを入れ、 (列B,行1)のカラムには、数量というカラムを入れ、 (列C,行1)のカラムには、値段というカラムを入れます。 列Aの果物というカラムの下に(すいか、バナナ、りんご)という 果物のリストがあり、列Bの数量というカラムの下に(1、2、3)という 数量のリストがあり、列Cの値段というカラムの下に(100、200、300)という値段のリストがあります。列Aのリストから、果物ではない。すいかをリストから選んだ場合に、列B,列Cの値を入力できないようにするか、列B,列Cに"-"が追加されるようなマクロを作りたいのですが… IF文を使うのはわかるのですがリストからの場合はどのように作ったら よいかわかりません!どなたか、教えてください! また、参考URLなどお願いします。

  • エクセルで ☆などのカウント関数ってありますか?

    count や counta はわかるのですが 例えば この行で ☆ がいくつあるかを数える関数はどれになりますか? IF関数かなんか使うのでしょうか? エクセル初心者でごめんなさい。

  • エクセル

    エクセルで列を結合することは出来たのですがそれを=A1&B1&C1をC1だけ行を変えることはできるのでしょうか?あと行間をあけることも可能でしょうか?

  • EXCEL オートフィルタの結果に対して最高値、最低をだす

    EXCEL オートフィルタを使いプルダウンで選択したあとに ある列の最低値、最高値、標準偏差などを表示したいのです。どのようにしたらよろしいでしょうか ? LARGE関数やSMALL関数をそのまま使うとフィルタで選択する前の全てのデータを使用しているようで使えません。 現在の条件 バージョンEXCEL2003 OS WindowsXP データ数 行 20000行程度 列 12列程度 よろしくお願いします。

  • エクセルで一気にコピーをしたいのですが、どうしたらいいでしょうか?

    エクセルで一気にコピーをしたいのですが、どうしたらいいでしょうか? エクセル2003を使用しています。 作業領域がIV列-62053行まであります。 A列-1行のデータを、A列-62053までコピーさせたいと考えています。 マウスで範囲を選択すればいいわけですが、行が多すぎて、範囲を選択するまでに時間がかかってしまいます。 一気にコピーするよい方法はないでしょうか? よろしくご教授願いますm(_ _)m

専門家に質問してみよう