お世話になります。
よろしくお願いいたします。
次のHPで紹介されている方法(方法3)を用いて空白セルを詰めて表示したいと
考えていますが、配列数式が初めてなもので、なかなか理解が進みません。
http://office-qa.com/Excel/ex257.htm
とくに次の数式の内、IFの中では何をしているのかよく分かりません。
{=INDEX(A:A,SMALL(IF(A:A<>"",ROW(A:A)),ROW()))}
ご教示頂ければ幸いです。
よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
No.3です。
>ROW(A:A)の処理がよくわかりません。
とありますが、
これはINDEX関数で範囲指定した行数分だけを数式に入れます。
「TRUE」の行の行番号を取得するためです。
必ず1行目から指定します。相対参照にしてしまうとフィル&コピーするたびに
行番号がずれてしまうため、絶対参照にする必要があります。
数式を入れるセルが何行目であっても必ず
>ROW(A$1:A$1000)
のように1行目からの指定です。
そうしないとINDEX関数で範囲指定した何行目を返すか?という意味の数式ですので
結果がずれるのを防ぐためです。
※ 文章で色々説明しても一気に理解できないかもしれませんが
ご自身で試行錯誤してみてください。m(_ _)m
>「TRUE」の行の行番号を取得するためです。
なんとなくわかってきました。これでSMALLの中で配列を作ってるんですね。
配列も基礎から勉強してみようと思います。ありがとうございました。
No.4
- 回答日時:
まず各々の関数の使い方は理解できているだろうか。
IF関数とROW関数について理解できていれば問題なく読み取れるはずなのだが…。
ROW関数は引数のセルの行番号を返す関数だ。
ROW(A1)ならば1
ROW(C12)ならば12
が値として返ってくる。
そして引数が無い場合は、そのROW関数が入力されているセルの行番号を返す。
B2セルにROW()とあれば2
F24セルにROW()とあれば24
が値として返ってくる。
IF関数は条件式と条件が成立した時の挙動、条件が成立しない時の挙動を引数に記述するが、挙動を省略した場合は
成立時を省略すると"TRUE"
不成立時を省略すると"FALSE”
というちょっと特殊な値が返ってくる。
もう1つ、A:Aの意味。
これはA列を上から下まで全部という意味。
とくに配列数式で示された場合は上から順番という意味になる。(A1:A1048576 と同じ)
これらを念頭に入れてもう一度読み直して見よう。
範囲を決めて配列数式を使わずに同じ事をさせるなら
(※面倒なので範囲を3行として示す)
1行目 =INDEX(A1:A3,SMALL(IF(A1<>"",ROW(A1)),ROW()))
2行目 =INDEX(A1:A3,SMALL(IF(A2<>"",ROW(A2)),ROW()))
3行目 =INDEX(A1:A3,SMALL(IF(A3<>"",ROW(A3)),ROW()))
こんな表記になる。
ROW(A:A)の動作が理解できなかったのですが、各行に応じた番号を返すということなのでしょうか。
ためしに=ROW(A:A)として入力しても、どの行でも返す値は1になるのですが。。。
また、配列数式を使わなかった場合の式をご提示いただきましたが、
> 1行目 =INDEX(A1:A3,SMALL(IF(A1<>"",ROW(A1)),ROW()))
> 2行目 =INDEX(A1:A3,SMALL(IF(A2<>"",ROW(A2)),ROW()))
> 3行目 =INDEX(A1:A3,SMALL(IF(A3<>"",ROW(A3)),ROW()))
1行目から入れてみると、
2行目以降は#NUM!となります。
No.3
- 回答日時:
こんにちは!
お示しのサイトの場合、1行目に数式を入れていますので
その数式で大丈夫だと思いますが、1行目はタイトル行になっている場合が多いはずですので、
自分としては
=IFERROR(INDEX(A$1:A$1000,SMALL(IF(A$1:A$1000<>"",ROW(A$1:A$1000)),ROW(A1))),"")
という数式にします。
※ 配列数式はPCにかなりの負担を掛けますので、
列全体を範囲指定してしまうと計算速度が極端に落ちる場合があります。
なので、1000行程度の範囲でやめています。
(3000~5000行くらいなら問題ないと思います)
>IFの中では何をしているのかよく分かりません
文章で説明するより↓の画像で説明した方が判りやすいかもしれません。
① B2セルに
=A2<>""
として下へコピーしています。
これで空白行は「FALSE」(0)、何らかのデータが入っている行は「TRUE」(1)になります。
② C2セルに
=ROW()
という数式を入れ下へコピー
これで行番号が表示されます。
③ D2セルに
=B2*C2
として下へコピー!
これで「TRUE」の行の行番号が表示されます(「FALSE」の行は「0」になります)
配列数式の結果として
INDEX関数の範囲内のA列が空白以外の行番号の小さい順に表示!
というコトになります。
この程度でお判りになるでしょうか?m(_ _)m
ありがとうございます。
ご説明いただいた内容は理解できましたが、
振り返って当てはめてみると、
No.4の方へのお礼にも書いたのですが、ROW(A:A)の処理がよくわかりません。
各行においてどのような値を返しているのでしょうか。
No.1
- 回答日時:
リンク先の説明では、難しいでしょうか?
当方、XL2003なので配列の列指定ができないので
=INDEX(A:A,SMALL(IF($A$1:$A$30<>"",ROW($A$1:$A$30)),ROW(A1)))
[Ctrl]+[Shft] +[Enter] で確定、配列数式。{ }で挟まれる
となります。
で、
“達人”芳坂和行氏に学ぶ、エクセル「配列数式」講座
http://pc.nikkeibp.co.jp/pc21/special/hr/
(まだ残ってた)はどうでしょうか?
一応説明はしてみますね
作業列が、配列の考え方にあたる部分。
C1セルに、
=IF(A1<>"",ROW(A1))
下へオートフィル
E2セルに =ROW()
下へオートフィル
F2セルに
=INDEX(A:A,SMALL($C$1:$C$8,$E2))
右へ下へオートフィル エラー処理なし。
基本的にこのような(オートフィルするような)配列数式は計算が遅くなるので、作業列使ったほうが良いです。
C11セル 0
C12セル =SUM(A12<>"",C11)
下へオートフィル
E12セルから連番
F12セル
=INDEX(A$11:A$18,MATCH($E12-1,$C$11:$C$18)+1)
右へ下へオートフィル
(右へオートフィルしている時点で冗長さは残っていますが)
計算速度を早くする「二分探索木」なんて方法になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 列の複数ある空白セルを飛ばして、セルに並べて表示したい 3 2023/02/12 16:49
- Excel(エクセル) エクセルの数式について教えてください。 2 2023/03/04 09:54
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Excel(エクセル) IFERROR、SMALL関数について 2 2022/08/22 23:40
- Excel(エクセル) Excel 、この式はどのように解釈すればいいのでしょうか 4 2023/02/03 08:53
- Visual Basic(VBA) エクセルの数式で教えてください。 1 2023/07/31 15:49
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Excel(エクセル) SUMIFのIF分岐について 4 2023/04/15 12:57
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【関数】スペースがいくつ入っ...
-
西暦や和暦の表示をyyyymmdd表...
-
Excelのセルを飛ばして入力する
-
Excelのオートフィル
-
別シートからの文字を変更
-
Excel 2019 のピボットテーブル...
-
エクセルの行の抽出について質...
-
【マクロ】エクセルにかいてあ...
-
スプレッドシート クエリ関数 1...
-
エクセルでセルに「氏名を入力...
-
MOS365 Excel Expert / Excel R...
-
excelの不要な行の削除ができな...
-
EXACT関数とIF関数の組み合わせ...
-
スプレッドシートの関数VLOOKUP...
-
Excelで全角を半角にしたいので...
-
Excel初心者です。 詳しい方、...
-
エクセルの数式で教えてください。
-
4つのパターンを表示するEXACT...
-
スマートな関数を教えて下さい。
-
【Excel】セル内の時間帯が特定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ファイル内にある数字の出現回...
-
Excel関数の先頭に「@」が入っ...
-
エクセルの気味悪い不思議
-
Excel VBAで、実行時にsheet上...
-
表示されている人数だけを数え...
-
他人が作ったマクロの理解
-
Excelの関数について質問です。
-
Excel 集計表
-
エクセル 日時の計算式について
-
Excelの関数に関して質問です。...
-
エクセル:セル内の文字列の下...
-
絞り込み検索
-
エクセルの関数で
-
エクセルの書式設定について教...
-
余分なEXCELファイルに印刷され...
-
VBA 同一シート内での転記の仕方
-
長期休みの関数はありますか
-
Excelの空のセル
-
エクセルで入力してある文を別...
-
Excelのマクロで、セルを結合し...
おすすめ情報