• ベストアンサー

一行おきの平均

open office calc 3. で表記の数式を「=AVERAGE(IF(MOD(ROW(A2:A7);2)=1;A2:A7))」と入力しましたが、正しい答えが返ってきません。どのような数式を書けばよいのか教えて下さい。mac osX使用。

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

  • ベストアンサー
回答No.6

 #3です。 >これは感想ですが、excelでできることが、同じような式で、open officeでできないのが、不思議です。    => 同感です。些細な関数よりも実用性が高いPDF Fileに関する下記機能がCalc(OpenOffice.orgの表計算)では標準で出来るのにExcelでは出来ないのが不思議です。    ・ PDF形式 File出力が出来ないのか?(2007からは別途アドインを追加すればなんとか可能ですが)    ・ 再度表計算Soft形式で読み込めるPDF 形式が作成出来ないのか?    PDF Fileは現在の書類においてはDefault Standardなのに何故できないのか?  更に一度PDF FileにしたFileを再度、表計算File形式で読み込めないのか?  同じ内容のPDF FileとExcel Fileの2つのFileを管理しなければならないのか?  個人的な感想としてはCalcを含めたOpenOffice.orgでは出来るのにExcelを含めたMS-Officeでは出来ない事が多過ぎて、使用しているPCにはMS-Office(2003、2007)を取敢えずInstallしていますが殆ど使用していません。 >このマクロで、以下の修正をするためには、どこをどう書き換えたらよいか教えて下さい。  => 回答するのは簡単ですが、因みにExcel のVBAは使用された事はありますか?    再質問の内容は同じ内容のVBAを変更する時とほぼ同じです。 >1。実行の結果がB8のセルに表示されますが、これをA1にする。   [変更前]    oSheet.getCellByPosition(1,7).Value = oSum / n   「変更後]    oSheet.getCellByPosition(0,0).Value = oSum / n >2。A列の2~7を対象にしていますが、これを例えばC列の2~7にする。   [変更前]    oSum = oSum + oSheet.getCellByPosition(0,i-1).Value    「変更後]    oSum = oSum + oSheet.getCellByPosition(2,i-1).Value  です。  参考までに。

chobimoko
質問者

お礼

例えば、ペイントとフォトショップを比較した場合、写真が好きな人であれば、フォトショップを購入する気になると思います。でも、excelとopen officeを比較しても、excelを購入する気にはならないでしょう。open officeが、気前が良すぎる、ということかもしれません。しかも、open office でできてexcelでできないことがあるというお話ですが、そうとすれば、ますますopen officeが無料で入手できるということは、たいへんラッキーということになりますね。 マクロの書き方ありがとうございます。excelはもっていないので、VBAもわかりません。 いろいろとありがとうございました。

その他の回答 (5)

回答No.5

#3です。    >A列2から7のうちの奇数行だけの値の平均を、A列1のセルに表示させる  => 表示させるのは1つのセルという事ですか?    つまり、任意のセル(B8 等)にA2~A7の奇数行の値を足し合わせて、A2~A7の奇数行の数(つまりA3,A5,A7の3)で割ると言う事ですか?  一番簡単なのは任意の列(B列など)に下記計算式の様に奇数行のみに数値が入る様にして、その値を用いて平均値を求めるのが王道だと思います。  「王道」と記したのは複雑な関数の組み合わせを使うと、値を変更した時やセルを移動した時などにもし値が間違って値が表示されても気付き難いからです。  表計算SoftではExcelでも最低256列ありますので、その内の1列に計算の途中経過を記している事は貴重な情報であり、見栄えが悪いならば単純にその列を非表示にすれば良いと思います。  個人的には「表計算Softを使いこなす」と言うのは「複雑な関数を組み合わせた」り、「マクロを使っている」ことでは無いと思います。  より、Simpleな関数を多く使って計算過程を確認できる様にしておくことだと思います。    [ 推奨方法 ]  A2~A7に任意の数値が入っている状態から、奇数行の値のみを足し合わせて、数値が入っているセルの数ので割る。  1) B2~B7に下記関数式を記す。       =IF(MOD(ROW();2)=1;A2;"")    2) 任意のセル(C8 等)に以下の式を記して平均値を求める。      =AVERAGE(B2:B7)  上記は個人的価値観ですので、質問者さんがどうしてもA2~A7セルの奇数行の平均を一度に求めたいのならば以下の簡単なMacroで出来ます。 Sub Main Dim oDoc As Object Dim oSheet As Object Dim oAverage As Variant Dim oSum As Variant Dim n As Integer Dim oOdd As Variant oDoc = ThisComponent oSheet = oDoc.getSheets().getByIndex(0) n = 0 oSum = 0 for i = 2 to 7 oOdd = i mod 2 If oOdd = 1 then oSum = oSum + oSheet.getCellByPosition(0,i-1).Value n = n + 1 End If next i If n <> 0 then oSheet.getCellByPosition(1,7).Value = oSum / n End If End Sub  参考までに

chobimoko
質問者

お礼

改めてお礼申し上げます。 推奨方法の趣旨はわかりました。が、B2からB7までの各セルに関数式を(例えコピペにせよ)書くのなら、もとの値を書く(A3,A5,A7の値を別の列に書く)のと手間はかわりませんので、関数式を使う意味がないような気がします。 他方、教えて頂いたマクロの方は、なるほどこういうものか、と感嘆しました。これまでマクロというのは使ったことがなかったので。 御陰様で当面の作業はこれで解決しました。更にお願いで大変恐縮ですが、このマクロで、以下の修正をするためには、どこをどう書き換えたらよいか教えて下さい。 1。実行の結果がB8のセルに表示されますが、これをA1にする。 2。A列の2~7を対象にしていますが、これを例えばC列の2~7にする。 これは感想ですが、excelでできることが、同じような式で、open officeでできないのが、不思議です。 ありがとうございました。

  • minosennin
  • ベストアンサー率71% (1366/1910)
回答No.4

#1です。 お書きの算式で「;」を「,」に変更して「Ctrl + Shift + Enter 」で確定し、excelで実行すると正しい答が表示されます。 (「;」と「,」は両ソフトの文法の違い?) 従って算式自体は正しいようです。配列関数の入力の仕方が分かれば解決では?

chobimoko
質問者

お礼

重ねての回答を頂き感謝します。 ただ、excelをもたないので、、、。 open office calcと excelでの、書き方の違いが、「、」でなく、『;』であるとすれば、何故この書き方でうまくいかないのでしょう。 他にも違いがあるのか、あるいは、open office では、そもそもこういう計算はできないのか、いろいろと疑問が湧いてきます。

回答No.3

こんにちは。 >数式を「=AVERAGE(IF(MOD(ROW(A2:A7);2)=1;A2:A7))」と入力しましたが、正しい答えが返ってきません。 => まず、質問の主旨は任意の列(例えばB列 等)の奇数行に、A2~A7の値の平均を表示させて、偶数行は空白にしたいと言う事ですか?  上記で質問の主旨が正しいとして回答します。  [ 原因 ]  1) 数式そのものが正しくありません。質問文に記されている構文ではExcelを含めたどの様な表計算Softでもエラーが表示されると思います。  2) IF文の構文が間違っています。   [ 回答 ]  以下に奇数行にのみA2~A7の平均値を入力する式を記します。(A2~A7は絶対Addessとします。)    = =IF(MOD(ROW();2)=1;AVERAGE($A$2:$A$7);"")

chobimoko
質問者

お礼

回答ありがとうございます。質問の仕方が悪かったことお詫びします。 趣旨は、A列2から7のうちの奇数行だけの値の平均を、A列1のセルに表示させるためにどうするかということです。 あらためて教えて頂ければ幸いです。

  • wret615
  • ベストアンサー率34% (133/386)
回答No.2

俺もOpenOfficeのCalcは分からんから(配列数式使えんのな)、参考までに、でええかな?SUMPRODUCTは使えんか? MSのExcel向けサイトだが、こいつを見てみてくれ。 http://www.eurus.dti.ne.jp/~yoneyama/Excel/ex-q-a/q_keisan.html#itigyogotogoukei

  • minosennin
  • ベストアンサー率71% (1366/1910)
回答No.1

配列関数ですから、MS EXCEL の場合は関数式全体を選択した状態で、「Ctrl + Shift + Enter 」で確定させますが、open office calc 3. の場合はどうでしょう。

chobimoko
質問者

お礼

回答ありがとうございます。 残念ですが、open office calc + Mac の組み合わせでは、control+shift+enter  では、何もおこりません。つまり、{}で全体が囲われるといようなことは起こりません。また、手入力で{}を加えても結果はエラーとなるだけです。数式自体の書き方の問題ではないかと想像しているのですが、、、。

関連するQ&A

  • =MOD(ROW(),2)=0が一行置きになる意味

    初歩的な質問ですみません。 =MOD(ROW(),2)=0 について教えてください。 MODはあまりを返す関数、ROWが行を示す関数ということはわかるのですが、どうしてこの「=MOD(ROW(),2)=0」という数式が「一行置きに」を表すようになるのでしょうか? 「ROWの()で指定した範囲の行番号を2で割ったときの余りが0」ということだと思うのですが、これは「余りが0=偶数」だから「偶数行を指定する=一行置き」という理解であっていますか? また、( )の中を「,」で区切るのはどういう意味を持ちますか? 関数によって違うとも思いますが、「,」の前と後で、「前の数値に(を)後の数値を(で)」というかんじでしょうか?「IF」関数の場合「,」がいくつも続く時はどういう意味になりますか?

  • 一行置きに合計する関数(数式)

     A   B  C 1 東京 前 40  2 東京 後 22 3 大阪 前 10 4 大阪 後 22 5 広島 前 10 6 広島 後 22 と入力されているエクセルのシートで、B列に「前」とある時だけのCの合計を求めたいのですが、数式はどうなりますか。 「前」「後」とある行だけを別の列(例えば前をD列、後をE列)に一度抜き出してから、それをSUMで合計するのではなく、一発で(?)求められる式を知りたいのです。 http://www.moug.net/tech/exopr/0090046.html 上記のリンクを参考に、 =SUM(IF(MOD(ROW(C1:c6),2)=1),c1:c6, "") と入力してみたのですが、エラーとなってしまいます。(入力した数式にはエラーがあります。と表示され、Enterキーが押せない状態になります。) 間違っているところを教えてください。 また、MODで一行置きを指定する場合以外で、IFを使って「B1:B6が"前"の場合」「B1:B6が""後"の場合」で条件を指定して求められる場合はその式も教えていただけると助かります。 どうぞよろしくお願いいたします。 ちなみに使用OSはMacOS sierraで、Excelはfor Mac 2011です。

  • 配列数式で平均を出すと空欄が0で計算されてしまう

      A B C D 1  1 2 1 {=AVERAGE(IF($A$1:$A$4=$C1,B$1:B$4))} 2  1 4 2 {=AVERAGE(IF($A$1:$A$4=$C2,B$1:B$4))} 3  2 6 4  2 8 上記のような数値、数式ですと、 B列すべてに数値が入力されているため、問題なく計算するのですが、 例えば、B2のセルを空欄にすると、空欄を0としてしまい、 D1の計算結果が1となってしまいます。 D1の数式を=AVERAGE(B1:B2)としますと、空欄は空欄として扱い、 計算結果は2となります。 配列数式を使った場合にも、空欄を空欄として扱い、 計算結果が2となるような方法はありませんでしょうか。 よろしくお願いします。

  • 配列数式での平均値

    こんにちは。 今、エクセルで配列数式を使って平均値を出す作業をしています。 列Aには男女別を示す1、2が入力されており、 列B以降にはいろいろなデータが入っています。 それらデータにおける男女別の平均値を出したいので 配列数式を使って求めるまでは良かったのですが、 どうやら、列B以降の空欄になっているセルも 0として計算されてしまっているようなのです。 (普通のaverageと同様に)空欄を数に入れないで計算させるには どのようにしたらよいのでしょうか? ちなみに今使っている配列数式は、 {=average(if(A1:A10=1,B:B10,""))} です。

  • 1行おきのセルの合計数式結果が0になってしまいます。エクセル

    1行おきのセルの合計数式結果が0になってしまいます。エクセル データ範囲がE2からU117あり、E列のE2から1行おきに数値E116までを合計するため E118に次の数式を入力しました。 =SUM(IF(MOD(ROW(E2:E117),2)=MOD(ROW(E2),2),E2:E117)) Ctrl+Shift+Enterすると結果が0になってしまいます。 指定の行には数値以外に「-(ハイフン)」や、範囲行に数式が入っていたりするからでしょうか?   E 2   50  ←足したい 3  数式 4   -  ←足したい 5  数式 ・     ・ 117  150  ←足したい 118  数式 119  =SUM(IF(MOD(ROW(E2:E117),2)=MOD(ROW(E2),2),E2:E117))

  • 配列数式って何ですか??

    きのうは、ある列において偶数行だけの合計を求めたいときの計算式を教えてもらいました。 数式は以下のようになるそうです。 {=SUM(IF(MOD(ROW(A1:A10),2)=0,A1:A10,""))} (ありがとうございました。) しかし、そこで出てきた「配列数式」というものが何なのか分かりません。上では{}でくくられた部分だという事はわかるのですが、どうして一番初めと終わりに{}があるのか、たとえば比較として、上において{}がない数式ではどのような計算がされてしまうのでしょうか。 また、{}の位置がSUMの後にあるとき、 =SUM{(IF(MOD(ROW(A1:A10),2)=0,A1:A10,""))} なんかはどんな計算をしていることになるのでしょうか。 配列数式の計算手順がイメージできないのです。 どなたか教えて下さい。

  • エクセルにて平均値を表示したいけど?

    エクセルにて平均値を表示したいけど? その方法が分かりませんので宜しくお願いします。 月別売上金の平均値を表示させたいのですが、 A列から1月B列2月順次L列12月としてM列に其の月までの平均値を表示させたいのですが 該当月までの平均値をIF関数にてできますでしょうか?  現在はAVERAGEの数式を該当月の列に置き換えて利用していますが 各月ごとに数値を入力すれば即該当月までの平均値が表示できればと思います。  尚 現在は年間分入力用書式を作成されて月末に数値を入力、数式を変える、作業をしています。 OSはオフィス2007を使用してます。 宜しくお願いします。

  • オープンオフィスの数式(関数)について

    こんにちは。 以前使用していたエクセルでは、 ・セルに「日本」と入力すると、隣のセルに「にほん」と表示される このようなことが数式(関数?)を利用して実現できましたが、オープンオフィスのCalcでは出来ないのでしょうか? よろしくお願いします。

  • Open Office.org Calcのフォント

    Open Office.org Calcで日本語入力をすると、数式入力ボックスには正しく表示されるのに、メイン画面には何を入力しても□しか表示されません。どのようにしたら直りますか?

  • 空白を省いた平均値

    空白を省いた平均値を出したいと思い関数を入れていますが 下記の数式ではエラーが出てしまいます。 自分で解決しようとしましたが時間もありません。 どなたか教えてください。お願いします!! =AVERAGE(IF(A11,A19,A27,A35<>"",A11,A19,A27,A35,))

専門家に質問してみよう