【iOS版アプリ】不具合のお知らせ

カレンダーを作成し対象の日付に●をつけ、counta関数で範囲内の●の数を出力しています。
セルに参照範囲の開始日と終了日を入れることで、参照範囲を設定することが可能でしょうか。
<例>
セルA3に参照範囲の開始日を入力
セルB3に参照範囲の終了日を入力
セルC3にA3からB3の範囲のデータ数を出力

よろしくお願いします。

「セルの値で関数の範囲を変えたい。」の質問画像
gooドクター

A 回答 (8件)

数式とすればNo.4さんのSUMPRODUCTを用いた数式を支持します。


C3に記述すべき数式は、
日付が2021/3/1~2021/3/31まであったとして、

=SUMPRODUCT((D2:AH2>=A3)*(D2:AH2<=B3)*(D3:AH3="●"))

となります。
(日付の範囲によってD2:AH2およびD3:AH3を適宜修正してください)

添付画像①②をごらんください。期間を変更することで正しい●の数をカウントできています。

ただし、注意したいのは、日付です。
ご質問者がお示しになった画像では「〇月〇日」と表示されています。
表示はお好みでOKなのですが、セルの内容は年号まで含めて入力するルールとします。
年号を省略するとEXCEL側はEXCELの起動日から年号を取得して補完するという動きになります。
このため、年号省略の入力だと年末に先日付で翌年1月の表を作成するというような場合、翌年の1月ではなく、当年の1月の年号になってしまいます。
しかも見た目だけではその違いを判別できず、セルの内容を確認しなければなりません。
このような事態を避けるため初めから「年月日を入力する」というルールで運用することをお勧めします。(添付画像③④参照)
期間指定する場合は年号まで意識しないと期待した結果が得られないことを肝に銘じておく必要があります。
「セルの値で関数の範囲を変えたい。」の回答画像8
    • good
    • 0

自分なら範囲の指定に OFFSET関数を使いますね。


基準に指定したセルからどれだけ離れたセルを指定するかを決める関数です。

 OFFSET(基準セル , 行方向 , 列方向 , 縦の範囲 ,横の範囲)
のようにして使うので、
 OFFSET(開始日に相当するセル , 0,0, 1, 範囲の日数)
これを COUNTA関数の範囲に指定するだけ。

という事で、No.3の回答者さんと似たような数式になるのかな?
(基準セルを固定して列方向を求めているようですね)
「開始日に相当するセル」と「範囲の日数」を別に求める必要があるので、
そこはNo.3の回答者さんの示している数式を参考に自身で工夫してみてください。
    • good
    • 0

>参照範囲を設定することが可能でしょうか。


こんな質問の書き方をしてるせいで、難しい回答が付いているような気がします。

基本的には、No.4さんのやり方が簡単だと思いますが、平凡なExcelユーザであれば、CountIfs関数あたりが妥当だと思います。
CountIfs関数で、「A3以上、かつ、B3以下、かつ、●である」で行けませんかね?
    • good
    • 0

No.2の回答者です。



開始日又は終了日が空白だった場合の処理を書き忘れていました。
空白だとエラーをカウントしてしまうようです。
こちら↓なら、問題ないと思います。
 =IF(OR($A3="",$B3=""),"",COUNTA(INDIRECT("R"&ROW()&"C"&MATCH($A3,$A$2:$W$2,0),FALSE):INDIRECT("R"&ROW()&"C"&MATCH($B3,$A$2:$W$2,0),FALSE)))
    • good
    • 0

添附圖參照(Excel 2019)


↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
「セルの値で関数の範囲を変えたい。」の回答画像4
    • good
    • 0

このシートの場合、2行目の日付欄を 「範囲」として名前定義をしておくと、式が楽です。


https://www.becoolusers.com/excel/name-create.html
この場合
Sheet1!$D$2:$TE$2 を「範囲」としました。
で、数式は、
C3のセルに 下の式をいれて、使いました。
=IF(AND(A3<=B3,ISNUMBER(A3)),COUNTA(OFFSET($C3,0,MATCH($A3,範囲,0),1,MATCH($B3,範囲,0)-MATCH($A3,範囲,0)+1)),"")
「セルの値で関数の範囲を変えたい。」の回答画像3
    • good
    • 0

添付画像の文字がつぶれていて判別しにくいのですが。



C3セルへと、D3~W3セルを指定したCOUNTA関数で範囲指定した
個数を、A3セルとB3セルの日付で範囲を決めて、個数を指定したの
ですね。

基本は
 =COUNTA(D3:W3)
となっていると思いますので、開始日のセルと終了日のセルの範囲に
変えるだけですね。
 =COUNTA(開始日と同じ列にあるセル:終了日と同じ列にあるセル)
で求められます。

カレンダー部分が2行目にあるので、MATCH関数で
 =MATCH(A3,$A$2:$W$2,0)
にすると、開始日の列位置が取得できます。
https://uxmilk.jp/21556

これをセル位置として認識出るようにINDIRECT関数で求めます。
 =INDIRECT("R3C"&MATCH(A3,$A$2:$W$2,0),FALSE)
終了日も同じようにすると、以下のようにすることで求められます。
 =INDIRECT("R3C"&MATCH(B3,$A$2:$W$2,0),FALSE)
https://office-hack.com/excel/indirect/

これをCOUNTA関数の範囲に入れると
 =COUNTA(INDIRECT("R3C"&MATCH($A3,$A$2:$W$2,0),FALSE):INDIRECT("R3C"&MATCH($B3,$A$2:$W$2,0),FALSE))
になります。

この式のままだと、3行目のみでしか使えないものになるので、4行目
以降も開始日などを指定する行が追加されるのならば、以下のように
行も連動するようにします。
 =COUNTA(INDIRECT("R"&ROW()&"C"&MATCH($A3,$A$2:$W$2,0),FALSE):INDIRECT("R"&ROW()&"C"&MATCH($B3,$A$2:$W$2,0),FALSE))
「セルの値で関数の範囲を変えたい。」の回答画像2
    • good
    • 0

範囲を入れるところにINDIRECT(範囲指定セル)を使うことで可変できます。


=counta(INDIRECT(A1):INDIRECT(B1))
A1セルに入力されたセルからB1セルに入力された番地までの空白以外セルを数えます。
日付からセルを指定するのは別方法が必要
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング