アプリ版:「スタンプのみでお礼する」機能のリリースについて

詳しい方教えてください。

前任者のファイルの作成で、どうしてもわからない部分があり、皆さんのお知恵を貸して頂ければと思います。
Excelで例えばA列に、【1,2,3・・・】と連番で番号をふられています。しかし、式が入っており

@offset(indirect(address(row(),column())),-1,0)+1

となっています。

address(row(),column())

はそのセルの行と列の番号を絶対参照(例えば、$D4$ など)を返す
indirect関数で、address関数で参照しているセル(例え、D4セルに100が入力していたら100を返す)

新しいExcelファイルで

@offset(indirect(address(row(),column())),-1,0)+1

を入力するとエラーになってしまいます。前任者のファイルでは【1,2,3・・・】と連番になります。

@offset(indirect(address(row(),column())),-1,0)+1

この意味は、address(row(),column())のセルの一行上の数値に1を足す?
という意味でしょうか。。。。

前任者はおらず、今までこのファイルを使っていた人に聞いてもきっと、前の人が使っていたからそのまま使った、意味はわからない、といわれて終わりです。

こんな仕事の仕方でいいのだろうか、と不安になります。
100%理解出来なくてもある程度理解して使いたいと思っています。

詳しい方、教えていただければと思います。

A 回答 (5件)

row() は、式の書かれている行。


column() は、式の書かれている列。

address(row(),column())
は、式の書かれているセルアドレスを示す文字列。

indirect(address(row(),column()))
は、addressで作られたセルアドレスの文字列を、セル参照にする。

offset(indirect(address(row(),column())),-1,0)
は、indirectで作られたセル参照の、-1行下、0列右のセルに書かれている値を取得。
⇛数式の書かれているセルの1個上のセルの値

で、最後に+1してる。


で、この式を入れてエラーになるとはどういうエラー?
そこが重要なんだけど。

1行目に書いていれば、上のセルが存在しないのでエラーになる。
上のセルが文字であれば、文字に足し算ができないのでエラーになる。
とか、そういうことなんだろうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
もう一度試してみたら、エラーが出ずに、【1,2,3・・・】と表示されました。

普通に【1,2,3】と入力してオートフィルした方が早いような気がするのですが、何故このような難しい式を使っているのかが不明で質問させていただきました。

何か式を使うメリットがあるのでしょうか。。。

お礼日時:2023/04/08 22:33

[No.2お礼]へのコメント、


》 行の削除や挿入をしても、再度オートフィルで
》 連番を振らなくてもいいと言うことですね。
そりゃ言い過ぎかと。だって、「挿入」された行には自動的に数式が入力されるわけがないので。

1行目あるいは行番 1 の開始セルの直上のセルには、数値 0 を手入力して、添付図に示す書式を設定して知らぬ顔を決め込むのが鯔背(イナセ)かもね。(^_^)
「Excelでなぜこのような式をつかってい」の回答画像5
    • good
    • 0

メリットは幾つかありますが、特に重要なのは開始行から連番へと


設定ができることですね。

連番の開始行より上にある行で、行挿入や行削除をした場合に、
オートフィルでは影響はありませんが、ROW関数を使った連番に
した場合は、開始番号が崩れます。
https://sun0range.com/microsoft-office/excel-tips/
連番のある範囲の行を削除した場合は、オートフィルでは連番に
ならなくなるので、質問にある式のほうが有利です。
開始番号を手入力などで指定しても使えるのもメリットですね。

デメリットは、連番の上のセルに文字列がある場合に#VALUE!の
エラーになることと、1行目から使うと#REF!のエラーになるので、
上のセルを数値にしたり、空白セルなどにすることで、エラー回避
させることができるので対応も簡単ですね。

行の追加や削除が多いシートならば、この式は特に力を発揮する
連番機能です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
大変よくわかりました。

お礼日時:2023/04/09 09:51

なぜこんな面倒くさい式なのか?


という疑問について。

想像ですが、この式が使われているエクセルファイルって
行単位で編集することが多かったりしませんか?
・行単位で削除
・行単位でコピー→挿入
・行単位で切り取り→挿入
とか。

こういう編集をした場合に、確実に「式の書かれたセルの1つ上のセル」を参照させることができる式になってるんですね。

=offset(indirect(address(row(),column())),-1,0)+1
=[上のセル]+1
というセルを並べて書いて、下へコピーしてみて、
行単位での編集を試してみれば、違いがわかると思います。

行単位の編集を行った都度、オートフィルして番号振り直すのも面倒くさいし、し忘れちゃうってこともありえるじゃない?
そういうことを考慮して自動化でこの式を採用したんだと思う。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
大変よくわかりました。

お礼日時:2023/04/09 09:52

試してみて、素敵な動作をすることに感銘しました。



メリットは、当該数式が入力されいる列の任意のセル(範囲)を削除しても、連番が見事に回復するところかと。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
行の削除や挿入をしても、再度オートフィルで連番を振らなくてもいいと言うことですね。

お礼日時:2023/04/09 09:52

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