Excel (一般機能)

Excelの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
CountIFにてセル範囲内から1行おきにセル値を求める
投稿日時: 20/12/27 18:53:57
投稿者: torao

いつもお世話になっております。
  
関数にてセル範囲内から1行おきにセル値を求めたく質問をさせていただきました。
具体的には下記のようなイメージになります。
  
・「B2:B11の範囲から奇数行 B3 B5 B7 B9 B11の値を求める
  
・数式はカウントイフを使用しております
 
 B1=COUNTIF(B$2:B$11,"A")
  
皆様アドバイスのほどよろしくお願い致します。

投稿日時: 20/12/27 19:26:08
投稿者: torao

色々調べて希望の値を求めることができました。
 
=SUMPRODUCT((MOD(ROW(G$8:G$59),2)=1)*(G$8:G$59=$D70))
 
※数式は実際に使用しているものです
 
おかしな点がありましたらご指摘お願い致します。

回答
投稿日時: 20/12/27 19:48:46
投稿者: WinArrow
投稿者のウェブサイトに移動

意図した結果が表示されれば、それでよいと思いますよ

回答
投稿日時: 20/12/27 20:29:36
投稿者: WinArrow
投稿者のウェブサイトに移動

別の奇数行を求める関数を紹介します。
 
=ISODD(ROW(A1))

投稿日時: 20/12/27 20:37:21
投稿者: torao

WinArrowさま
 
ありがとうございます。
 
=SUMPRODUCT((MOD(ROW と =ISODD(ROW(A1)) とではどちらが動作が軽いでしょうか?
 
結構数式を多用しておりますので少しでもファイル動作が軽くなればと考えています。

回答
投稿日時: 20/12/27 20:56:57
投稿者: WinArrow
投稿者のウェブサイトに移動

どれほど、違うかといわれても返事に困りますが、
 
MODの方
@MOD計算
A結果判断
の2つの命令
 
ISODDの方
@結果判断
の1つの命令
 
と思いますが・・・・

回答
投稿日時: 20/12/27 21:03:02
投稿者: WinArrow
投稿者のウェブサイトに移動

もしかして、勘違いしていうかな
>=ISODD(ROW(A1))
これは考え方の一般例としての数式で
実際には
>MOD(ROW(G$8:G$59),2)=1

↓のようにすることになります。
ISODD(ROW(G$8:G$59))

回答
投稿日時: 20/12/27 21:24:52
投稿者: Mike

  A B  C
1    103
2  102 105
3  103 107
4  104 109
5  105 111
6  106
7  107
8  108
9  109
10  110
11  111
 
C1: =IF(ROW(C1)>11/2,"",OFFSET($B$3,(ROW(C1)-1)*2,))

回答
投稿日時: 20/12/28 09:08:29
投稿者: 半平太

そのMOD関数の結果は1か0しかないので、「=1」の部分は屋上屋を架す感があります。
※「=0」のケースなら意味もありますけど・・
 
つまり、=SUMPRODUCT(MOD(ROW(G$8:G$59),2)*(G$8:G$59=$D70)) でよし。
 
これで1割くらい速くなります。
・・と言っても、こんな少ない対象範囲なら何もやってもたかが知れています。
 

投稿日時: 20/12/28 12:09:59
投稿者: torao

WinArrow さん
 
大変参考になりました、ネット上でいくつかパターンがあったのでどれを使用すればよいか迷っておりました。
 
Mike さん
 
コードの提示ありがとうございます。
 
 
半平太 さん
 
「MOD関数の結果は1か0しかない」数式を理解しておかないと無駄な処理をさせてしまうことがあるとわかりました。