Excelの関数についてご質問です。
(環境:Windows XP オフィス2003です。)

カテゴリ1 | カテゴリ2 | 数値1
アメリカ | ニューヨーク | b
日本 | 東京 | d
中国 | 北京 | d
日本 | 京都 | a
アメリカ | ワシントン | b
イギリス | ロンドン | a
アメリカ | ニューヨーク | c
中国 | 上海 | c
日本 | 東京 | b
日本 | 東京 | c

Excelでこのようなリストが何千行もあるときに、
1つのセルに関数を指定して、「日本」の「東京」の「a」の数をカウントしたい場合はどのように指定したら良いでしょうか?

私自身では下記のような関数を組みましたが、
=IF(AND(Sheet1!$A:$A="日本",Sheet1!$B:$B="東京"),COUNTIF(Sheet1!$C:$C,"a"),NA())
これではCOUNTIF単体で指定した値と同じ値が返ってきてしましました。
知識が乏しく、申し訳ありませんが、ご教授頂ければ幸いです。

※マクロを走らせることも考慮しましたが、出来るだけ関数で取得したい状況にあります。解決が不可能な場合はマクロ使用を検討いたします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

ご提示の例では、「日本」の「東京」の「a」の数はゼロですが・・・。


一応、以下のような数式で求められます。

=SUMPRODUCT((A2:A12="日本")*(B2:B12="東京")*(C2:C12="a"))
    • good
    • 0
この回答へのお礼

すみません。存在してない「a」を指定してしましました。
>>=SUMPRODUCT((A2:A12="日本")*(B2:B12="東京")*(C2:C12="a"))
こちらありがとうございます。即解決しました!
範囲の指定でA2:A12このように指定すれば出せるのですね。
実は列で指定していてエラーが出ていました。
「A:A」この指定ではだめなものもあるのですね。
もしお手数でなければこちらの理由もご教授いただけないでしょうか?
お手数でしたら、参考サイトのリンクだけでもいただければと思います。
本当にありがとうございました。

お礼日時:2009/05/12 16:23

補助列を使用してみては如何でしょうか?


空いている列(D列)に
=カテゴリ1&カテゴリ2&数値1
仮にD1へ =A1&B1&C1 を、オートフィルで下へ

=COUNTIF(D:D,"日本"&"東京"&"a")
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
こちらの方法では確実簡単で、分かりやすいですね。
参考にさせていただきます。

文字列をつなげて完全一致のカウント方法。
貴重なご意見ありがとうございました。
エクセルっていろいろと奥が深いですね。f(^-^;)

お礼日時:2009/05/12 17:42

はい、SUMPRODUCT関数は残念ながらA:Aのような列指定は出来ません。


理由はわかりません。( ̄~ ̄;)う~ん

=SUMPRODUCT((A2:A65536="日本")*(B2:B65536="東京")*(C2:C65536="a"))
のようにすれば実質的に項目行を除く列全部を対象にできます。
でも、A1:A65536の指定はできません。
    • good
    • 0
この回答へのお礼

>>はい、SUMPRODUCT関数は残念ながらA:Aのような列指定は出来ません。
>>理由はわかりません。( ̄~ ̄;)う~ん

すみません。御忙しいところ、ありがとうございます。
大変勉強になります。お手数お掛けしました。

行数が不確定の場合には下記のご回答を参考にさせていただきます!
=SUMPRODUCT((A2:A65536="日本")*(B2:B65536="東京")*(C2:C65536="a"))
ありがとうございました。

お礼日時:2009/05/12 17:40

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q密度関数値f(y)から分布関数値F(y)を求めたい

密度関数値f(y)から分布関数値F(y)を求めたいのですが、わかりません。


f(y)=0.0104
になりました。

これから、
F(y)を求めたいのですが、ネットで調べてもどうも分かりません。

もしかして、f(y)=0.0104がおかしいのでしょうか?


どなたか教えてください><

Aベストアンサー

>f(y)=0.0104がおかしいのでしょうか?
その通りです。
密度関数の性質
∫(-∞→∞) f(y)dy=1
を満たさなくてはいけません。

f(y)=0.0104 だと
∫(-∞→∞) f(y)dy=∞
となって密度関数の性質を満たしませんね。

なお、分布関数F(y)と密度関数f(y)の間には
F(y)=∫(-∞→y)f(t)dt, F(∞)=1
という関係にあります。

Q=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $

いつもお世話になってます。
以下の関数式について、お時間がありましたらどうぞご教示ください。

=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $12,2,FALSE))

「シート2の範囲指定した表にA1セルの値と同じ値の右隣になる値を返せ。ただし該当なき場合は空白とせよ。」

純粋になんでこのような構文になるのかが解りません。

1.ISNAってそもそもなんでしょう?
2.同じ式を繰り返すのはなぜ?
(模範式で、このように同じ式を繰り返す構文があまり無いように思えたのです。)

・参考となる他所のページがあれば教えて下さい。
・素人です。お手柔らかにお願いします。

(エクセル2003)

Aベストアンサー

1.ISNAってそもそもなんでしょう?
ISで始まる情報関数の一つで、#N/A!エラーのみを判定する関数
結果はTRUE(真),FALSE(偽)のいずれかになります。
エラー判定のIS関数には他に
ISERR:#N/A!を除くすべてのエラーを判定する関数
ISERROR:すべてのエラーを判定する関数
があります。

2.同じ式を繰り返すのはなぜ?
ISNAの判定する値がセルでなく数式の結果だからです。
A2=VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)
なら
A3=IF(ISNA(A2),"",A2)
ということになります。A2のように計算の為のセルを省略する為に
=IF(ISNA(数式),"",数式)のように同じ数式を2回繰り返しになってます。

QEXCELでA列記載の数値に対応するB~F列のデータをG列に返すには?

A1からA10のセルに列順を示す1から5までの数値がランダムに入っています。
B1からF10までのセルにデータ(文字列または数値)が入っています。
B列を1列目、以下C~F列を2~5列目として、G列にA列の数値に対応する列のデータを返したいのですが、数式を忘れてしまい困っています。初歩的なな質問で恐縮ですが至急どなたかご教示ください。
例えば下表のとおりA1の数値が1のときはB1を、4の時はE1をというようにです。

列順(1)  (2) (3) (4) (5) 
A  B   C   D   E   F  G
1 山田 田中 斉藤 鈴木 佐藤 山田
4 池田 木戸 松尾 山口 近藤 山口
5  …  …  …  …  …
2  …  …  …  …  …

Aベストアンサー

H1:=INDEX(B1:G1,,A1)
以下コピーということでしょうか

QSUMPRODUCT($A$1:$A$10,$B$1:$B$10)とSUMPRODUCT($A$1:$A$10*$B$1:$B$10)

エクセルのSUMPRODUCT関数についてお尋ねします。

=SUMPRODUCT($A$1:$A$10,$B$1:$B$10)

=SUMPRODUCT($A$1:$A$10*$B$1:$B$10)
の違いは何でしょうか?
両者とも同じ答えを返しますが、いろいろ試したところ、前者は範囲内に文字列があってもそれを無視して計算し、後者は文字列があればエラーになるようですが、その理解で正しいでしょうか?
正しいとすれば、なぜでしょうか?

Aベストアンサー

こんばんは。

配列計算をしているのは言うまでもありませんが、この、SUMPRODUCT は、必ず、内部のひとまとまりから計算するという性質を持っています。ただ、VBAのように左から時系列かどうかは、言語が違いますから、分かりません。しかし、この引数は、パラメータ配列になっています。そして、その引数それぞれの有効値を調べて、それを演算出来る値かどうか調べます。

文字列を入れてもエラーにならないのは、元々、そこに注釈などを入れるために考えられたものです。値を文字列か数値かを精査して演算するように出来ています。最初、SUM関数に対し、そのように作られました。プログラムとしては、初歩的なものですが、そのアイデアは、今日まで、踏襲しているようです。このオリジナルの仕組みを考えたのは、VisiCalc の開発者、ブルックリン氏です。昔々、本で読んだことがあります。 PRODUCT関数とも共通です。3つの関数は、同じような仕様を持っています。

こちらが、本来の使い方です。

=SUMPRODUCT($A$1:$A$10,$B$1:$B$10)

つまり、
$A$1:$A$10 と $B$1:$B$10 の値を別々に取得しています。

では、
=SUMPRODUCT($A$1:$A$10,$B$1:$B$11)

とすると、なぜ、エラーが出るかというと、$B$11 に対応する数値が、NULL値(有効な値がない)だからです。それは、全体に反映させてしまいます。(理由は分かると思いますが、プログラムが途中で、エラーで止まってしまうからです)

ところが、こちらは、

=SUMPRODUCT($A$1:$A$10*$B$1:$B$10)

$A$1:$A$10*$B$1:$B$10 は、分割出来ません。したがって、この数式の中でのエラーは、そのまま、元の数式に反映されます。

ご自分で、ユーザー定義関数を作ってみれば分かります。VBAでも、同じように作ることが可能です。一度、試してみるとよいです。

こんばんは。

配列計算をしているのは言うまでもありませんが、この、SUMPRODUCT は、必ず、内部のひとまとまりから計算するという性質を持っています。ただ、VBAのように左から時系列かどうかは、言語が違いますから、分かりません。しかし、この引数は、パラメータ配列になっています。そして、その引数それぞれの有効値を調べて、それを演算出来る値かどうか調べます。

文字列を入れてもエラーにならないのは、元々、そこに注釈などを入れるために考えられたものです。値を文字列か数値かを精査して演算...続きを読む

Qf(x)=0の近次解を求める数値計算について 

方程式 f(x)=0 
の近次解を求める数値計算に関する質問です。

代表的な計算方法には二分法、はさみうち法、ニュートン法、逐次代入法
などがあるようですが、

f(x)が以下のような関数であるときどのように近似解を求めたらよいでしょうか?

(1)  f(x)はどのxに対しても常にf(x)≧0となるような関数
(2)  f(x)=0 となるxはただ一つだけである
(2)  f(x)は非常に複雑な関数でf(x)を微分するのは困難

趣味で行っている3Dのモデリングに関するプログラム中に必要になった関数で、
このような関数に対し、二分法をベースにしたプログラムをつくってみましたが、
非常にだらだらとしたアルゴリズムでなっとくできません。
この関数に適したよいを御存知の方おられましたら御回答くださいませ。


またもしf(x)が 

(4)  f(x)= |2x+3| のように f(x)が0になるまでは単調減少で、0になってからは単調増加である

という条件がさらに加わった場合どうなるかについてもご解答いただけると助かります。

方程式 f(x)=0 
の近次解を求める数値計算に関する質問です。

代表的な計算方法には二分法、はさみうち法、ニュートン法、逐次代入法
などがあるようですが、

f(x)が以下のような関数であるときどのように近似解を求めたらよいでしょうか?

(1)  f(x)はどのxに対しても常にf(x)≧0となるような関数
(2)  f(x)=0 となるxはただ一つだけである
(2)  f(x)は非常に複雑な関数でf(x)を微分するのは困難

趣味で行っている3Dのモデリングに関するプログラム中に必要になった関数で、
このような...続きを読む

Aベストアンサー

>二分法をベースにしたプログラムをつくってみましたが、
>非常にだらだらとしたアルゴリズムでなっとくできません。
もし、それが極小値を求めるように二分法を改造したのであれば、
その方法で合っています。
少しでも計算時間を稼ぎたいなら、分割方法を工夫します。
「黄金分割法」を使います。
http://www.sra.co.jp/people/miyata/algorithm/goldsect.txt
※極小(大)値を求めるアルゴリズムで、f(x)が単峰性という以外には制約が無い。

ちなみに、
二分法、はさみうち法:X=A、X=Bで、F(X)の正負が入れ替わるように区間を
  設定する必要があるため、この方法は使えない。
ニュートン法:f(x)の微分が判らない場合、f'(x)=(f(x+dx)-f(x))/dx
  で無理やり計算できるから、ニュートン法が使えないわけではない。
  ただし、f(x)=0付近において、f'(x)もゼロに近いから、運が悪いと発散して解が求まらない場合があります。
逐次代入法:逐次代入法も、発散と隣り合わせです。
 ※ニュートン法も逐次代入法の一種。

>(4)  f(x)= |2x+3| のように f(x)が0になるまでは単調減少で、0になってからは単調増加である
(1)と(2)が成立すれば、必ず(4)が成立するのだけど....
この関数でやっかいな点は、微分が連続関数となっているかどうか。
微分が連続関数:極小値の位置で微分もゼロ。 したがって、f(x)をじかに求める場合、ニュートン法や逐次代入法では発散するかも。
ただし、微分のかわりに差分を使って、差分=0のxを求める方法はok。
微分が極小値の位置で不連続:差分=0となるxを求める方法がうまくいかない可能性がある。(2分法ならば無理やりですが解は求まる。)

それやこれやで、発散しないで解にたどり着ける可能性が高い方法は2つ。(計算速度を犠牲にします。)
1つはf(x)を直接使い、黄金分割法。
もう1つは、微分のかわりに差分を使い、2分法を用いて差分=0となるxを求める。
黄金分割法のほうが計算時間は短かそうです。

>二分法をベースにしたプログラムをつくってみましたが、
>非常にだらだらとしたアルゴリズムでなっとくできません。
もし、それが極小値を求めるように二分法を改造したのであれば、
その方法で合っています。
少しでも計算時間を稼ぎたいなら、分割方法を工夫します。
「黄金分割法」を使います。
http://www.sra.co.jp/people/miyata/algorithm/goldsect.txt
※極小(大)値を求めるアルゴリズムで、f(x)が単峰性という以外には制約が無い。

ちなみに、
二分法、はさみうち法:X=A、X=B...続きを読む

QExcel でシート間の重複データ(Sheet1のA=Sheet2のA かつ Sheet1のB=Sheet2のB)

Excel2000です。

Sheet1のA列・B列・C列・・・にデータが入っています。
Sheet2のA列・B列・C列・・・にデータが入っています。

Sheet1のA列とSheet2のA列は、似たようなデータが入っています。
Sheet1のB列とSheet2のB列も、同様です。
C列以降のデータは、シート間で全然関係ありません。

Sheet1の行データ(A列・B列)が、Sheet2(A列・B列)にも存在しているかどうか、
を知るには、どうすればよいですか。
C列以降の列のデータは、比較する際に使いません。

つまり、
Sheet1のA = Sheet2のA
かつ
Sheet1のB = Sheet2のB
であるような行を知りたいのですが、

どうすればよいのでしょうか。

Aベストアンサー

Sheet1、Sheet2 ともに空いている列に =A1&B1 のような連結データを作り、Matchなどで比較するとか、、、

Sheet1 の E1 =A1&B1
Sheet2 の E1 =A1&B1
Sheet1 の F1 =MATCH(E1,Sheet2!E:E,0)

Q関数 ~に最も近く~よりも高い数値

関数苦手です。宜しくお願いします。
セルA1からF5まで適当な数値が入っており、B1からF5までの中でセルA1に最も近く、A1よりも高い数値を選ばせたいです。同様なA1に最も近く、A1よりも低い数値を選ぶ式をお願いします。

Aベストアンサー

Excelの基本の1つでしょうか。
Office検定みたいなやつの Excelエキスパートでも出題されます。
配列数式を使うことで実現できます。


>セルA1に最も近く、A1よりも高い数値を選ばせたいです
 数式バーに以下数式を入力し
 =MIN(IF(B1:F5>A1,B1:F5))
 Shift+Ctrl+Enter で配列数式として入力されます


>A1に最も近く、A1よりも低い数値を選ぶ式
 =MAX(IF(B1:F5<A1,B1:F5))
 を同様に配列数式として入力すればOKです。


あまりデータ数が多い場合は再計算で重くなるので
対象のセルが数百万個を超える場合はマクロ化させた方が良いかもしれません。

Qエクセル詳しい方!!お願いします! =IF(会計簿!$C$6=”13-ア”,”会計簿!$A$6”,I

エクセル詳しい方!!お願いします!

=IF(会計簿!$C$6=”13-ア”,”会計簿!$A$6”,IF(会計簿!$C$6=”13-イ”,”会計簿!$A$6”,IF(会計簿!$C$6=”13-ウ”,”会計簿!$A$6”,IF(会計簿!$C$6=”13-エ”,”会計簿!$A$6,””))))
の返しが会計簿!$A$6になるのを会計簿!$A$6に入力されている値にしたい!

Aベストアンサー

あらら・・・、今度は絶対参照にしていませんでした ><
=IF(OR(会計簿!$C$6="13-"&{"ア","イ","ウ","エ"}),会計簿!$A$6,"")

これが正解ですね _ノフ○)))グタリ

Qアセンブラ言語の数字を数値に変換するプログラム

LD GR3,GR1 ;GR3にGR1の数字を入れる。
AND GR3,=#000F ;数字を数値に変換

というアセンブラのプログラムがあったのですが、なぜGR3と16進数#000Fの論理積をとることで数字を数値に変換できるのでしょうか。

それと、ここでいう数字、数値の違いとは、数字の1はコンピュータ上では
49という数値に変換される(アスキー文字)という認識でよろしいでしょうか。

Aベストアンサー

2進数で表したときの下4桁だけが残ることになるからです。

アスキーコードでは、数字の「1」は、10進で49、16進で31です。
16進の31を2進数に直すと、0011 0001です。
これと16進のOF、つまり2進の0000 1111と論理積をとると、0000 0001となり、数値の1になります。

Qエクセルについてなのですが、 例えば指定の範囲内に A B B C A B C A B B C D

エクセルについてなのですが、

例えば指定の範囲内に
A B B C A B C A B B C D B D
と並んだセルからAとDの合計を出したい時はどのようにすればいいのですか?

COUNTIFSだったら複数条件を満たした数を表示するので希望とは違います。
希望はA or Dの合計を出したいのです。

Aベストアンサー

こんにちは!

COUNTIFS関数はAND条件になりますので、今回の質問には適しません。

=COUNTIF(範囲,"A")+COUNTIF(範囲,"D")
のように「A」のセル数と「D」のセル数をコツコツと足し算するのが
間違いないと思います。m(_ _)m


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

おすすめ情報