• ベストアンサー

エクセル関数について

会社のある集計業務を退社する方より引き継いだのですが、エクセルの関数で理解ができない内容があり困っています。 =SUMPRODUCT((MIDB($H$6:$H$3017,1,7)=N3020)*(($Z$6:$Z$3017)=$M3021)) この関数式はどんな処理をしているのか、どなたかご教示いただきたく思います。 よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Cupper-2
  • ベストアンサー率29% (1342/4565)
回答No.2

 =SUMPRODUCT((MIDB($H$6:$H$3017,1,7)=N3020)*(($Z$6:$Z$3017)=$M3021)) これを少しだけ分かりやすく書き直すと  =SUMPRODUCT((MIDB(H6:H3017,1,7)=N3020)*((Z6:Z3017)=M3021)) になります。 (「絶対参照」「複合参照」を「相対参照」にしただけですけどw) で、本題。  H列のセルの先頭から7ビット目からの値とN3020セルの値、  Z列のセルの値とN3021セルの値  の両方等しい行数を数えている と言うことなんですけど...。   心当たりありますか? 以下、この関数の理解に必要な情報を並べてみます。 まず、SUMPRODUCT関数(サムプロダクトかんすう)は理解できますか。 SUMPRODUCT関数は、同じ行のセルを掛け、各行の合計を求める関数です。  A1*B1 + A2*B2 + A3*B3 … 表にするなら、  1行目はリンゴの単価(A列)と数量(B列)  2行目はミカンの単価(A列)と数量(B列)  3行目はバナナの単価(A列)と数量(B列)  そしてその合計の値段を求める ・・・ような計算を行う関数と覚えてください。 この質問の例では結構面倒というか、ちょっとイレギュラーな使い方をしています。 本来あるSUMPRODUCT関数の特性を使って、複数の条件で一致しているセルの数を調べる事ができるんです。 (Excel2007以降ではSUMIFS関数で楽勝にできちゃうんですけど  それ以前のバージョンでは、こーやって無理やり計算させていたんですね) 別の書き方をすると  A6セルに =AND(IF(MIDB(H6,1,7)=N3020),IF(Z6=M3021))*1  A7セルに =AND(IF(MIDB(H7,1,7)=N3020),IF(Z7=M3021))*1  A8セルに =AND(IF(MIDB(H8,1,7)=N3020),IF(Z8=M3021))*1  ・・・  A3017セルに=AND(IF(MIDB(H3017,1,7)=N3020),IF(Z3017=M3021))*1  =SUM(A6:A3017) とかになるんですけど、これはこれで面倒すぎ。 それをSUMPRODUCT関数一発でやっているに過ぎません。 (質問の例では、SUMIFS関数と言うよりも  合計する条件がひとつだけのSUMIF関数的な使い方になっています) ちなみに  条件を満たしたときの”TRUE”  条件を満たさないときの”FALSE” は、四則演算するとき、TRUEは1、FALSEは0として扱われます。 ですので  MIDB(H6,1,7)=N3020 の結果と  Z6=N3021 の結果の積を取れば、 6行目のH列の値とZ列の値が決められた値になっていれば1が返ってくると言う仕組みです。 で、この値を6行目から3017行目まで行い合計を求めているわけですね。 ・・・ああ、説明下手くそ!(自虐

Majestic-F
質問者

お礼

大変詳細にご教示いただき、感謝しております。 ありがとうございました。

その他の回答 (2)

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.3

>会社のある集計業務を退社する方より引き継いだのですが、エクセルの関数で理解ができない内容があり困っています。 会社の仕事で分からないことは上司に聞くのが原則です。 あなたが理解できないのはあなたの責任ではありません。 理解できないあなたに業務を引き継がせた上司の責任です。 実際のデータを参照しながら説明を受けないと理解しにくいので第三者に相談するような事柄ではありません。

Majestic-F
質問者

お礼

ありがとうございました。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.1

 $H$6:$H$3017の範囲内に入力されている文字列の中で、「全角文字は2バイト、半角文字は1バイト、という数え方で、1文字目(即ち文字列の先頭)から7バイト分の文字列」がN3020に入力されている文字列と等しく、尚且つ、同じ行のZ列に入力されている値が$M3021に入力されている値に等しい、という条件を満たしている行が何行あるのかという事をカウントしている関数です。

Majestic-F
質問者

お礼

大変わかりやすいご回答ありがとうございました。 助かりました。

関連するQ&A

  • エクセル関数使って集計したいです。

    エクセル関数使って集計したいです。 ある調査結果をもとに集計したいい表です。     20歳未満   ~30歳未満 ~40歳未満 40歳以上 1.とても良い    2.良い 3.どちらともいえない 4.悪い 5.とても悪い これに関数を使いたいのですが、SUMPRODUCTやCOUNTを使ってもエラーになってしまいます。 どうしたらいいか教えてください。

  • エクセルにおいての配列関数について

    エクセル の配列関数のSUMPRODUCT使用して このような式を書いた場合 SUMPRODUCT((条件1)*(条件2)*・・・(条件n)*(集計範囲)) =SUMPRODUCT((A1:A30=50)*(B1:B30=750)*(C1:C30=6600)*(D1:D30=210)*F1:F30) 集計範囲の行 いわゆるFの行の数字の中の一つのセルに 「3」などのカッコを使用した ものをいれると "#VALUE!" と表示され正しい答えが出ないのですが 解決方法を教えてください。 よろしくお願いします。

  • エクセル関数の応用方法

    エクセル2000を使っています。 計算書の集計に関数を使っています。       計算書    A    B     C  1  鉄骨  H型鋼   10.5t 2  鉄筋  異形   12.5t 3  鉄骨  C型鋼   20.5t 4  鉄骨  H型鋼   11.5t 5  ・   ・     ・ 6  ・   ・     ・ 7  ・   ・     ・ このような計算書があります。       集計表   A    B     C 1 鉄骨  H型鋼   22.0t 2 鉄骨  C型鋼   20.5t 3 鉄筋  異形    12.5t 4  ・ 5  ・ のように AかつBの条件を満たした、C(重さ)の計を求める関数を Cのセルに SUMPRODUCT(($A$1:$A$7=A1)*($B$1:$B$7=B1),($C$1:$C$7)) と作っています、 関数を変更せずに Bの条件を未入力もしくは何か・・・、 Aだけの条件でCの集計したいのですが、 よい方法が無いでしょうか。 宜しくお願いします。

  • エクセル関数(SUMPRODUCT)

    N18からR41まで(NからRまでは横方向で結合してあります)で4行おきの合計を出したいと思っています。 {=SUM((IF(MOD(ROW(N18:R41),4)=1,N18:R41)))} では正しく合計が出せましたが、ctrl+shift+enterは出来れば使いたくないため、他の関数を使うことにしました。 そこで =SUMPRODUCT((N18:R41)*(MOD(ROW(N18:R41),4)=1)) としたのですが、#VALUE!となってしまいます。 この式でも他のファイルでは計算できるのですが、今使いたいと思っているファイルでは計算が出来ません。 何がおかしいのかが分かりません。ご教授願います。 EXCEL2002です。

  • EXCELのカレンダー関数について

    EXCELのカレンダー関数DATEDIFについて、2002/1/31~2002/2/28までの月数を求めた場合(処理単位"M")に、0ヶ月となってしまうのですが、これを1ヶ月とする 式はどのようにしたら良いのでしょうか。簡単な方法があればご教示ください。 ロータス123では、同じ関数式で1ヶ月と表示されます。

  • エクセルでアンケート集計したいので、関数・マクロを教えてください!

    宜しくお願い申し上げます。エクセルでアンケート用紙を作りました。セルh3~h35までに各問いの答えが「数字(1~5)」で入っています。約300人分で、各々ankt1~ankt300と名前を付けてエクセルファイルで保存してあります。それからh3に1は何人?h3に2は何人?・・・h35に4は何人?h35に5は何人?と集計したいのです。エクセルの関数・マクロで出来る方法がありましたら、どうぞご教示下さい!≦(._.)≧

  • Excel 2003のエクセル関数

    前回投稿させていただいたのですが、具体性に欠け、説明がしづらいため一旦クローズし添付ファイルとともに再投稿させていただきますので、よろしくお願いいたします。 '2013Oct'!J5、'2013Oct'!L5、'2013Nov'!J5、'2013Nov'!L5に入れる関数式について教えてください。 '2013Oct'!J5の条件は以下となります。 1. 'BP Info'!F3:F29が"Pre"であること 2. 'BP Info'!I3:I29が"No"であること 3. 上記条件を満たしている場合、'BP Info'!H3:H29の時間を合算する 現在の関数式は =SUMPRODUCT(('BP Info'!$I3:$I29="No")*('BP Info'!$F3:$F29="Post"))*('BP Info'!$H3:$H29) と入れていますが、正しいでしょうか? '2013Oct'!L5の条件は以下となります。 1. 'BP Info'!F3:F29が"Post"であること 2. 'BP Info'!I3:I29が"No"であること 3. 上記条件を満たしている場合、'BP Info'!H3:H29の時間を合算する 現在の関数式は =SUMPRODUCT(('BP Info'!$I3:$I29="No")*('BP Info'!$F3:$F29="Post"))*('BP Info'!$H3:$H29) と入れていますが、手動計算すると10.00となりこれが正しいのですが、5.00と表示されます。どこが間違っているのでしょうか? '2013Nov'!J5の条件は以下となります。 1. 'BP Info'!F30:F50が"Pre"であること 2. 'BP Info'!I30:I50が"No"であること 3. 上記条件を満たしている場合、'BP Info'!H30:H50の時間を合算する 現在の関数式は =SUMPRODUCT(('BP Info'!I30:I50="No")*('BP Info'!F30:F50="Pre"))*('BP Info'!H30:H50) と入れていますが、#VALUE!と表示されています。 正しい関数式は何になりますでしょうか? '2013Nov'!L5の条件は以下となります。 1. 'BP Info'!F30:F50が"Post"であること 2. 'BP Info'!I30:I50が"No"であること 3. 上記条件を満たしている場合、'BP Info'!H30:H50の時間を合算する 現在の関数式は =SUMPRODUCT(('BP Info'!I30:I50="No")*('BP Info'!F30:F50="Post"))*('BP Info'!H30:H50) と入れていますが、#VALUE!と表示されています。 正しい関数式は何になりますでしょうか? 以上です。何卒よろしくお願いいたします。

  • Excelで値貼り出力をするVBAは作れますか?

    Excelで値貼り出力をするVBAは作れますか? Excel2003を業務で使用しています。 SUMPRODUCTなどのいろんな関数を使って売上げ報告書を集計し、 取引先に送っているのですが、計算式や参照式でファイルが重くなっているので、 値貼りをしたファイルを作成したいのです。 そこで、VBAを使って以下のどちらかを実現することは可能でしょうか。 ・報告書の全シートの全書式(罫線・色)と値を別ファイルに出力 ・書式のみ、全て空欄の別ファイルに全シートを値貼り これが出来るととても助かるので、ご教示ください。宜しくお願いいたします。

  • エクセル BLOOKUP関数について。

    =IF(B7="","",VLOOKUP(B7,中間,2,FALSE)) 上記のような式を入れて、エクセルで集計をしているのですが、1つのフォルダに同様の書式を用いたものが7枚あります。そのうちのシートの1枚だけが、上記関数が上手く動きません。#N/Å となります。コードをB7に入力すると、1~6までのシートはきちんと動くのに、7枚目のシートだけエラーになります。どのシートも関数は全く一緒です。数原因は何なんでしょうか・・。分かる方いましたら宜しくお願いします。

  • excel vbaの関数の使い方

    excel VBAでsumproduct関数を使いたいがでますのですがどうしても実行できません 何が原因でしょうか、どなたか教えてください。 ------------------------------------------------- 下記コードは実行できます。 Worksheets("集計").Range("j4").Value = WorksheetFunction.Sum(Worksheets("日常").Range("h4:h13")) 下記コードは型が違うとのコメントがでます。 Worksheets("集計").Range("j4").Value = WorksheetFunction.SumProduct((Worksheets("日常").Range("c4:c13") >= j2) * Worksheets("日常").Range("c4:c13") <= k2) * Worksheets("日常").Range("d4:d13") = l2 * Worksheets("日常").Range("f4:f13") = m2 * Worksheets("日常").Range("h4:h13") --------------------------------------------------------------------- ワークシートは、日常、集計、の二つがあります。 「日常」には、C4:H13にデータがあります。 c列に年月日、d列にコード番号、e列に購入箇所、f列にコード番号、g列に商品、h列に金額 が入力されています。 「集計」には、j2に開始日、k2に終了日、l2にd列のコード番号、m2にf列のコード番号、 が入力されています。 環境は、windows10 使用しています。 ----------------------------------------------------------- 以上の状況ですがvba でsumproduct関数を使いたいのですが実「実行」できません,たかどなたか教えて頂けませんか。

専門家に質問してみよう