「みんな教えて! 選手権!!」開催のお知らせ

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

Excel(Home and premium)、条件付き書式で下記の式が書かれてあったのですが、どのような意味でしょうか。


=countif(indirect(address(row(),column())),"(例)*")

既に退職している前任者が作成したもので、どのような意図で書かれたのかも確認出来ず。。。

こういう時はとりあえず、意味はわからないけど、使い続けるのが上手く仕事をこなしていくコツでしょうか。

調べるとエラーなど見つけてしまい、ドツボにはまるだけのような気もしたりして。。。

A 回答 (4件)

INDIRECT関数は使う機会がある関数だと思いますよ。


質問のADDRESS関数の使い方をすることは少ないかもしれませんが、
INDIRECT関数は参照したセル内にある文字列を元に別のセルの値を
求めたいときに使うことが多いからです。

例えば、シート名が月名になっているシートにある値を求めるとき、
月表示があるセルを参照してシート名として利用するなどですね。
こちら↓は暇があったら読んでみると面白いかもしれません。
https://aka-aca.com/indirect-01/
https://aka-aca.com/address-01/
https://aka-aca.com/offset-01/
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
INDIRECT関数、勉強します。

お礼日時:2023/02/01 14:11

ご質問者が掲示された数式



=countif(indirect(address(row(),column())),"(例)*")・・・・・・①

のADDRESS関数はセル番地を返す関数です。address(row(),column())とすると自分自身のセル番地を絶対参照形式の文字列で返します。INDIRECT関数はセル範囲やシートの参照を文字列で指定できる関数ですので、indirect(address(row(),column()))の部分は他の回答者さんの回答どおり、自分自身のセルの値という意味になります。

COUNTIF関数は範囲内の条件に合致しているセルの数を数える関数です。「"(例)*"」の*アスタリスクはワイルドカードと呼ばれるもので、何らかの文字列を代替できます。文字数は0以上でよいので、例えば「(例)」「(例)1.」「(例)gooで・・・」などのいずれも「(例)*」に含まれることになります。

つまり、この数式は、自分自身セルの値を参照し、「(例)」という文字列から始まっていたらCOUNTIF関数の値が1になるという数式です。

条件付き書式に記述する数式は、条件に合致しているとき「TRUE」、合致しないとき「FALSE」を返すものにする必要がありますが、条件付き書式中の数式の結果が1は「TRUE」、0は「FALSE」と見做されるので、COUNTIF関数の対象範囲が自分自身のセル1つである以上、結果は0か1なので「TRUE」「FALSE」のいずれかになるということになります。

従って、①は

=countif(indirect(address(row(),column())),"(例)*")=1・・・・・・②

という数式と同じ意味ということになります。

なお、ご質問と直接関係はありませんが、どなたも「揮発性関数」について触れないので、触れておきます。

INDIRECT関数は「揮発性関数」です。揮発性関数は、参照先にかかわらず(つまり、自分自身のセルの値に変更がなくても)、シート上のどこかのセルが再計算されたり、ブックが開かれるたびに、常に再計算を行う関数です。
このため、揮発性関数を多用すると、システム負荷が大きくなり、いわゆる「EXCELが重たい」という状態になります。
以下のURLでも「揮発性関数の控えめな利用」を促しています。

https://learn.microsoft.com/ja-jp/office/client- …

どうしてもINDIRECT関数を使わないと処理できないという場合はともかく、使わなくて済む方法(代替数式など)があるなら、そちらを選択すべきかも知れません。

このご質問の場合も、条件付き書式の適用範囲を選択した状態で、

条件付き書式⇒新しいルール⇒指定の値を含むセルだけを書式設定⇒「次のセルのみを書式設定(O)」と表示されている下のドロップダウンリストで、「特定の文字列」を選択⇒右隣りのドロップダウンリストで「次の値で始まる」を選択⇒右隣りのボックスに(例)を入力【または、既に(例)の文字列が入力されているセル番地を指定】⇒書式ボタンを押す⇒反映させる書式を設定⇒OKを押す⇒OKを押す

とすることで、INDIRECT関数を使わずに同様の処理が可能です。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

お礼日時:2023/02/01 14:10

回答ではありません、が質問してくれた貴方にありがとう!です。


普通は ADDRESS関数を、
=ADDRESS(ROW(),COLUMN())
のような形で使うことはありませんが、
=COUNTIF(INDIRECT(ADDRESS(ROW(),COLUMN())),"(例)*")
のような形で、[条件付き書式]の条件式としてなら使えるッ!に感動しました。私もこれから、使って行こうと思います。

「既に退職している前任者」の方は、Excel の鉄人だったと推察しています。機会があればその方によろしくお伝えください。m(_._)m
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
前任者はExcelの達人だったのですね。。。

私は未だに式がり回できていません。。

Address(ROW(),COLUMN())

で、現在のセルを参照し、INDIRECT関数でそこに記載されているセル番地の内容を表示する、でしょうか。。。。

もっと勉強します。

お礼日時:2023/01/15 18:39

簡単に説明すると、ADDRESS(ROW(),COLUMN())で条件付き書式の


セルを絶対参照にし、INDIRECT(ADDRESS(ROW(),COLUMN()))に
することで、セル内容を取得します。
=COUNTIF(INDIRECT(ADDRESS(ROW(),COLUMN())),"(例)*")と
すると、(例)*がワイルドカードを使っているので、文字列先頭に(例)
の有無を調べて、あれば条件と一致するので書式設定されるのです。

=ADDRESS(ROW(),COLUMN())は、条件付き書式では循環参照には
ならないのでエラー表示されずに済みますが、通常のセル内の数式に
使うと循環参照にのエラーになります。
ROW()またはCOLUMN()のどちらかを離れたセルを参照すれば、理解
できるようになります。
https://www.ceodata.com/excel-address-function/# …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
参照リンク、とても参考になりました。
Indirect関数やoffset関数始めて知りました。

私ならVlookとかで使ってしまいそうです。

Indirect関数などは、上級者なら頻繁につかうのでしょうか。。。
自分がIndirect関数やoffset関数を扱いこなしている場面が想像出来ず。

まだまだ勉強が足りないでしょうか。

お礼日時:2023/01/15 06:56

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


おすすめ情報