• 締切済み

Excelの表計算の方法(各セルの自然対数の合計と分数の合計の求め方)

  A B C D E 1 0 2 1 3 まず、上記の表で、D1はA1からC1までの合計です。 ここでE1で = -A1/F1*LN(A1/F1)-B1/F1*LN(B1/F1)-C1/F1*LN(C1/F1) という特殊な演算(詳しくはエントロピーの計算です)をしたいと思います。 以下詳細な説明です。 A1/F1 → 分子が各セル、分母が合計 LN(A1/F1) → 上記の自然対数を求めます -A1/F1*LN(A1/F1) → 上の二つを掛けて、負にします -A1/F1*LN(A1/F1)-B1/F1*LN(B1/F1)-C1/F1*LN(C1/F1) → 行全ての合計 計算式は上記であっているのですが、2つ問題があります。 ・実際は列が多く、各セルの計算式を上記のように書くことはできません。まとめて関数を記述することはできないでしょうか? ・自然対数の計算(=LN(値))は、値に0が入ると、エラー(#NUM!) が出てしまいます。上記の計算式では、#NUM!が起こります。上手く値の0は飛ばして行全体の合計を出すことはできないでしょうか? 以上、ご教授の方、よろしくお願い致します。

みんなの回答

noname#52504
noname#52504
回答No.4

ご質問の趣旨を取り違えていましたらすみません。 素朴に配列数式でもいけるように思います。  E1: =SUM(IF(A1:C1=0,0,-(A1:C1/F1)*LN(A1:C1/F1))) を配列数式として入力。 ※通常の数式は、数式を入力した後Enterキーで確定しますが、  これは配列数式なので、CtrlとShiftを押しながらEnterで確定してください。 略解  A1からC1の各セルの値Xについて、  X=0ならば0を、でなければ-(X/F1)*LN(X/F1) を返した配列の和を返す。 或いは、LN(1)=0であることを利用して、  E1: =SUMPRODUCT(-(A1:C1/F1)*LN((A1:C1=0)+(A1:C1<>0)*A1:C1/F1)) とする方法もあります。こちらはEnterキーのみで確定してOKです。 略解  A1からC1の各セルの値Xについて、  -(X/F1)*LN(【Xが0ならば1,Xが0でなければX/F1】)) を返した値の和を返す。 A1~C1の値が0でない場合に質問文の数式を同じ値が返ることは確認しました。 0を含む場合の解釈があっているかどうか…。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.3

ka_na_deです。 2番目の回答では、 データが複数行あると仮定して説明しました。 もし、1行だけでよいのなら、 1枚のシートで簡単にできます。 その場合は補足してください。 また、説明します。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.2

関数の方法を紹介します。 1)ファイルを新規作成して、シートを6枚用意してください。   Sheet1~Sheet6として説明します。 2)Sheet1に元のデータを貼り付けてください。   (見出し行なしで説明します。)   (合計の列は不要です。) 3)Sheet2に合計を計算します。   Sheet2のA1セルに   =SUM(Sheet1!1:1)   と入力し、以下コピー&ペースト 4)Sheet3に割合?を計算します。(各値/合計)   Sheet3のA1セルに   =Sheet1!A1/Sheet2!$A1   と入力し、以下コピー&ペースト   その後、列方向にもコピー&ペースト 5)Sheet4に対数を計算します。   Sheet4のA1セルに   =IF(Sheet3!A1=0,0,LN(Sheet3!A1))     と入力し、以下コピー&ペースト   その後、列方向にもコピー&ペースト 6)Sheet5に(各値/合計)*対数(各値/合計)*(-1)を計算   Sheet5のA1セルに   =Sheet3!A1*Sheet4!A1*(-1)    と入力し、以下コピー&ペースト   その後、列方向にもコピー&ペースト 6)Sheet6に 行すべての合計を計算します。   Sheet6のA1セルに   =SUM(Sheet5!1:1)   と入力し、以下コピー&ペースト 以上です。 Sheet1の元データは、 EXCEL2003では、65536行、256列まで可能です。 EXCEL2007では、もっといけるようです。 尚、シート名は、式をすべて入力後に、 シートタブ上で右クリックして変更すれば、 式のシート名も自動で変更できます。 必要であれば、適当に分かりやすい名前にしてください。 また、途中の計算シートが邪魔であれば、 シートを選択し、 「書式」→「シート」→「表示しない」 とすることもできます。   

kimurappi0
質問者

お礼

Sheet別に計算する、というのは思いつきませんでした。 ありがとうございます!! 試してみます! 補足など細かい配慮までありがとうございました。

  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.1

F1セルの内容が不明ですが、 「D1はA1からC1までの合計」を「F1はA1からC1までの合計」 と読み替えて回答いたします。 まず #NUM! への対処法ですが、一般的にはiserr関数とif関数の組合せで対処する のが常套かと思います。 例) =IF(ISERR(LN(A1)),0,LN(A1)) LN(A1)がエラー値のときには0を返します。 それと長い式への対応ですが、これは隠しセルをたくさん使うか、ユーザー定義関数を 用いるしかないと思います。 隠しセルを使用する場合は、実際の事例により対処が異なりますが、基本的にはたとえ ば、GA、GB、GCセル(それぞれ183、184、185列目)を使って GA=-A1/F1*LN(A1/F1) GB=-B1/F1*LN(B1/F1) GC=-C1/F1*LN(C1/F1) などとし、GA、GB、GCを使って値を求める、といったやりかたです。 最後、ユーザー定義関数を用いる方法ですが、ご質問の事例をコード化しました。 Function fENT(rIdx As Long, cIdx As Integer) As Double Application.Volatile Dim AX, BX, CX, FX As Double If cIdx < 5 Then fENT = 0 Exit Function End If AX = Val(Cells(rIdx, cIdx - 4).Value) BX = Val(Cells(rIdx, cIdx - 3).Value) CX = Val(Cells(rIdx, cIdx - 2).Value) FX = AX + BX + CX fENT = 0 If AX <> 0 Then fENT = fENT - AX / FX * Log(AX / FX) If BX <> 0 Then fENT = fENT - BX / FX * Log(BX / FX) If CX <> 0 Then fENT = fENT - CX / FX * Log(CX / FX) End Function 1)[Alt]+[F11]を押す。 2)左側のプロジェクトエクスプローラーのVBAProjectを右クリックし   [挿入]→[標準モジュール] 3)右側のエディタエリアに上のコードを貼り付け 以上でシート上からfENT関数を使えるようになります。 使い方はE1セルに=fent(ROW(),COLUMN())と入れて下さい。 あとは上記コードを書き換えることで対応することになるのですが、その方法については 別途ご質問頂いた方がよろしいかと思います。

kimurappi0
質問者

お礼

ありがとうございます! 隠しセルについては初めて知りました。 試してみます!

関連するQ&A

  • 自然対数を含んだ計算

    自然対数を含んだ計算ですが、下記もとめ方は正しいでしょうか。 宜しくお願いします。 0.111=1/2π・1/2・ln5/X 0.111・2π・2=ln5+ln1/X (π=3.14) 1.39=1.61+ln1/X -0.22=ln1/X 1/X=e^-0.22 1/X=0.80 X=1.25

  • 自然対数計算について

    自然対数計算に関して   (0.1143+Y)ln((0.1143+Y)/0.1143)=0.25456     からYの値を求めたいのですが、どのように解いていけばよいでしょうか ln((0.1143+Y)/0.1143)=0.25456/(0.1143+Y)   まではわかるのですが以降が解りません   ご教示お願いします。可能であればExcel関数を使用した式を教示ください。   

  • 自然対数の経済学的な意味に関して

    自然対数の経済学的な意味に関して、若干理解できない部分があるので、よろしくご教示ください。 まず、以下のサイトで http://www2.kumagaku.ac.jp/teacher/~sasayama/macroecon/mailmagalogarithm.html > 一般に、A 円を年利 r の複利で預金した場合、t年後には元利合計は > A e^(rt) > で増加していきます。複利の金利を経済成長率とみなせば、上の式はGDPの成長率を表していると読み替えることができます。 という記述があります。これがいまいち納得できないのは、そもそもこの公式は n の値を無限大に、つまり「t 年に無限回利息を元金に組み入れる」という、ありえない想定のもとで生まれたもので、それがなんで、複利預金の元利合計の計算式として一般化できるのか、いまいちわからないのです。 また、ポール・クルーグマンという経済学者の論文で、やはり自然対数を使った効用関数の式が出てくるのですが、上記サイトで学んだ自然対数の用法とはなんか違うような使われ方をしていて、解釈に悩んでいます。 http://cruel.org/krugman/japtrapj.html > U = ln(c1) + D ln(c2) + D^2 ln(c3) + ... 最初の ln(c1) というのは、e を何乗すると1時間の消費額になるのか、という意味ですか? すみません、そうだとしても意味わからんです。さらに割引率が絡んできたりしてるのでお手上げです。なぜ効用と元利合計、割引率が結びつくのかがそもそもわかりません。これの意味も教えていただけませんでしょうか。

  • Excel ある条件で大量のデータを計算するには

    Excelで、縦は500行からそれ以上あるデータを下記の条件で計算を行いたいのですが、どのようにしたら宜しいでしょうか。 大量のデータであっても、簡単に計算が可能な方法をご教授頂けると有難いです。 1)A+Bでマイナス200で計算されたセル(Bが-200のセル)は、ここで完了するので、C'とD'とFでは計算しません。 2)Bが0で尚且つCが-200以下のセルのみ、A+Cで計算し、ここで完了するので、D'とFでは計算しません。 3)上記1)2)でマイナスされず、Dに-200の数値が入っているもののみ、A+Dで計算し、ここで完了するので、Fでは計算しません。 4)上記1) 2) 3)でマイナスされなかったセルのみ、FでE-Aの値を計算します(B’, C’, D’の数値は特に残す必要がなくFの結果だけ分かれば良いです)。Fでは、上記 1) 3)でマイナスされた場合-200の数値、また上記 2)でマイナスされた場合その数値(例えば-300、-500など)をセルに表示させる必要があります。 ※ BとDは、0か-200の値が入っています ※ Cは全て0かマイナスの値ですが、様々な数字が入っています ※ Eにも様々な値が入っています ※ B,C,Dには既に計算式が入っています 分かりづらく申し訳ありません。 具体的には、このように計算を行いたいです。  A    B   B’   C   C’    D   D’   E    F 15750 ー200 15550 ー450 15550  ー200 15550 15600 ー200 15680    0 15680 ー200 15480  ー200 15480 15550 ー200 15550 ー200 15350  ー30 15350    0 15350 15480 ー200 15460   0 15460  ー300 15160 ー200 15160 15260 ー300 15380 ー200 15180 ー130 15180 ー200 15180 15300 ー200 15550   0 15550 ー500 15050 ー200 15050 15000 ー500 15540   0 15540  ー20 15540 ー200 15340 15550 ー200 15530   0 15530  ー10 15530   0  15530 15630 100 15620   0 15620  ー80 15620   0  15620 15600 ー20 B’(上記1)の条件) C’(上記2)の条件) D’(上記3)の条件) F (上記4)の条件) Windows 8.1でして、Excelのバージョンは2013です。 大変申し訳ございませんが、解り易いご回答をお待ちしております。 どうぞ宜しくお願い申し上げます。

  • 自然対数

    自然対数lnはどのような時に使うんですか? どんな計算に便利??

  • 表計算(ある条件にそうものだけを合計したい)

    Excelで、表にあるようなものを作っています。 氏名(セルB4:E4)の頭文字に“A”もしくは“B”がついており、各科目(B5~E9)の点数が出ています。 この“A”の頭文字がついている人の1月の合計点を“A 合計”(セルF5~F9)に出し、Bの頭文字がついている人は、“B 合計”(セルG5~G9)にそれぞれ出していきたいと思っています。 その場合の計算式は、どのようになりますでしょうか? 初歩的かもしれませんが、どうか助けてください。 よろしくお願い致します。

  • エクセルの計算式

        A列  B列  C列  D列  E列 1行   A   2   100       ○○○ 2行   B   2    200 3行   A       200 4行   C        100 5行   A       100 上記表で、B列が空白の時の、A列のAの、C列の合計を(この場合は、300) 例えば、E列の1行目セルに表示させる時の「E1」の計算式が知りたいのですが、よろしくお願いいたします。

  • 空白セルを無視して対数近似

    A列、B列 0 957 27.31 599 56.87 402 79.08 255 158.37 92 265.17 空白セル 541.76 空白セル 807.54 空白セル 1403.11 空白セル といった2列目データ行数が不定のエクセルデータに対し、 この場合は SLOPE(LN(B1:B5),A1:A5) というように、 B列で値をもっているセルだけを使って対数近似をした片対数グラフの傾きを求めたいです。 LNは空白セルを無視してくれないので、SLOPE(LN(B1:B9),A1:A9)とかやるとエラーが出てしまいます。 何かよい方法はないでしょうか。

  • エクセルの計算式で・・

    エクセルの計算式を=1.01*(A1)とし、1行のセルはこの計算式で求められているのですが、この計算結果の値を、小数点以下四捨五入するには、どのような数式にすると良いのでしょうか? 例)A1 500 B1 505 C1 510.05 D1 515.15 E1 520.30 F1 525.50 ...

  • 自然対数を用いた1.0005の5乗の概算値の導出法

    自然対数を用い、対数や逆対数の表を引かずに1.0005の5乗の概算値を求めよという問題についてです。  (答えは、xの値が非常に小さいときの公式 (1+x)^p=1+px より、1.0025であることはわかるのですが、下記に書きましたが自然対数をどのように使うのか、わかりそうでわからずモヤモヤしております。) 下記についてどなたかわかる方ご教示お願い致します。 (社会人ですが高校生の数学レベルでお願い致します。) 上記は、R.P.Bauman 熱力学序説 東京化学同人 1968.の付録「基礎的な計算法」章末問題にあるものです。 「基礎的な計算法」の中の、自然対数についての説明は下記の通りです。 ----------------- 『数eはxの小さな値に対する関数(1+x)^(1/x)の極限値として定義される。それゆえ、xの十分小さな値に対して(1/x)ln(1+x)=ln e = 1 すなわち ln(1+x)= x である。』 ------------------ これからN=1.0005の時、ln N=0.00050はわかります。そして、1.0005の5乗は(1+0.0005)の5乗として、多分、1の5乗+0.0005×5なのだろうと思います。ですが、自然対数を用いて「(1+0.0005)の5乗」=「1の5乗+0.0005×5」がどのように導けるか、その導出がわかりません。 また、微分を使った 「1>>xの時の (1+x)^p=1+px」の 高校生向けの証明はみつかりましたが、自然対数の場合どのように概算値を導いたら良いのでしょうか。証明(といっていいのかわかりませんが)を教えてください。

専門家に質問してみよう