• ベストアンサー

=SUM(ROUND(A1,0),ROUND(A3,0),ROUND(A10,0))をもっと簡単に

エクセル200です。 A1、A3、A10の各セルにある数値を四捨五入してから合計するのに =SUM(ROUND(A1,0),ROUND(A3,0),ROUND(A10,0)) でできるのはもちろん存じておりますが、もっと簡単に書く方法はないでしょうか? A2、A4からA9までのセルが空白であれば =SUMPRODUCT(ROUND(A1:A10,0)*1) A2、A4からA9までのセルが文字列であれば {=SUM(IF(ISNUMBER(A1:A10),ROUND(A1:A10,0),""))}(配列数式) でできるのですが、数値であるために使えません。 上記のA1、A3、A10はあくまで一例で、実際は同一列ではありますがもっとセル数が多いのです。そのため簡単に書ける方法を探しています。 よい方法があればご教示くださいませ。

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.5

雨の鹿児島から、おはようさんです。 これが簡単かどうかは別として、、、 =SUMPRODUCT((ROW(A1:A10)={1,3,10})*ROUND(A1:A10,0))   以上です。  

merlionXX
質問者

お礼

おはようございます。 こちらも寒い朝です。 =SUM(ROUND(A1,0),ROUND(A3,0),ROUND(A10,0)) =SUMPRODUCT((ROW(A1:A10)={1,3,10})*ROUND(A1:A10,0)) と並べると、ご教示いただいた式の方が長く見えますが、対象のセルが4つ以上になるとすごい威力を発揮してくれますね! セル指定が行番号だけで済み、セルがいくら増えても他の部分に影響を与えないなんてとてもすばらしい方法です。 ありがとうございました。 とても感謝いたしております。

merlionXX
質問者

補足

すばらしい数式をご教示いただきながら、今後のためにもうひとつおしえてください。 =SUMPRODUCT((ROW(A1:A10)={1,3,10})*ROUND(A1:A10,0)) とすると、その後範囲全体をドラック移動した場合や範囲内に行を挿入された場合、当然ながら{1,3,10}にだけは反映してくれません。 {ROW(A1),ROW(A3),ROW(A10)}としてみたらエラーになりました。 対応方法はありますか? 勝手を申しましてすみません。 .

その他の回答 (11)

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

#2です。 ユーザー定義関数による方法は、 SUM関数と同様の使い勝手を実現しています。 つまり、 =RSum(A1,A3,A10) =RSum(A1:A10) =RSum(A1:A10,A15:A25,B1:C20) などのセル範囲の指定が可能です。 また、行の挿入、削除、移動にも対応しています。 また、セル範囲をクリック・ドラッグで指定可能です。 以上です。

merlionXX
質問者

お礼

なんどもありがとうございます。 やはりVBAの威力はすごいですね。 今回はワークシート関数でという制限があったもので使えないのが残念です。 でもありがとうございました。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.11

CoalTarさん、早速の回答ありがとうございます。   SUMの引数を複数ですか、それは頭の隅にもありせんでした。 てっきり、引数1個でやるものと。。。。 SUMPRODUCTの件はそれ故のことです。 引数が複数なら仰るとおり意味がありませんね。 何れにしろ今回の件は、目から鱗。 貴重なお時間を割いていただき感謝します。 ありがとうございました。 merlionXXさん、質問者の質疑応答に当方が質問して申し訳ありませぬ。 ま、1回は回答したということでお許しあれ。。。 以上です。  

merlionXX
質問者

お礼

お許しあれ。などとはとんでもない。 いつもお世話になり、本当にありがとうございます。

回答No.10

myRangeさん、お褒めいただきありがとうございます。 =SUM(ROUND(CHOOSE({1;2;3;4},A1,A5,A8,A10),0), ROUND(CHOOSE({1;2;3},A11,A12,A15),0)) と考えれば29*30個は可能だと思います。 Chooseの29個とSUMの30個 SUMPRODUCTは使っても意味がないような? 参考まで

merlionXX
質問者

お礼

ありがとうございます。 ほんと勉強になります。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.9

昨日とはうってかわった晴天の鹿児島から、こんにちは。 当方の方法で10分程度検討してみました。 そのままのセル数での移動はINDEXを使用して出来ましたが、 (式は短いがちょと姑息な手段なので見せられませぬ) 1,3,10の行数を指定するので挿入などがあるとダメ。 よって、CoalTarさんのが素晴らしい方法だと思われます。 但し、必ず、配列定数を使うこと(理由は式をみれば分かると思います) そして式は、SUMの配列数式ではなく、SUMPRODUCTがいいでしょう。 まさか、該当セルを削除することもあるのでそれにも対応するには? とか、該当セルが30以上あるんですが、とかはないですよね? 実は該当セルが30以上あったときの式を考えてみたのですが、 ご存知のとおり、エクセル一般機能には疎いもので10分程度でギブアップ。 そこで、CoalTarさんにお願いあり。 これを見ている誰もが30以上の式を知りたいでしょうから それを是非アップいただければと。 以上です。  

merlionXX
質問者

お礼

お手間かけました。 鹿児島にはまだ一度も行ったことがありませんがきっととても良いところなのでしょうね。 ありがとうございます。

回答No.8

#7です >対応方法はありますか? 絶対参照にするか、配列定数(3つなら{1;2;3})にすればよいだけです。 配列定数にするには ROW(A1:A3) を選択して[F9]キーです

merlionXX
質問者

お礼

配列定数ですか。 > 配列定数にするには ROW(A1:A3) を選択して[F9]キーです 勉強になりました。 ありがとうございます。

回答No.7

選択するセルが29個以内であれば(応用すればもっとできるけど) 3個の場合 =SUM(ROUND(CHOOSE(ROW(A1:A3),A1,A3,A10),0)) 4個の場合 =SUM(ROUND(CHOOSE(ROW(A1:A4),A1,A5,A8,A10),0)) いずれも[Ctrl]+[Shft] +[Enter] で確定 セル範囲が使えないのでイマイチかな

merlionXX
質問者

お礼

ありがとうございます。 この方法でもできました。 欲を言えば、範囲全体を縦に方向にドラック移動した場合、当然ながらROW(A1:A3)にも反映してエラーになります。 対応方法はありますか? 勝手を申しましてすみません。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.6

おそらく、それらのセルを選択するには、それなりの理由があるわけですよね その「理由」で、選択するような関数を使えば簡単になると思うのですが 例えば  ○○より大きい  △列に○○という文字が入っている など、 まったく、気まぐれでと言うことだと、式の中にその行に関するデーターを含めるか、作業列を使い、印を付けるしかないのでは?

merlionXX
質問者

お礼

はい、ありがとうございます。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.4

A列に数値が入力されている中で指定したセルだけの数値にROUND関数を使ってその合計を求めることでしたら、=SUM(ROUND(A1,0),ROUND(A3,0),ROUND(A10,0))のような式で対応することになるでしょう。しかし、これがたくさんの数値となりますと面倒なことになりますね。 やや古典的ですが次のような作業列を使った方法がよいでしょう。 B列には指定するセルの行番号を入力します。例えば1,3,10とそれぞれ上からのセルに順に入力します。 C1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(COUNTIF(B:B,ROW(A1))=0,"",ROUND(A1,0)) D1セルには=SUM(C:C)と入力すれば求める答えが得られませね。

merlionXX
質問者

お礼

ありがとうございます。 作業列を用いる方法はとてもわかりやすいのですが今回は使わない方法を探っておりました。

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

#2です。 余談ですがRound関数は、 ワークシート関数とVBA関数のどちらもありますが、 計算結果が異なるようです。 参考ページをごらんください。 http://support.microsoft.com/kb/225330/ja こちらはOFFICE2003ですがOFFICE2000と同様に 異なる結果となりました。 ご参考までに。

参考URL:
http://support.microsoft.com/kb/225330/ja
merlionXX
質問者

お礼

VBAでのROUNDが銀行型になり、ワークシート関数での算術型とことなるということですね。 ありがとうございます。

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

既存の組み込み関数を使った方法をお求めだと思いますが、 思いつかないので、ユーザー定義関数を作ってみました。 Function RSum(ParamArray argRng()) As Double   Dim buf As Double   Dim i As Variant, j As Variant      buf = 0   For Each i In argRng()     If IsArray(i) Then       For Each j In i         buf = buf + Application.WorksheetFunction.Round(j.Value, 0)       Next     Else         buf = buf + Application.WorksheetFunction.Round(i.Value, 0)     End If   Next   RSum = buf    End Function '========使い方============ ' =RSum(A1,A3,A10)

merlionXX
質問者

お礼

ありがとうございます。 やってみましたがうまくいきました。 今回はワークシート関数での方法を探っていましたが、勉強になります。

関連するQ&A

  • エクセルで各セルそれぞれ四捨五入してからの合計を求めたいのです

    エクセル2000です。 ワークシート関数でこんな場合どうすればよいでしょうか? 添付画像のようにA列に数値データがあります。 途中に空白(数式で ="" が表示されています。)のセルもあります。 このA列のデータを各セルそれぞれ四捨五入してからの合計を求めたいのです。 画像ではB列を作業列にして、 =IF(ISNUMBER(A2),ROUND(A2,0),0) と、="" への対応をして ROUNDして合計していますが、作業列を使わなくとも良い方法があればと思い質問いたしました。 途中の空白が、数式による ="" では無くほんとの空白であれば、 =SUMPRODUCT((ISNUMBER(A2:A11))*ROUND(A2:A11,0)) で、一発で求められるのですが・・・・・。 ご教示いただければ幸いです。 宜しくお願いいたします。

  • sum関数で合計が返らない。

    sum関数で、数値の入ったセルの合計を求めようとしましたところ、なぜか合計が1600とならなければならないところ、0になってしまいます。 数値の入ったセルが数値であること(文字列ではない)は、isnumberで確認をしたのですが、原因がわかりません。 どなたか解決方法をご存じの方がいましたらおしえてください。 excel2010です。

  • round関数について

    試しにエクセルで次の計算をしてみてください。 -16.76 7.9 -11.45 -8.88 -1 4.26 33.78 以上を全部足します。つまり「=sum(a1:a7)」です。当然「7.85」になります。 次に四捨五入します。round関数で小数点第2位を四捨五入して、第1位まで表示させます。つまり、「=round(sum(a1:a7),1)」ということです。すると「7.8」を返しました。 ん?「7.9」なのでは?と思い、次にこんな計算をしてみました。 A・・・=round(sum(a1:a7),2) B・・・=round(A,1) つまり、Aでいったん小数点第3位を四捨五入させた上で、その値を今度はBで小数点第2位を四捨五入させ、最終的に小数点第1位まで表示させたわけです。すると、ちゃんと「7.9」を返しました。 なんでこんな風になるのでしょうか?どうして一発で「7.9」にならないのでしょうか?

  • ROUND関数

    %表示で少数第1位未満を四捨五入しなさいという解答欄のセルに、85.1%という数字が入力されています。 数式を見てみると、=ROUND(D4/C4,3)になっています。 =ROUND(数値、桁数)にはずなのに、なぜ3という数字が入っているのか分かりません。なぜでしょうか?

  • ExcelのSUMを使用して足し算をすると違った答えになります

    合計が違ってきます。 1)Excelの掛け算をした結果(四捨五入の値で表記)を表記されている数値で足し算 2)掛け算されているセルをSUMを使って足し算をする(四捨五入) 合計が違う結果となる場合があるので困っています。

  • エクセルVBAで表の数値の微調整

    いつもお世話様です。 かなりの難問に突き当たってしまいました。お助けいただけると幸いです。 【前提】 A1:H11に表があります。(実際のセル番地は違います) A1:G10には数値が入力されています。(空白セルもありますが、数値が入っている場合はすべて下二桁めは四捨五入され、1230や5420、230といった感じです。1234や5423、234などはありません。) H1:H10には各行のTOTALがSAM関数で=SUM(A1:G1)のように入っています。 A11:H11には各列のTOTALがSAM関数で=SUM(A1:A10)のように入っています。 つまりH11に総合計があることになります。 【質問】 H11のセルの総合計の数値を、任意の値に変えた場合、それ以外の数値を、その割合で増減させ、やはり下二桁めは四捨五入したいのです。 その割合で単純にA1:G10の数値をFor Nextで変更させることは出来るのですが、そうすると場合により(というか、ほとんどの場合ですが)合計が変わってしまいます。 仮に、H11が55320という値、変更後が55000だったとすると、各セルの数値に55320/55000を乗じてROUNDすると、各列の合計はところどころプラスマイナス10程度ことなり、総合計は55030とか54980とか微妙に変わってしまうのです。 四捨五入だからどうしようもないのですが、これをうまく調整したいのです。 優先順位は 1.総合計(指定した任意の値は変えられない。) 2.各列の縦計 3.各セルに対する変更の比重を極力一定に です。 そうするために、まず各列の1~10セルのなかの最大値で端数を調整するしかないと思うのですが、(他にいい方法があれはそれでもいいですが)こうなってくるとわたしのVBAの知識では遠く及ばなくなってしまいます。 どうかご教示お願いいたします。

  • エクセルのROUND処理について教えて下さい。IF関数で条件指定

    詳しい方、教えて下さい!! エクセルで見積書を作成していて、素人ながら一応数式を入力して金額 が算出できるようにしています。その中で、ROUND処理をIF関数で条件 を指定した中で異なる桁数の数字に行いたいのですが、どうすればよい か分からず試行錯誤しています。 つまり、    A  B  C   D     E    F    G 1  1.0 式 空白 106,300 80% 85,000  85,000 2 89.0 m 1,900 169,100 80%  1,500 133,500 というデータで、 Cのセルには=IF(OR(A1=1,A1="",F1=""),"",ROUND(F1/E1,-2)) Dのセルには=IF(OR(A1="",E1=""),"",IF(A1=1,ROUND(F1/E1,-2),A1*C1)) Gのセルには=A1*F1 の数式の結果がそれぞれ入っています。 見積として客先に提出するため、Aのセルが1の場合はCのセルを空白に してDのセルにのみ数式の結果が出るようにしたいのです。 が、F1のセル(5桁)とF2のセル(4桁)のように数値の桁数が違う場合 に、四捨五入を行う桁数をそれぞれにF1=-2、F2=-1とする方法が分から ず困っています。桁数が違う場合には手入力で四捨五入の桁数を変えれ ばよいのでしょうが、それだと手間がかかる上に桁数の変更を忘れてし まうことがあり、間違いのもとなので、間違いにくい方法で数式を組み たいのです。 詳しい方、解決方法があれば回答お願い致します。

  • エクセル 一行置きに表面上の数字を足す方法

    どなたか詳しいかたおりましたら、 アドバイスお願いします。 質問内容はタイトルの通りなのですが、 以下に詳しく記載します。 5.5+6.5の数式がある場合、エクセルでは四捨五入していますので、 表示は6+7になります。 このまま、オートSUMで計算してしまうと、 6+7=12と表示されてしまうので、 以下の数式を使用して、 =SUMPRODUCT(ROUND(A1:A2,0)) 6+7=13 と表示させています。 そこで、上記の場合、行(もしくは列)が連続していますので、 上記の数式で良いのですが、 これを一行置きで計算させたい場合は、 どのような数式になるでしょうか? 試しに、 =SUMPRODUCT(ROUND(A1+A3,0))とやっても エラーになってしまい、うまくいきません・・・。 どなたか詳しいかたアドバイスお願い致します。

  • #260の補足です。四捨五入の方法教えて下さい。

    #5362 NO.#2にて、 IF(ISNUMBER(H2),IF(H2>1000,3000+6*700+6*(H2-1000),IF(H2>300,3000+7*(H2-300),"3000"))*65%,"")   の式を適用すれば、というご回答を頂きましたが、今度、この数式の結果の小数点以下を四捨五入させる必要が発生したため、 以下のように数式を変更しました。 =IF(ISNUMBER(H2),ROUND(IF(H2>1000,3000+6*700+6*(H2-1000),IF(H2>300,3000+7*(H2-300),"3000"))*65%,""),0) あるいは、 =ROUND(IF(ISNUMBER(H2),IF(H2>1000,3000+6*700+6*(H2-1000),IF(H2>300,3000+7*(H2-300),"3000"))*65%,""),0) すると四捨五入は出来るのですが、H2セルに数値を入れないと「#VALUE!」が再び出るようになりました。 どうすればいいでしょうか?

  • ROUND関数で、四捨五入ができない。

    ROUND関数で、四捨五入ができない。 カラムの値が'8.5'の場合'9'になるはずなのですが、'8'となってしまいます。 解決方法ありますでしょうか? '4.5''6.5'の場合でも、四捨五入ができないです。 SELECT カラムA,ROUND(カラムA) FROM テーブル ----------------------------------------  カラムA |  ROUND(カラムA) ----------------------------------------   5.5   |   6          ←四捨五入ができている ----------------------------------------   8.5   |   8          ←四捨五入ができない ----------------------------------------   4.5   |   4          ←四捨五入ができない ---------------------------------------- XAMPP 1.7.3の MySQL 5.1.41を使用しています。

    • ベストアンサー
    • MySQL

専門家に質問してみよう