- ベストアンサー
Excelでセルに「小計」と入力したら自動に計算してくれる関数
行タイトルが品名、数量、金額の表で、品名の列に途中で「小計」と入力すると、金額の列に数字が表示されるようにしたいです。 行が長くなり、「小計」が数回にわたり出てくる場合は、「前回小計をした次のセルから今回小計するセルの前まで」を計算させる訳ですが、どんな関数を使えばいいのかわかりません。(マクロを組むようになるのでしょうか) どうぞ、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>(マクロを組むようになるのでしょうか) 『「小計」と入力すると』をキッカケにするなら、マクロしかないでしょう。 質問にあるように動作するコードを書いてみました。 表のカタチは、 A1に表題『品名』、B1に表題『数量』、C1に表題『金額』があるとしています。 シート1で実行してみます。 ツール→マクロ→Visual Basic Editor でVBE画面に移り、 表示→プロジェクトエクスプローラでプロジェクトエクスプローラを表示します。プロジェクトエクスプローラのSheet1をダブルクリック。出てきたコードウインドウに下記マクロをコピーして貼り付けます。 ここから ↓ Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 1 Then Exit Sub 'A列でなければ何もしない If Target.Text <> "小計" Then Exit Sub '『小計』と入力されなければ何もしない Dim curRow As Long '現在行 Dim startRow As Long '小計を開始する行 Dim rw As Long '行カウンタ curRow = Target.Row rw = curRow - 1: startRow = 2 '前回の『小計を探す』 While rw > 1 If Cells(rw, 1) <> "小計" Then rw = rw - 1 Else startRow = rw + 1: rw = 1 End If Wend If startRow > (curRow - 1) Then Exit Sub '『小計』行が続いたら何もしない 'B、C列に算式を書き込む '数量を書き込む 'Cells(curRow, 2).Formula = "=SUM(B" & startRow & ":B" & (curRow - 1) & ")" '金額を書き込む Cells(curRow, 3).Formula = "=SUM(C" & startRow & ":C" & (curRow - 1) & ")" End Sub
その他の回答 (2)
- comv
- ベストアンサー率52% (322/612)
こんばんは A B C D 1 品名 数量 単価 金額 2 ** ** *** =IF(B2="","",B2*C2) 3 式 4 ↓ 5 ↓ 6 ↓ : ↓ 式 =IF(A3="小計",SUM(D$2:D2)-SUMIF(A$2:A2,"小計",D$2:D2)*2,IF(B3="","",B3*C3)) で如何でしょうか!
お礼
はじめまして。 早々のご回答をありがとうございます。 SUMIF関数ですね! とてもいい勉強になりました。
- imogasi
- ベストアンサー率27% (4737/17069)
似たようなものでご辛抱できませんか。 テストデータとして下記をA1:c6にいれる。 ミソは分類という(名称は何でも良い)列を設けることです。そして第2行に1をいれる(Aでもアでも良い)。商品の小計を出したいところまで1をフィルハンドルで複写する。本例ではA4行まで1を複写。 同じくA5に2を入れA6まで複写。すると下記の状態になります。本番ではこれを繰り返す。 分類 商品 数量 1 A 2 1 B 3 1 C 4 2 D 1 2 F 2 データ-集計-をクリック。集計の設定のダイアログになる。 グループの基準-分類 集計の方法-合計 集計するフィールド-数量 集計行をデータの下に挿入するを確認して OKをクリック。結果は下記の通り。 分類 商品 数量 1 A 2 1 B 3 1 C 4 1 計 9 2 D 1 2 F 2 2 計 3 総計 12 「1計」等の表現が「小計」でないが小計という字も入力不要です。A2に東京と内容を打ちこめば東京計となる。 これらは関数SUBTOTALの機能を使っています。
お礼
はじめまして。 早々のご回答をありがとうございました。
お礼
早々のご回答をありがとうございました。 できました!(私はコピーしただけですが)マクロ初体験です。 便利ですね。この機会にマクロを勉強してみます。 しかしエクセルって奥が深いですよね。