• ベストアンサー

エクセルの複数の条件範囲に合う行を別シートへNo2

先ほど質問したものなのですけど、 どうやっても、宿泊日と人数が合っていない数字で直りません。 お分かりの方教えて下さい。 作業セルに=IF(AND(Sheet1!A2>=$B$2,Sheet1!A2<=$D$2,Sheet1!O2>=$B$3,Sheet1!O2<=$D$3),ROW(),"") セルに =IF(COUNT($P:$P)<ROW(A1),"",INDEX(Sheet1!A:A,SMALL($P:$P,ROW(A1))))

この投稿のマルチメディアは削除されているためご覧いただけません。

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

  • ベストアンサー
回答No.2

正直、画像が小さくてよく分からない感じなので、推測でお答えします。 「作業セル」というのは、P 列のセルのことですね、恐らく。画像では右端で切れているようですが。 数式全体は問題なさそうに見えるので、きっと ROW 関数のせいではないかと思います。「row()」のように引数を書かない場合、これが入力されているセルの行番号を返します。「row(a1)」なら、A1 セルの行番号である「1」を返します。 ということは、セルのドラッグ&ドロップやセルなどの挿入/削除によってセルの位置が変化すると、計算が狂うということです。 だから例えば、「row()-3」ならこれが入力されているセルの行番号から 3 を引いた値になるし、「row(a2)-row(a$1)」なら 2 - 1 = 1 が計算されます。ROW を使うなら、そのようにして調整し、セルの配置は基本的に動かさないことが必要です。 ROW が使われている理由は、結果を表示する欄において、セルの間を空けずに上から詰めて表示するためだと思います。行番号を動かして表示させるため、行番号の特定が必要なわけです。 いろいろ考えると ROW は扱いがちょっと難しいので、もしも数式で複数条件での転記というのは諦めるんだとすると、フィルタがお勧めですね。複数条件で絞り込み、該当の行だけを上から詰めて表示できます。

dr_ttc
質問者

お礼

ありがとうございます。 ROWの狂いが原因なのかもしれないのですね、 再度挑戦してみます。

その他の回答 (1)

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

素直にフィルタ機能を使って範囲で選択、 フィルタによって抽出された行をコピー、別シートに貼り付け。 これが一番早い。 こういう書き方をすると、 また解らなくて閉じ逃げするんだろうけど、 教えてもらったことを応用できないなら あるいは、応用しようとしないなら、 最初から尋ねない方が良いですよ。 ・作業列は「どこに」作ってます? ・作業列に入れた式の意味は解ってます? ・セルに入力した式の意味は理解しようとしてます? これらが解れば、自ずと答えは見えてくるはずです。 「先ほどの質問」に回答くださった皆さんへの詫びを含め、 まずは、自分で考えてくださいね。

関連するQ&A