• ベストアンサー

Excelで見積明細書を作成、小計の位置を自在に変更したい

C列:「寸法」 D列:「数量」 F列:「単価」 G列:「金額(D列×F列)」 行2~行83まで G84セルにG列の合計が入ります。 こういう雛形の見積明細書で例えばC6セルに「小計」と入力すると、G2セル~G5セル間での小計をG6セル表示させるようにし、G7セルからは通常通りD列×F列の結果が表示され、さらにC15セルに「小計」と入力すると、G7セル~G14セル間での小計をG15セル表示させるようにし、最終的には全ての小計の合計がG84セルに結果表示させるようなことは可能でしょうか? マクロでないと出来ないなら、当方は知識を全く持ち合わせておりませんので、かなり困難かと思いますので、関数だけで対処できると助かります。 不足情報は補足致します。 よろしくお願い致します。

  • Youyou
  • お礼率64% (2254/3473)

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.10

#05です COUNTIFではなくSUMIFでした

Youyou
質問者

お礼

ありがとうございます! これで全てうまくいきました。 本当に助かりました。

その他の回答 (9)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.9

#05です。今思いつきました G84の式は =SUM(G2:G83)-COUNTIF(C2:C83,"小計",G2:G83) でいけるでしょう

Youyou
質問者

補足

度々ありがとうございます。 =SUM(G2:G83)-COUNTIF(C2:C83,"小計",G2:G83) の数式ですと、「この関数に対して、多すぎる引数が入力されています・・・」と出てしまいます。 本当に申し訳ありませんが、ご教示よろしくお願い致します。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.8

#05です。 >D2及びF2を空欄にしますと「#Value!」が出てしまいます そうですか? 私が試してもなりません。G列の値は0になるだけです。 実際の値を見ないと何とも言えませんが、エラー値からすると「空欄」ではなく文字の「空白」を入力したのではありませんか? 式最後のD2*F2を IF(AND(ISNUMBER(D2),ISNUMBER(F2)),D2*F2,"ERROR") とすれば計算できない文字が入力されたときチェックはできますが、むしろ#VALUE!のままのほうがエラーがすぐに分かって良いのではないでしょうか。 この式では小計がない場合は想定していません。 マクロで良ければ前回の質問にも書いたSUBTOATAL関数を小計欄に挿入できますが、「マクロはダメ」ならどうしようもないです >この数式、惜しいです。いい線いってます! 質問して回答してもらっている立場の方のセリフとは思えませんね 悪気はないのでしょうが、愉快ではありません

Youyou
質問者

お礼

ありがとうございます。 >そうですか? 私が試してもなりません。G列の値は0になるだけ >です。 >実際の値を見ないと何とも言えませんが、エラー値からすると >「空欄」ではなく文字の「空白」を入力したのではありませんか? 仰せのとおりでした。 失礼致しました。 >マクロで良ければ前回の質問にも書いたSUBTOATAL関数を小計欄 >に挿入できますが、「マクロはダメ」ならどうしようもないです マクロはゆくゆく勉強しなくてはいけない、とは思っておりますが、何分本職ではなく、片手間にやっているのでなかなか・・・。 そういう理由であれば仕方がありませんね。 この件はあきらめます。 >悪気はないのでしょうが、愉快ではありません お気に障られたのであればお詫びいたします。 大変失礼致しました。

  • NNAQ
  • ベストアンサー率56% (104/184)
回答No.7

まず、 =IF(COUNT(F2)=0,"",IF(COUNT(D2)=1,SUM(D2*F2),F2)) ↑の式は、 =IF(ISNUMBER(F2),PRODUCT(D2,F2),"") で、良いかも。 で、本題はそれほどややこしくなく、いけそうです。 G2=IF(C2="小計",SUM($G$1:G1)-SUMIF($C$1:C1,"小計",$G$1:G1)*2,IF(ISNUMBER(F2),PRODUCT(D2,F2),"")) 下へコピー。 G84=SUMIF(C2:C83,"<>小計",G2:G83)

Youyou
質問者

お礼

ありがとうございます。 >=IF(COUNT(F2)=0,"",IF(COUNT(D2)=1,SUM(D2*F2),F2)) >↑の式は、 >=IF(ISNUMBER(F2),PRODUCT(D2,F2),"") >で、良いかも。 なにしろIFかSUMしか知らないもので・・・。 勉強になりました。

  • abekkan
  • ベストアンサー率27% (83/305)
回答No.6

#1です。 ご指摘のとおり、2行目に限っては違いましたね。すいません。 で、書き直します。 H列を作業用の列にします。(印刷の対象外または非表示) 1行目はタイトルで、2行目からデータが入っているとすると、 G2に、=IF(C2="小計",0,IF(COUNT(F2)=0,"",D2*F2)) H2に、=IF(C2="小計",0,IF(COUNT(F2)=0,0,G2)) G3に、=IF(C3="小計",H2,IF(F3="","",D3*F3)) と書いてG4~G83にコピー。 H3に、=IF(C3="小計",0,IF(COUNT(F3)=0,0,H2+G3)) と書いてH4~H83にコピー。 (最後が小計で終わることを前提とする場合) G84に、=sum(G2:G83)/2 と書く。 (そうでない場合) I列も作業用とし、I2に、=IF(C2<>"小計",G2,0)と書いてI3~I83にコピー。 G84に、=sum(I2:I83) と書く。 これで一応できると思います。あそこも空欄になった場合、とかさらなる条件がある場合はやはりVBAでしょうか。 マクロやVBAを毛嫌いされているようですが、このレベルの関数を考えるより、マクロやVBAをちょっとかじるほうが簡単です。また、複雑な関数はあとで他の人(や自分さえも)理解できなくなってメンテナンスができない、となる危険があります。

Youyou
質問者

お礼

ありがとうございます。 マクロやVBAを毛嫌いしているわけではありません。 こういう作業を本職にしていないので、なかなかスキルアップに費やす時間がないので、可能な手段を出来るだけ駆使してできれば、と思っているだけなのです。 もちろん時間さえあれば、もっともっとスキルアップに努めるんですが・・・。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.5

少し長い式ですがG2セルに以下の式を貼り付けて下方向にコピーしてみてください =IF(C2="小計",IF(COUNTIF($C$1:C1,"小計")=0,SUM(INDIRECT("G$2:G"&ROW(A2)-1)),SUM(INDIRECT("G$2:G"&ROW(A2)-1))-SUM(INDIRECT("G$2:G"&MAX(INDEX(($C$1:$C1="小計")*ROW($C$1:$C1),))))),D2*F2) G84の式は =SUMIF(C2:C83,"小計",G2:G83) になります

Youyou
質問者

補足

ありがとうございます。 この数式、惜しいです。いい線いってます! 但し、問題点があります。 1) 3行目以降はこの数式でバッチリなのですが、2行目(データ入力行の1行目)にこの数式を使った場合、D2及びF2を空欄にしますと「#Value!」が出てしまいます。 何か妙案はありますか? 2) 「小計」を全く使用しなかった場合、合計が「0」になってしまいます。 「小計」を全く使用しないケースは少ないとは思うのですが、可能性は0ではないので、何か妙案はありますか? 以上、お手数とは存じますが、よろしく御教示お願い致します。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

前回のご質問の折り、回答したものですが、小計位置の自在はVBAでないと出来ないと思います。 為参考ですが、小計/合計位置を固定にして小計欄には=SUBTOTAL(9,小計範囲)、合計欄には=SUBTOTAL(9,合計範囲)としておくと、 合計欄には小計値が計数されなくなるのですが如何でしょうか。

Youyou
質問者

お礼

お世話になります。 合計位置は固定でも問題ないのですが、やはり小計の固定は困難ですので、VBA・・・ちょっと抵抗が・・・そうも言ってられないですかね?

回答No.3

No2で説明不足がありました 集計したいH列は同じ名前にして下さい。 そうしないと集計がばらばらになします。

回答No.2

H列に仮に注文者名のようなものを作り(印刷時表示させない) H列で集計させます。 ただし合計欄は削除しておきます。 集計の仕方は、データ→集計をクリック グループの基準をH列もしくは仮タイトル名注文者にし 集計の方法を合計にし 集計する項目を金額にチェックを入れます 現在の集計表と置き換える・集計行をデータの下に挿入する、にチェックを入れてOKをクリック これでH列の注文者ごとに小計が着いた表になるはずです。 この作業をマクロにしておけば簡単だと思います

Youyou
質問者

お礼

ありがとうございます。 マクロもゆくゆくは勉強して使えるようにならないとは思うのですが、現状、何も出来ません。 せっかくのご回答でしたが、関数のみで対処できる方法で考えていきたいと思います。 マクロが出来れば関数を延々並べるよりも簡単なのでしょうが・・・。

  • abekkan
  • ベストアンサー率27% (83/305)
回答No.1

H列を作業用の列にします。(印刷の対象外または非表示にしてください) 1行目はタイトルで、2行目からデータが入っているとすると、 G2に、=IF(C2="小計",H1,D2*F2) と書いてG3~G83にコピー。 H2に、=IF(C2="小計",0,H1+G2) と書いてH3~H83にコピー。 G84に、=sum(G2:G83)/2 と書く。 (説明) Hの作業列は累積金額を表示、ただしCが「小計」だった場合は0とする。 Gの列は数量×単価を表示、ただしCが「小計」だった場合はH列の1つ上の行を示すことによりそこまでの小計を表示する。 G84は、小計分が2重にカウントされるので2で割る。 というようになっています。 関数だけで何とかしたい場合は、作業用の列を使う、というのが私のやりかたですが、これでどうでしょうか。

Youyou
質問者

補足

ありがとうございます。 >G2に、=IF(C2="小計",H1,D2*F2)  これは、 G2に、=IF(C2="小計",H2,D2*F2) の誤りですよね? >H2に、=IF(C2="小計",0,H1+G2)  これは、 H2に、=IF(C2="小計",0,G2) ではないでしょうか?    ※2行目は加算する必要がないと思いますので・・・。 で、3行目が、 =IF(C3="小計",0,H2+G3) ですよね? 実は現状のG2セルには、空白時に「value」が出ないように =IF(COUNT(F2)=0,"",IF(COUNT(D2)=1,SUM(D2*F2),F2)) という数式が入っています。 このあたりを踏まえて、G2、G3、H2、H3各セルに入力する数式をご教示頂けないでしょうか? お手数ですが、よろしくお願いいたします。

関連するQ&A

  • Excel VBA 「小計」と入力したら自動計算

    エクセルの小計の計算について質問いたします。    A列    B列      C列   D列     E列    F列 1 施設名  2      商品名,内容   1    単位     単価    金額(数量×単価) 3      商品名,内容   1    単位     単価    金額(数量×単価) 4                              小計     ●●●● ――――――――――――――――――――――――――――――――― 5 施設名 6      商品名,内容   1    単位     単価    金額(数量×単価) 7      商品名,内容   1    単位     単価    金額(数量×単価) 8      商品名,内容   1    単位     単価    金額(数量×単価) 9                              小計     ●●●● ―――――――――――――――――――――――――――――――――                                合計     ●●●● 施設名ごとに項目が複数あり、施設ごとに項目の数も違います。 これを施設ごとに●の所に小計を出したいです。 「小計」が数回にわたり出てくる場合は、「前回小計をした次のセルから今回小計するセルの前まで」を計算させる訳ですが、どんなVBAを組めばいいのかわかりません。 理想としてはにE列に小計という文字を入れるとF列に自動で計が出るようにして、さらに小計の合計を最後の行のセルにだしたいです。。 さらに、見やすくなるように小計の下のセルにA~Fの間に太線を引いて施設ごとの区切りがわかるようにしたいです。。 繰り返し作業ばかりで大変です。 どなたか知恵をお貸しください。

  • Excelでセルに「小計」と入力したら自動に計算してくれる関数

    行タイトルが品名、数量、金額の表で、品名の列に途中で「小計」と入力すると、金額の列に数字が表示されるようにしたいです。 行が長くなり、「小計」が数回にわたり出てくる場合は、「前回小計をした次のセルから今回小計するセルの前まで」を計算させる訳ですが、どんな関数を使えばいいのかわかりません。(マクロを組むようになるのでしょうか) どうぞ、よろしくお願いいたします。

  • Excelの集計表で固定していない小計があり、計算結果を上位の小計行に入れたい

    エクセル2K使用で300行程度の表があり、2行目まではタイトル行です。 品名L列 個数M列 単位N列 単価O列 金額P列 備考Q列← 2行目 完成品 1 組 (小計の計)(総合計) ← 3行目 小計   2   口  (O5:O8) (M*O)     ← 4行目 品名A  2   個 10 20 ← 5行目 品名B  3   本 10 30      ← 6行目 品名C  2   個 5 10      ← 7行目 品名・  ・ ・ ・ 20      ← 8行目 品名・  ・ ・ ・ 20      ← 9行目 小計 (O :O ) (M*O) ←・行目 品名・  ・ ・ ・ ・      ←・行目 品名・  ・   ・ ・ ・      ←・行目 品名・  ・   ・ ・ ・      ←・行目 品名・  ・   ・ ・ ・      ←・行目 ・ ・  ・   ・ ・ ・      ←・行目 ・ ・  ・   ・ ・ ・      ←・行目 合計            (小計の計) L列の一番上の小計は固定です、2ツ目以降の小計は固定していません。 P列の金額を上位の小計列の単価に入力して再計算したい 合計はP列(表の最終行)の合計金額欄に表示したい、3行目完成品単価は合計 金額の(小計の計)と同じ金額です、3行目を見積書に転記したいと思っています。 集計表には空白セルが存在します。 宜しくお願いします。

  • SUBTOTAL関数の不思議

    SUBTOTAL関数で期待する合計が出せません。 A列   B列   C列   D列 品名   数量   単価   金額 A     1    100    100 B     2    200    400 C     3    300    900 小計               0 →ここが期待どおりでない D2セルの式は =IF(A2="品名",SUBTOTAL(9,INDIRECT("D$2:D"&ROW()-1)),B2*C2) でD5までコピーしました。 つまりA列が"小計"でないときは数量×単価を、"小計"と入力されていたらD2:D4をSUBTOTALで集計するつもりなのに結果が0になってしまいます。 ちなみにD5に =SUBTOTAL(9,D2:D4) と手入力しても結果は0でしたが、D列に金額を直接入力すれば小計は正しく表示されます。 理由がおわかりの方、教えてくださいませんか

  • エクセルで小計の累計

    エクセル2007で、10行毎の小計行の下に累計行、その下に10行毎の小計行、その下に累計行 というように累計をだしていきたいと思っています。 途中の数行(小計行、累計行も含んだ)を削除することが多く、そうすると、数式がエラーになって 計算できなくなってしまいます。 N行おき 小計 累計 という感じで検索して MOD関数やROW関数を使ってみましたが、途中の行を削除するとうまくできません 途中の行を削除しても数式がエラーになることなく答えがでるようには無理でしょうか... 詳しい方どうか教えてください よろしくお願いします。 B列には項目C列には計算したい数字がはいっています 3行目から12行目までデータがはいっていて、 C列の13行目:3行目から12行目までの小計 C列の14行目:累計 C列の3行目から12行目までの合計 15列目から24行目までデータがはいっていて、 C列の25行目:15行目から24行目までの小計 C列の26行目:累計 C列の14行目+C列の25行目 26行目以降も100行目くらいまでデータと小計、累計のデータがあるのですが   A、  B、   C 3 NO.1、りんご、10 4 NO.2、みかん、11 ・ ・ ・ 12 NO.10、ばなな、10 13 小計       37 14 累計       37 15 NO.1、りんご、3 16 NO.2、みかん、10 ・ ・ ・ 24 NO.10、ばなな、10 25 小計       40 26 累計       77 ・ ・ ・ 15から26行目を削除するとその次の累計の行がエラーになってしいます マクロとかそういったものを使わないと無理でしょうか... もしできたらすごく助かります。同じようなシートが何枚もあるので..

  • エクセル連続していない不規則な数値セルの小計を右隣空白セルに一発で出すには?

     エクセル2000で定期的に部材の出庫表を作成しているのですが、日々、データーが変動し、表が更新されます。    A   B  C  D  E  F  G 1コード   1  2  3  4  5  6  2名称   数量 ← ← ← ← 3部材1  10  5    4部材2  30 24     8 5部材3  25    40 15     23 6部材4      8 15     32 7部材5      9  18 8部材6  20 30  45       45 7  上記のような形式で表が作成され、実際はもっと横長の表になります。  各部材はB3以降に数量が記載され、最右端に合計セルがあります。数値セルの各行に所々、空白セルがあります。(セルには数式は入っていない)  少しでも表を見やすくしたいので、数値データーセルが連続しているセルの右隣の空白セルに簡単に小計を差し込みたいのですがその方法が分かりません。  仕方ないので手動にてCTRLキーを押しながら任意の数値セルを選択し、Σで合計していますが、作業が進まず、ミスも出ます。  上記の表の部材1ですと、B3、C3の合計(小計)15を空白のD3セルに、部材3ならD5、E5の小計55をF5に、部材6ならB8、D8の合計95をE8に表示させたいのです。 過去にもこの質問をしたのですが、VBAでないと出来ないのでしょうか?私はVBAでの記述がよく理解できません。他に簡単に連続する数値セルの合計を右隣の空白セルに表示する方法は無いでしょうか?IF関数等を入れたりしていますが、循環エラーが出たり、上手く行かず、教えていただけませんか?手入力しか無理でしょうか?これで困っています。

  • エクセルの3D集計で小計・総計

    Excel2003を使っています。 タイトル通りですが、エクセルの3D集計で小計を出し、その小計シートの合計(総計)を出すことはできますか? 3D集計では隣り合ったシートしか集計できないし、総計のセルに単純に小計のセルを足す式を入力してみましたが、非表示になってしまいました。数字の場合は表示されるので、数式を合計はできないということでしょうか? 何かいい方法があれば教えてください。よろしくお願いします。

  • Excelで、小計欄がある場合の合計欄

    小計欄がある場合の合計は小計を含めた値から、小計欄の額を引き去る必要があります。 しかし、引き去る列の名前を入力せねばならず、大きな表や行方向にも小計欄があると、ますます間違いやすくなります。 そこで、取り敢えずは小計の列や行を非表示にし、縦横の合計を求めること出来ませんか? なおOSはWin8.1、Excelは2013です。

  • 内訳書に明細書の小計を集計したい!

    以下のような見積書を作ったとします。 Sheet1 (内訳書)   (A) (B) (C) (1) 名称 内訳 金額 (2) ** ** ** (3) (4) (5) (6) : Sheet2 (明細書)   (A) (B) (C) (D) (E) (1) 名称 内訳 数量 単価 金額 (2) 施工費 ** ** ** =IF(B2="","",B2*C2) (3) (4) (5) (6) : E3以下に =IF(A3="小計",SUM(D$2:D2)-SUMIF(A$2:A2,"小計",D$2:D2)*2,IF(B3="","",B3*C3)) これで明細書の小計は行を気にせずに出せるようになりました。 たとえばSheet2(明細書)のA2に施工費、B6に小計でE6に小計が出るとします。 これをSheet2(明細書)のA列の名称をSheet1(内訳書)のA2に、小計(上記の場合E6)をC3に・・・ という風に順次名称と小計を抽出するにはどうすればよいでしょうか? 分かりにくくてすいません。 どうぞ、宜しくお願い致します。

  • エクセル グループ小計について

    "項目としてA1に順番、B1に色、C1に数量1、D1に数量2、E1に数量3、F1に数量4にそれぞれ数値があります。 B2~B25までに茶、黒、白、がランダムに入っています。 色が変わる度に小計を自動的に表示する方法はないのでしょうか。 ただし、順番の並びは変更しない方法とする。 サンプル表を添付します。 よろしくおねがいします。

専門家に質問してみよう