プロが教えるわが家の防犯対策術!

ご教授お願いします。

=countif(a1:a10,"A") と いう式の、a10 の 10 の部分を b1 セルに入力してある数式から算出される数値にしたい場合、

10の部分を b1 として、& を使って式を入力すれば良いと考えるのですが、うまくいきません。
例えば、 =countif(a1:a & b1 & ","A")" などとしてもうまくいきません。
おそらく、& と "" の使い方が適切でないのだと思うのですが、いつもこのような時に苦労します。

正しい書き方を教えていただけると幸いです。

また、

& と "" の使い方 の基本的な法則など教えていただけるとありがたいです。

よろしくお願いいたします。

A 回答 (3件)

=countif(indirect("A1:A"&B1),"A")


と入力します。

""は、文字列を作るときに使用します。
"A1:A10"は、単なるA1:A10とかかれた文字列になります。
この文字列をセル範囲のA1:A10に変換するには、indirectを使用します。
indirect("A1:A10")はA1:A10のセル範囲になります。

つまり
=countif(A1:A10,"A")

=countif(indirect("A1:A10"),"A")
は同じことになります。

更に
A1:A10の文字列は"A1:A10"でOKですが、
これは "A1:A"と"10"を結合したものになります。
文字の結合は&なので
"A1:A" & "10"でおなじことになります。
"10"はB1に格納されているので
"A1:A" & B1
になります。
従って
=countif(indirect("A1:A"&B1),"A")
になります。
10がB1に格納されていて、それを使いたい場合は
"A1:A" & B10
    • good
    • 0
この回答へのお礼

ズバッと回答していただきありがとうごさいました。sandpaperさんのおっしゃるとおり、まだまだ、数式というものの理解があいまいな自分に気づかされます。

お礼日時:2017/05/10 01:33

セルの指定/セルの範囲指定(例えば a1:a10)は、文字列ではありませんし


文字列で指定はできません。
多分セルの指定と文字列を混同していると思います。

"xxx"は文字列であることを示します。

& は文字列を連結する時に使います。
(セルの中身との連結にも使えます。 =A1 & "個" など)
しかしセルの指定/セルの範囲指定の部分には使えません。

例えば、INDIRECT関数は、*文字列* を引数としてセルの参照を返します。
=INDIRECT("A5")
とすると、そのセルはA5の内容が表示されます。
INDIRECT関数の引数は文字列ですから
=INDIRECT(A5)
としてはいけません。

ところでご質問の件ですが、countif関数の最初の引数は文字列では指定できません。
そこで、a1:a10 の部分をOFFSET関数を使って表現するようにします。
=countif(offset(A1,0,0,B1,1),"A")

これでうまくいくと思います。
    • good
    • 0
この回答へのお礼

ありがとうございました。おっしゃるとおり、数式を単なる文字列と考えていたと思います。もう一度よく考えて、自分のなかですっきりと理解できるか、混乱しているあたまを整理してみたいと思います。

お礼日時:2017/05/10 01:27

「A1:A10」のセル範囲をB1セルの値で可変したいのですよね。



一般的に可変したい場合には、OFFSET関数を使います。
 =COUNTIF(OFFSET(A1,0,0,B1,1),"A")

OFFSET関数なら、引数に「基準、行数、列数、高さ、幅」を指定できる
ので、[基準]になるA1セルから開始して、同じ列の[高さ]であるをB1を
指定することで、セル範囲を指定できるからです。
http://www.officetanaka.net/excel/function/funct …
OFFSET関数は基準になるセル以外は数値で指定できるので、他の数式で
得た数値を使うのに便利だからですね。


&と""の組み合わせで求めるのなら、INDIRECT関数を使います。
http://www.officetanaka.net/excel/function/funct …

 =INDIRECT("A"&B1)
これでA10セルなどの指定ができるようになるので、
 =COUNTIF(A1:INDIRECT("A"&B1),"A")
と書くことができます。

&と""の組み合わせのままでは、参照するセルのアドレスは文字列の
ままなので、INDIRECT関数で参照ができるようにする必要があるため
ですね。

この書き方だと、A列の範囲だと判りにくいので、No.1の回答者さんが
書いているようにします。
 =COUNTIF(INDIRECT("A1:A"&B1),"A")
    • good
    • 0
この回答へのお礼

ありがとうございました。
まだまだ力不足で「ああ、そうか」とはすぐに理解できないのですが、よくよく考えて理解できればと思います。

お礼日時:2017/05/10 01:30

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