アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんな表があったとします。
品名  数量  単価  金額
りんご  10  250  2500
ばなな  8  120  960
すいか  15  700  10500
ばなな 3 120 360
りんご 21 250 5250



りんご 7750
ばなな 1320
すいか 10500

こんな感じに自動で入力された商品ごとの合計金額を計算したいのです。
商品は不特定ですのでどんなものが入力されるか分かりません。

宜しくお願いいたします。

A 回答 (12件中1~10件)

ピボットテーブルに拘っているわけではありませんが、追記します。



>こんな感じに自動で入力された商品ごとの合計金額を計算したいのです。
自動でデータが入ってくるとのことなので今回のケースでは質問者さんはデータの入力者ではないですね。他者が入力するか、DB等からデータを引っ張ってくるか

>データーの更新をせずに表を作った時点で自動的に更新できる方法
これがいつなのか?が問題ですね。
1.他者が入力して、その時点で合計も同時に(データ更新なしに)確認をしたいのであれば関数で求めるしかありませんが文面からして違うでしょう。
2.入力者と別の方、もしくはDB等から抽出したデータの合計を求めるのであれば合計確認者が当該BOOKを開いた時点ということになります。
3.当該BOOKを開いている最中にDB等からマクロなどを使い(手動は無いでしょう?)データを引いてくる場合はその直後ですね。
※その他の状況もあるかもですが・・・
※排他書き込み許可は考慮してません。推奨されないと思うので。

2であれば、ピボットテーブルのオプションで「開いた時に更新する」にチェックすれば解決します。

3であればマクロの最後に当該シートを選択後
ActiveSheet.PivotTables("任意の名前").RefreshTable
を実行すれば自動で更新されます。
    • good
    • 0
この回答へのお礼

ありがとうございます。
実は、私は建設会社で原価管理をして入る者です。
今回質問させていただいたのは、工事の原価計算書から業者別の発注工事額を自動で求めたかったのです。
今までは手計算をしていましたが、なんとか関数を使って自動でできないかなーと常々思っており、今回解決できて非常によかったです。

原価管理の担当者はたくさんおり私も含めてみんな苦労して計算していますので、今回の関数を埋め込んだ原価計算書を配布したいと思います。
皆様ほんとうにありがとうございました。

お礼日時:2006/10/20 12:49

こんばんは。



どの程度の自動化をお望みか分かりませんが、このマクロを、コントロールツールのボタンに取り付けたらどうかと思います。フィルタオプションを駆使しても、慣れれば、そんなに時間的な差があるわけではありませんが。

'シートモジュール
'コントロールツールのボタン・イベント
Private Sub CommandButton1_Click()
 Call ListUp
End Sub


'標準モジュール
'データは必ず、項目行(タイトル名)が必要です。

Sub ListUp()
Dim r As Range
'----------------------------
'**初期設定**
  
  'データの書き出し場所
  Const TO_PASTE As String = "F1"
  'データの左上端の位置
  Set r = Range("A1").CurrentRegion
'----------------------------
 Application.ScreenUpdating = False

 Range(TO_PASTE, Range(TO_PASTE).End(xlDown)).ClearContents
 
 With r.Columns(1)
    If .Cells.Count < 3 Then Exit Sub 'データが少なすぎる
   .AdvancedFilter Action:=xlFilterCopy, _
           CopyToRange:=Range(TO_PASTE), _
           Unique:=True
 End With
 With Range(TO_PASTE, Range(TO_PASTE).End(xlDown))
  'フィルタオプションが失敗している場合
  If .Cells(.Count).Row = 65536 Then Exit Sub
  Set r = r.Offset(1).Resize(r.Rows.Count - 1)
 
  .Cells(1).Offset(, 1).Value = "金額"
 
  .Offset(1, 1).Resize(.Rows.Count - 1).FormulaLocal = _
   "=SUMIF(" & r.Columns(1).Address(1, 1, 0) & ",RC[-1]," & _
    r.Columns(4).Address(1, 1, 0) & ")"
 End With
   Set r = Nothing
  Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

マクロになるかなーと思っていましたが。関数でやりたかったのです。
皆さん本当にありがとうございました。

お礼日時:2006/10/20 12:40

[ANo.9回答]への補足コメント、



》 それも嫌うなら貴方を満足させる方法はない、と思います。

と述べましたが、[ANo.8回答 Rin]さんが見事に解決されていましたね。Rinさんに脱帽 m(__)m

でもォ~、失礼ながら、oldbook915さんはそれを解読(理解)できますかぁ?
    • good
    • 0
この回答へのお礼

理解できません

お礼日時:2006/10/20 12:37

[ANo.7この回答へのお礼]に対するコメント、



》 データーの更新をせずに表を作った時点で自動的に更新できる方法がないかと思
》 っています。

あらかじめ、全ての品名をF列に列挙しておいたら如何かと。この場合、A列に登場しない品名の合計額は 0 と表示されますが。
それも嫌うなら貴方を満足させる方法はない、と思います。
    • good
    • 1

こんにちは~♪



皆さんお勧めのピボットテーブルが、
1番良いと思うんですが~。。

>データーの更新をせずに表を作った時点で自動的に
>更新できる方法がないかと思っています

更新が、面倒ですか?
でしたら、数式か、VBAになるのではないでしょうか?

★数式の案ですけれど。。。
同シートの場合です。
mike_gさんの表をお借りします。。。。すみません。

F2: =IF(COUNT(INDEX(1/(MATCH($A$2:$A$100,$A$2:$A$100,)=ROW($1:$99)),))<ROW(A1),"",INDEX(A:A,SMALL(INDEX(SUBSTITUTE(ISNUMBER(1/(MATCH($A$2:$A$100,$A$2:$A$100,)=ROW($1:$99)))*1,0,10^7)*ROW($1:$99)+1,),ROW(A1))))

下にコピーしておきます。
mike_gさんの表のF列の様に、品名が抽出されます。

注)あまりデータ行が多いと、重くなります。。。

★合計は、
これも、mike_gさんのをお借りして~。。。
>セル G2 に次式を入力して、此れを下方にズズーッと入力
>  =IF(F2="","",SUMIF(A$2:A$100,F2,D$2:D$100))

。。。。Rinでした~♪♪
    • good
    • 1
この回答へのお礼

解決しました!
大変助かりました。胸のつかえが取れたようです。
本当にありがとうございました。

お礼日時:2006/10/20 12:36

ピボットテーブルによる集計がお奨めだけど、新たに入力されたデータを結果に反映させるために[データの更新]を実行する必要があります。


下記の SUMIF関数による集計は、新たに入力されたデータが既存の品名の場合は結果が自動更新されるが、新たな品名が入力された場合は、ステップ2~7を再実行する必要があります。

   A   B   C   D  E  F    G
1 品名  数量 単価 金額   品名  合計額
2 りんご  10  250  2500   りんご  7750
3 ばなな   8  120  960   ばなな  1320
4 すいか  15  700 10500   すいか  10500
5 ばなな   3  120  360
6 りんご  21  250  5250
7

1.範囲 A1:A100 を選択
2.[データ]→[フィルタ]→[フィルタオプションの設定]を実行
3.[抽出先]として“指定した範囲”に目玉入れ(あるいは、そうなっていることを確認)
4.[リスト範囲]が $A$1:$A$100 を入力(あるいは、そうなっていることを確認)
5.[抽出範囲]が $F$1 を入力(あるいは、そうなっていることを確認)
6.“重複するレコードは無視する”にチェック入れ(あるいは、そうなっていることを確認)
7.[OK]をクリック
8.セル G2 に次式を入力して、此れを下方にズズーッと入力
  =IF(F2="","",SUMIF(A$2:A$100,F2,D$2:D$100))
    • good
    • 0
この回答へのお礼

ありがとうございます。
データーの更新をせずに表を作った時点で自動的に更新できる方法がないかと思っています。

お礼日時:2006/10/17 17:12

品名でソートしてから


「データ」「集計」で合計を求めるだけです

合計欄だけでよければグループの詳細を折りたためばいいのです
    • good
    • 0

>混在していても、混在している通り表示し合計を計算したい


とは、「りんご」と「リンゴ」は別物と判断して良いと云うことでしょうか?

関数ではありませんがピボットテーブルを使って見ては?
ウィザードに従って、行に「品名」、データに「金額」の合計を選択。
で、出来ます。いかがでしょう?
    • good
    • 0
この回答へのお礼

ピボットテーブルは使った事がないので一度使って見ます。
ありがとうございました。

お礼日時:2006/10/17 17:10

以下の方法は如何でしょうか。


仮に表リストがシート1、シート2に合計項目セルをA列とし、金額合計セルB1に=IF($A1<>"",SUMIF(sheet1!A:A,$A1,sheet1!D:D),"")をした方向にコピーで如何でしょうか。
    • good
    • 1
この回答へのお礼

ありがとうございます。

お礼日時:2006/10/17 14:47

「= SUMIF(A2:A6,"りんご",D2:D6)」で、りんごの合計


「= SUMIF(A2:A6,"ばなな",D2:D6)」で、ばななの合計
「= SUMIF(A2:A6,"すいか",D2:D6)」で、すいかの合計
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2006/10/17 14:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!