初めて自分の家と他人の家が違う、と意識した時

お薬の入荷の毎にその薬品の有効期限を入れてっているのですが、例えば エクセルの横に各薬品名をずらっと並べてその下に順次 入荷時の各薬品の有効期限を付け加えていった場合 結局最下段が現在の最新のその薬品の有効期限となるのですが、購入はしたのだけれど 使わないで とうとう有効期限時期にまで到達してしまう薬品もあるんです。それを見やすく、分かりやすくするために各薬品の現在の有効期限を一か所のセルで知りたいわけですが。 例えば B列にある薬品の有効期限蓄積データがあって、たとえばB列からずらして、C1セルに INDIRECT("B" & COUNTA(B:B))なるものを入れると 例えば2020/08/01(B列最下段データ) と出るんですが、他の薬品も同じようにして
INDIRECT("B" & COUNTA(B:B))を右横にコピーするとCOUNTA(B:B)のところはCOUNTA(C:C)と動くんですがINDIRECT("B" &・・の"B"はそのままなんですが、コピーしてINDIRECT("C" & COUNTA(C:C))となるようにはできないものなのでしょうか。手で入れて直してもいいんですが時間かかって・・。

A 回答 (3件)

=MAX(B:B)



でいいんじゃないですか?
    • good
    • 0
この回答へのお礼

シンプルですがベスト!!! 最優秀でした!! 頭いい!!!

お礼日時:2022/08/22 17:57

こんにちは



COUNTA()でカウントしているということは、途中に空白セルが存在すると破綻しますけれど、空白セルは絶対にないものとしてよいのでしょうか?

ご質問はフィルコピー可能な形式にしたいということだと思いますが、INDIRECT関数ではなく、通常のOFFSET関数やINDEX関数に変えれば、フィルコピーで列を自動で変更することが可能です。

例えば、INDEX関数であれば、C1セルに
 =INDEX(B:B,COUNTA(B:B))
といった感じです。

循環参照を避けるためには、ご質問文にあるように「列をずらす」必要がありますが、なんとなくの雰囲気から想像するところ、同じ列の1行目に表示されている方がわかりやすそうな気がしますけれど・・・
もしそうであるなら、2行目から数えて+1すればよいので、B1セルに
 =INDEX(B:B,COUNTA(B2:B999)+1)
とすることで、B列の結果を算出できます。
(上式では、記入範囲を999行目までと設定してあります)
ただし、途中に空白セルがあるとずれてしまうことに関しては同じです。

途中に空白セルがあっても、正しく最終行を取得したいような場合には、B1セルに
 =INDEX(B:B,AGGREGATE(14,6,ROW(B2:B999)/(B2:B999<>""),1))
とすることで、可能になると思います。
    • good
    • 0
この回答へのお礼

これが一番良かった有難う お詳しいですねえ。=INDEX(B:B,AGGREGATE(14,6,ROW(B2:B999)/(B2:B999<>""),1)) を薬品項目上に乗せることに致しました。有難う。尊敬致します。

お礼日時:2022/08/22 17:56

C1の式をこう書き換えてみる。


これをコピーすると目的の式と同じ結果が得られます。
=INDIRECT(ADDRESS(COUNTA(B:B),COLUMN()-1))

COLUMN() が、式の書かれているセルの列番号を表すので、
式をコピーしていくと列に合わせて変動していくのです。
    • good
    • 0
この回答へのお礼

そうなんですねえ 有難う!!

お礼日時:2022/08/22 17:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報