• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:指定した項目を合計したいのですが・・・)

指定項目の合計をマクロで計算する方法とは?

このQ&Aのポイント
  • マクロを使用して、指定した項目を合計する方法を教えてください。
  • 項目AとCとEの合計を、機番ごとに計算する必要があります。
  • 機番ごとに項目AとCとEを合計する方法を、マクロを使って解説します。

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

  • ベストアンサー
  • yone_sk
  • ベストアンサー率34% (58/167)
回答No.3

まず  Set obj = Cells.Find(TITLE_A) の後に  Set obj = Cells.Find(TITLE_E) をやると、最初のobjを上書きしてしまっているので、項目Aの有無がわからなくなってしまいます。 ですので、objを  Dim objA As Object  Dim objE As Object の二つに分けます。 それと、足し算のところチョット修正しましたネ。 見てもらえばわかると思います^^ それと、  Const TOTAL_COL As Integer = 7 ここに合計の列番号を入れてください。 ------------------------------------------ Const TITLE_A As String = "A" Const TITLE_C As String = "C" Const TITLE_E As String = "E" Const TOTAL_COL As Integer = 7 Dim i As Integer Dim j As Integer Dim rngA As Range Dim rngC As Range Dim rngE As Range Dim objA As Object Dim objE As Object Set objA = Cells.Find(TITLE_A) If Not objA Is Nothing Then Set rngA = Range(Cells(1, Cells.Find(TITLE_A).Column), Cells(1, Cells.Find(TITLE_A).Column)) End If Set rngC = Range(Cells(1, Cells.Find(TITLE_C).Column), Cells(1, Cells.Find(TITLE_C).Column)) Set objE = Cells.Find(TITLE_E) If Not objE Is Nothing Then Set rngE = Range(Cells(1, Cells.Find(TITLE_E).Column), Cells(1, Cells.Find(TITLE_E).Column)) End If i = 2 While (Cells(i, 1) <> "") Cells(i, TOTAL_COL) = 0 If Not objA Is Nothing Then Set rngA = rngA.Offset(1, 0) Cells(i, TOTAL_COL) = Cells(i, TOTAL_COL) + rngA.Value End If Set rngC = rngC.Offset(1, 0) Cells(i, TOTAL_COL) = Cells(i, TOTAL_COL) + rngC.Value If Not objE Is Nothing Then Set rngE = rngE.Offset(1, 0) Cells(i, TOTAL_COL) = Cells(i, TOTAL_COL) + rngE.Value End If i = i + 1 Wend Set rngA = Nothing Set rngC = Nothing Set rngE = Nothing Set objA = Nothing Set objE = Nothing ------------------------------------------ ホントはもっときれいに書きたいんだけど ^^;

0pus0ne
質問者

お礼

その項目があれば、その都度加えていけば良いのですか。 勉強になりました。ありがとうございます。

その他の回答 (2)

  • yone_sk
  • ベストアンサー率34% (58/167)
回答No.2

> ここでは項目Aが、無かった場合ですが、項目Eが無い時もあります。 rngA をif分で括っているところはわかりますでしょうか? それと同じようにrngEも括ってあげればできますよ^^ その際にobjを使用していますが、これをobjA、objEと二つ用意してあげればできますよね。 わからないところがあれば、言ってくださいな^^

0pus0ne
質問者

お礼

ご回答して頂き、本当にありがとうございます。 objEを付けましたが・・・ Const TITLE_A As String = "A" Const TITLE_C As String = "B" Const TITLE_E As String = "C" Dim i As Integer Dim j As Integer Dim rngA As Range Dim rngC As Range Dim rngE As Range Dim obj As Object Set obj = Cells.Find(TITLE_A) If Not obj Is Nothing Then Set rngA = Range(Cells(1, Cells.Find(TITLE_A).Column), Cells(1, Cells.Find(TITLE_A).Column)) End If Set rngC = Range(Cells(1, Cells.Find(TITLE_C).Column), Cells(1, Cells.Find(TITLE_C).Column)) Set obj = Cells.Find(TITLE_E) If Not obj Is Nothing Then Set rngE = Range(Cells(1, Cells.Find(TITLE_E).Column), Cells(1, Cells.Find(TITLE_E).Column)) End If i = 2 While (Cells(i, 1) <> "") Cells(i, 19) = 0 If Not obj Is Nothing Then Set rngA = rngA.Offset(1, 0) Cells(i, 19) = rngA.Value End If If Not obj Is Nothing Then Set rngE = rngE.Offset(1, 0) Cells(i, 19) = rngE.Value End If Cells(i, 19) = Cells(i, 19) + rngC.Offset(1, 0).Value + rngE.Offset(1, 0).Value Set rngC = rngC.Offset(1, 0) i = i + 1 Wend Set rngA = Nothing Set rngC = Nothing Set rngE = Nothing End Sub ---------------------------- 項目Eがない場合に上手く動作しません。 + rngE.Offset(1, 0).Value のところがいけないようです。 申し訳ありません。ご教授願います。 以上、よろしくお願いします。

  • yone_sk
  • ベストアンサー率34% (58/167)
回答No.1

こんな感じでしょうか? 出力先をG列固定にしちゃってるので、その辺はいじってください^^; ------------------------------ Private Sub CommandButton1_Click() Const TITLE_A As String = "項目A" Const TITLE_C As String = "項目C" Const TITLE_E As String = "項目E" Dim i As Integer Dim j As Integer Dim rngA As Range Dim rngC As Range Dim rngE As Range Dim obj As Object Set obj = Cells.Find(TITLE_A) If Not obj Is Nothing Then Set rngA = Range(Cells(1, Cells.Find(TITLE_A).Column), Cells(1, Cells.Find(TITLE_A).Column)) End If Set rngC = Range(Cells(1, Cells.Find(TITLE_C).Column), Cells(1, Cells.Find(TITLE_C).Column)) Set rngE = Range(Cells(1, Cells.Find(TITLE_E).Column), Cells(1, Cells.Find(TITLE_E).Column)) i = 2 While (Cells(i, 1) <> "") Cells(i, 7) = 0 If Not obj Is Nothing Then Set rngA = rngA.Offset(1, 0) Cells(i, 7) = rngA.Value End If Cells(i, 7) = Cells(i, 7) + rngC.Offset(1, 0).Value + rngE.Offset(1, 0).Value Set rngC = rngC.Offset(1, 0) Set rngE = rngE.Offset(1, 0) i = i + 1 Wend Set rngA = Nothing Set rngC = Nothing Set rngE = Nothing End Sub ------------------------------

0pus0ne
質問者

お礼

大変参考になりました。 ありがとうございます。

0pus0ne
質問者

補足

すみません。 ここでは項目Aが、無かった場合ですが、項目Eが無い時もあります。 その場合はどうすればいいでしょうか? 以上、よろしくお願いします。

関連するQ&A