[[20170809213331]] 『指定文字が入力されたセルの数を数える2』(あらいぐま) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『指定文字が入力されたセルの数を数える2』(あらいぐま)

先月29日に次のような質問をし、seiya様、カリーニン様、半平太様から回答をいただき、
目的の処理を実現することができたので、お礼の一文を掲載しました。

次のような表で、新潟と入力されたセルの数を数えたいと思います。

   A   B   C   D    E   F 
1 新潟 秋田 福岡 山形    山梨
2
3  東京 新潟 新潟 秋田 山形
4
5
6 山梨 山形 福岡    富山 福井 
7

その後、ねむねむ様から新たに
それぞれ連続した範囲を「範囲1」「範囲2」「範囲3」と名前を付けて

 =SUMPRODUCT(COUNTIF(INDIRECT("範囲"&ROW(1:3)),"新潟"))
という回答をいただいているのに気付きました。
回答でも希望どおりの結果を得ることができました。

そこで、式の解読を試みたのですが、「INDIRECT("範囲"&ROW(1:3)」の
部分で"ROW"関数の働きというか、記述法が理解できません。
また、「COUNTIF(INDIRECT("範囲"&ROW(1:3)),"新潟"))」の部分では範
囲1内の"新潟"の数、範囲2内の"新潟"の数、範囲3内の"新潟"の数をカウ
ントしているものと考えられますので、それらの和を求める"SUM"関数を
使用するのではないかと思うのですが、間違った結果となってしまいます。
どうしてでしょう?
どなたかお教えいただけませんでしょうか。

< 使用 Excel:Excel2013、使用 OS:Windows7 >


 過去ログはこれだと思われる。

[[20170729205747]] 『指定文字が入力されたセルの数を数える』(あらいぐま)

 本来は質問者に過去ログをリンクしていただきたいところだが。
(とおりすがり) 2017/08/09(水) 22:10

とおりすがり様、「過去ログとのリンク処理」ありがとうございました。

主質問から離れてしまいますが、今後のため「過去ログとのリンク処理」の仕方を
お教えいただければ幸いです。
(あらいぐま) 2017/08/09(水) 22:23


 Row関数は、行番号を配列の形で返す関数です。

 なので、ROW(1:3) なら {1;2;3} とほぼ同等です。

 「ほぼ」としたのは、結果を合算する際、
  Row(1:3)は、Sumproduct() を使う。
  Sum()でも出来るが、その場合は、配列数式として入力する必要がある。Ctrl+Shift+Enter

 一方、{1;2;3} なら、Sum()で普通に合算できる。

 本当に3つの範囲しか無いなら、{1;2;3} の方を使った方が簡単だが、
 実際どうかは質問者しか知るものは居ない。

 もし10もあったら{1;2;3;4;5;6;7;8;9;10}などとしなければならない。
 その点、Rowなら Row(1:10) で済む(※)。 
 その場合、Sumproductの出番となる(配列数式として入力するのが面倒なら・・ですが)

(半平太) 2017/08/09(水) 22:34


 リンクの方法については、ここの「初めての方へ」の内容のとおりです。

http://www.excel.studio-kazu.jp/wiki/excelboard/

 (d) [参照登録]機能[reference]

 (h) [リンクの張り方] [link]
(とおりすがり) 2017/08/09(水) 23:12

半平太様、ご教示ありがとうございました。
小生が頼りにしている関数辞典では、Row関数、また、Sumproduct関数などの使用について
貴台が触れているような説明がないため、どうしても理解できませんでした。
お陰ですっきりとしましたし、小生の力量もちょっぴり向上したように感じます。

「甘えちゃいけないよ!」とお叱りを受けるかも知れませんが、エクセルの関数の使用法に
ついて参考となるサイトなどご紹介いただけないでしょうか。

とおりすがり様、今後、必要に応じて活用していきます。今回は、お許しください。
(あらいぐま) 2017/08/10(木) 06:20


 >エクセルの関数の使用法

 これについても、ここの「関数」の内容のとおりです。

http://www.excel.studio-kazu.jp/func/

 また、「エクセルの関数の使用法」でネット検索しても
 参考HPが見つかると思います。
(とおりすがり) 2017/08/10(木) 09:09

 >関数辞典では、Row関数、また、Sumproduct関数などの使用について 

 Row()については、それほど難しいものではないと思っています。
 連番を作る時、Row(A1)と入力して下方にコピー はよくやる手です。

 今回は、その引数が複数のセル範囲になって、連番の配列が得られたと言うことです。

 Sumproduct()については、特殊な使い方をする方がむしろ普通になってきました。

 質問者の中には、データベース関数と勘違いしている人もいます。

 また、今回の様に、本来、積和関数であったハズが、単なる和関数として使われるケースも多いです。
 この際、マイクロソフトにはSum()を廃止して貰ったらどうかと考えています。(冗談です)
 加算に2種類もあると使い分けが面倒だし、配列数式のことを考える必要もなくなります。

 >エクセルの関数の使用法に ついて参考となるサイトなど

 その種のサイトを漁ったことは、ほとんどありません。

 自分で考える方が頭の体操にもなるし、暇つぶしにもなるので。
 (暇だけ有って、仕事と金がない身なので)

 自分の頭で考えると、今回のケースでは、こんなのも考え出せますよ。

 >(A1:F1,A3:F3,A6:F6,"新潟")のように複数の検索範囲を一度に指定して処理する方法(関数)はありませんか? 
    ↓
 =SUM(COUNTIF(INDIRECT({"A1:F1","A3:F3","A6:F6"}),"新潟"))

 これなら名前定義も必要ないです。

(半平太) 2017/08/10(木) 10:05


とおりすがり様、この学校にもコーナーがあったのですね。ありがとうございました。
小さな小さな希望ですが、関数の名前表記順に並んでいたり、検索できるとありがたいですね。
(我が儘な願いですね・・・)

半平太様、お付き合いいただきましてありがとうございました。
「 =SUM(COUNTIF(INDIRECT({"A1:F1","A3:F3","A6:F6"}),"新潟"))」でもばっちり処理できました。
やはりここでも「配列」の考え方が使用されているんですね。
勉強しなくてはいけませんね。。。

(あらいぐま) 2017/08/10(木) 11:21


 エクセルの関数のヘルプはアルファベット順に並んでますよ。
 また、ネット検索したらアルファベット順の解説サイトが見つかるかもしれません。

 ※私的には、アルファベット順は使いづらいです。
 カテゴリーごとに並んでいる方が使いやすいです。
(とおりすがり) 2017/08/10(木) 18:39

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.