
図1
A B C D
1 3 1 3
2 1 4 ⇒ 2 5
3 5
4 2
(1) 図1の様に、A列の任意のセルに入力された値を上から順に選択して、C列の1行目から表示させる方法
(2) 上記同様B列の任意のセルに入力された値を上から順に選択して、D列の1行目から表示させる方法、但しB列の左側に値が有る場合(図1の場合はB2セル)は次の値から参照する
以上2点の回答(C、D列に入力するべき関数)をお願いします。
※A列及びB列には値が入らない(空白)場合もあります
※今回、関数のみでの回答を希望しております(マクロ不可)
※実際の表では選択と表示させるシートは分かれています
返答が一時遅れる場合も有りますがご了承下さい。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
一見して、C列に持って来るセルが、不定の課題は関数では複雑になるので、これも複雑な式になる事が経験から判る。
関数の特徴を知らないから、難しいことも判らず、色々回答に注文をつけることになる。
・操作(フィルタやフィルタオプションの設定)で出来ないか考える 既回答あり。略。
・VBAでは極極く簡単になる場合がある(これなどコード数行)ので、VBAを質問者が勉強すべきだ。
簡単なVBAに比べると、配列数式を理解するほうが、もっと難しいのではないかと思うぐらいだ。
このコーナーは回答者や読者にたいする、テスト問題ではないのだから、色々の型の回答に接して、自分の不勉強を知り、勉強のこと。
ーー
配列数式になるような場合、作業列を使うと、やや考えやすくなる。
(1)の場合
例データ データは第2行目から。元の質問のB列データではない。
A列 B列 C列
データ連番つめて表示
111
ーー4
ーー2
42
ーー
23
A列ーは空白セル、B列は関数の結果で空白
BれつB2の式 =IF(A2<>"",MAX($B$1:B1)+1,"")
下方向に式を複写。
C2は =INDEX($A$2:$A$100,MATCH(ROW()-1,$B$2:$B$100,1))
下方向に式を複写。
(2)は
データデータ作業列つめて表示
ー313
14ー5
ー526
85ー
ー63
C2の式 =IF(AND(A2="",B2<>""),MAX($C$1:C1)+1,"")
下方向に式を複写
D2の式 =INDEX($B$2:$B$100,MATCH(ROW()-1,$C$2:$C$100,1))
下方向に式を複写。
(1)はC列、(2)はD列において複写行数を作業列のMAX数字を超えないようにしないとならない。これはとりあえず省略する。
一種の関数による抜き出し問題といえる。
(1)は空白でない、(2)は左列が空白でないという条件。
Googleで「imogasi方式」で照会すれば、私の回答したやり方と、他の回答者の方法が載った、抜き出し問題がたくさん出てくる。
この回答への補足
回答有難うございます。
返答に時間が掛かってしまい申し訳ないです。
今回VBAやフィルタを使用しない理由は、作成したファイルを他人が使用するからです。
作成したシートはパスワードを掛けてロックしてしまいますので、殆ど編集できない状態になります。
マクロなどパスワードを求めるものも使用できません。
imogasi様の式も実行しましたが、やはり上手くいきませんでした。
>このコーナーは回答者や読者にたいする、テスト問題ではないのだから、色々の型の回答に接して、自分の不勉強を知り、勉強のこと。
仰るとおりだと思います。
私自身時間に余裕がなく余り他者の閲覧等は行なえていないです。
時間を見つけて少しでも勉強しようとは思っております。
No.3
- 回答日時:
>以上2点の回答(C、D列に入力するべき関数)をお願いします。
"関数"のご指名をされる方が多いですが、オートフィルタの方が、複雑で理解できないであろう式より判り易く簡単だと思うのですが。
まず、A、B列を選択して「データ」-「フィルタ」ー「オートフィルタ」を設定。
■C列の求め方
・A列のリストから「空白以外」を選択。
・A列をコピー、C列にペースト。
■D列の求め方
・A列のリストから「空白」を選択し、さらにB列のリストから「空白以外」を選択。
・B列をコピー、D列にペースト。
以上です。
この回答への補足
回答有難うございます。
オートフィルターですと目視で確認するには良いのですが、今回はC,D列に自動で参照したく思っておりました。
それから今回の作成したデータは殆どPCに無知な他人が使用することになりますので操作を簡略化させる必要があります。
ですのでコピー&ペーストの操作も行ないませんし、参照先セルもロックしておりますので操作自体出来なくしております。
説明不足で申し訳ありませんでした。
No.2
- 回答日時:
こんばんは!
一例です。
↓の画像のように作業列を挿入させてもらっています。
どの列でも構いませんが、C列に作業列を挿入させてもらっていますので
C・D列が1列ずれていますのでご容赦願います。
まず作業用の列のC2セルに
=IF(AND(A2="",B2<>""),ROW(A1),"")
という数式を入れ、オートフィルで下へコピーします。
(数式は1000行まで対応できるようにしていますので、1000行くらいまでコピーしておいても構いません)
そして、D2セルは配列数式になりますので
この画面からコピー&ペーストする場合は、単に貼り付けただけではエラーになると思いますので、
貼り付け後、F2キーを押すか、または数式バー内で一度クリックし、編集可能にします。
そして、Shift+Ctrl+Enterキーを押してみてください。
数式の前後に{ }マークが入り配列数式になります。
D2セルは、
=IF(COUNTA($A$2:$A$1000)>=ROW(A1),INDEX($A$2:$A$1000,SMALL(IF($A$2:$A$1000<>"",ROW($A$1:$A$999)),ROW(A1))),"")
という数式を入れています。
次にE2セル(配列数式ではありません)は
=IF(COUNT($C$2:$C$1000)>=ROW(A1),INDEX($B$2:$B$1000,SMALL($C$2:$C$1000,ROW(A1))),"")
とし、D2・E2セルを範囲指定し、
E2セルのフィルハンドルで下へコピーすると画像のような感じになります。
尚、作業列が目障りであれば列全てを範囲指定し、非表示にしてはどうでしょうか?
以上、参考になれば幸いですが、
他に良い方法があれば読み流してくださいね。m(__)m

この回答への補足
回答有難うございます。
上記画像の通り式を当てはめましたところ、希望の値を得ることが出来るのですが、No.1様の補足欄のとおり実際のセルに当て嵌めましたところ結果が表示されませんでした。
今回、P及びQ列に対して以下のとおり式を当て嵌めました。
R>=IF(AND(P9="",Q9<>""),ROW(P8),"")
S>=IF(COUNTA($P$9:$P$70)>=ROW(P8),INDEX($P$9:$P$70,SMALL(IF($P$9:$P$700<>"",ROW($P$8:$P$69)),ROW(P8))),"") ※配列数式
T>=IF(COUNT($R$9:$R$70)>=ROW(P8),INDEX($Q$9:$Q$70,SMALL($R$9:$R$70,ROW(P8))),"")
列と行の数字を入れ替えただけですので、そもそも解答の捉え方が間違っているのかもしれません。
知識不足で非常に申し訳ありませんが、何方か補足いただければ幸いです。
No.1
- 回答日時:
下記の式は何れも配列数式です。
C1: {=IF(ISERROR(SMALL(IF(A$1:A$1000="","",ROW(A$1:A$1000)),ROW(A1))),"",INDEX(A$1:A$1000,SMALL(IF(A$1:A$1000="","",ROW(A$1:A$1000)),ROW(A1))))}
D1: {=IF(ISERROR(SMALL(IF(A$1:A$1000="",IF(B$1:B$1000="","",ROW(A$1:A$1000)),""),ROW(A1))),"",INDEX(B$1:B$1000,SMALL(IF(A$1:A$1000="",IF(B$1:B$1000="","",ROW(A$1:A$1000)),""),ROW(A1))))}
この回答への補足
回答有難うございます。
試す時間が無く返答が遅れてしまい申し訳ありませんでした。
今回mike_g様の式を使用してみました。結果は次の通りです。
図1を用いて験させていただいたところ使用できましたが、実際使うセルを用いてでシートを跨いで入力したところ結果が出ませんでした。
以下がその通りに入力した数式です。
I4>=IF(ISERROR(SMALL(IF(入力!$P9:$P70="","",ROW(入力!$P9:$P70)),ROW(入力!P9))),"",INDEX(入力!$P9:$P70,SMALL(IF(入力!$P9:$P70="","",ROW(入力!$P9:$P70)),ROW(入力!P9))))
※入力箇所は、シート1としましてI4~M4(図1でいうC列)の最大5枠のみで横方向(行)に結果表示させようとしています。
仮に「入力」というシートからの参照ですが、参照範囲は見ての通りP9~P70(質問の図1でいうとA列)です。
結合セルも含まれていませんのでエラーにはならないと思います。
跨いでの参照では結果がでなかった為、図1のとおり同一シートのR列に式を入力させてみましたが、結果は表示されませんでした。
以下がその式です。
R9>=IF(ISERROR(SMALL(IF(P$9:P$70="","",ROW(P$9:P$70)),ROW(P9))),"",INDEX(P$9:P$70,SMALL(IF(P$9:P$70="","",ROW(P$9:P$70)),ROW(P9))))
私の式に不具合があるのだと思いますが、その箇所が分からなかったので何方か補足して頂けたら有り難いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
- Excel(エクセル) IF 関数で「〇〇 という文字を含む場合」の分岐処理で表示された数字はSUMで数字集計できますか? 3 2022/08/02 16:29
- Excel(エクセル) エクセルでセルの日付を和暦表示設定にしたらおかしなことに? 3 2022/05/25 11:47
- Excel(エクセル) Excel 値を返す数式についてです 3 2022/11/21 20:08
- Excel(エクセル) エクセルの散布図で新たに入力した値のデータラベルが空欄になる現象 1 2022/04/26 09:31
- Excel(エクセル) エクセルVBA 任意のセルの選択時、指定のセルの値を表示 1 2023/04/21 08:13
- Excel(エクセル) エクセル VBA セルの結合 2 2022/09/07 11:48
- Excel(エクセル) Excel2019、2021の日付、曜日の表示について 2 2022/11/29 15:01
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数について
-
Excelで4択問題を作成したい
-
エクセル
-
エクセル GROUPBY関数について...
-
エクセルの複雑なシフト表から...
-
エクセルシートの見出しの文字...
-
Amazonでマイクロソフトオフィ...
-
エクセルについて
-
勤怠表について ABS、TEXT関数...
-
グループごとの個数をカウント...
-
グループごとの人数のカウント
-
グループごとの人数のカウント
-
エクセルのリストについて
-
【マクロ】変数に入れるコード...
-
エクセルの表で作業してます。 ...
-
【マクロ】別ファイルへマクロ...
-
【マクロ】左のブックと右のブ...
-
【マクロ】【相談】Excelブック...
-
9月17日でサービス終了らし...
-
【マクロ】WEBシステムから保存...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル
-
【マクロ】WEBシステムから保存...
-
エクセルの循環参照、?
-
エクセル ドロップダウンリスト...
-
エクセルのdatedif関数を使って...
-
特定のセルだけ結果がおかしい...
-
【マクロ】A列にある、日付(本...
-
【マクロ】EXCELで読込したCSV...
-
【マクロ】アクティブセルの時...
-
【エクセル】期限アラートについて
-
iPhoneのExcelアプリで、別のシ...
-
【関数】同じ関数なのに、エラ...
-
Excelの新しい空白のブックを開...
-
【マクロ】3行に上から下に並...
-
【マクロ】宣言は、何のために...
-
VBA チェックボックスをオーバ...
-
Excelについての質問です 並べ...
-
【マクロ】アクティブセルの2...
-
【関数】不規則な文章から●●-●●...
おすすめ情報