Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
  • ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA初心者です)

VBA初心者のための足し算プログラム

このQ&Aのポイント
  • VBA初心者のための足し算プログラムをご紹介します。同じセルに数字を入れて足し算していきたい場合、以下のVBAコードを使用することができます。
  • 具体的には、A1に数字を入力すると、その値がE1に足し合わされます。また、A2、A3、A4、A5など、他のセルにも同じように足し合わせたい場合は、VBAコードを適用するセル範囲を変更することで実現できます。
  • VBA初心者の方でも簡単に使える足し算プログラムです。ぜひ試してみてください!

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.4

今のコードを残して Private Sub Worksheet_Change(ByVal Target As Range) Dim outp As String outp = "E" & Target.Row If Target.Column = 1 Then If Target.Value <> "" Then Range(outp).Value = Range(outp).Value + Target.Value ActiveCell.Offset(-1, 0).Select Else Range(outp).Value = 0 End If End If End Sub こんな感じでしょうか。 Application.EnableEvents = False も必要なのかなと思ったので削除 エクセルを電卓の代わりに使う感じでしょうか、No3の方がおっしゃるよう あまりお勧めできない使い方の一つです。 理由は、入力の間違いが検証できないからです。 例えば、別途 入力データ という名前のシートを準備  A  B  C   D 日付 時刻 数値 行番号 と1行目にタイトル項目を入れておいて Private Sub Worksheet_Change(ByVal Target As Range) Dim outp As String outp = "E" & Target.Row If Target.Column = 1 Then If Target.Value <> "" Then Sheets("入力データ").Range("A" & Cells.Rows.Count).End(xlUp).Offset(1, 0).Value = Date Sheets("入力データ").Range("B" & Cells.Rows.Count).End(xlUp).Offset(1, 0).Value = Time Sheets("入力データ").Range("C" & Cells.Rows.Count).End(xlUp).Offset(1, 0).Value = Target.Value Sheets("入力データ").Range("D" & Cells.Rows.Count).End(xlUp).Offset(1, 0).Value = Target.Row ActiveCell.Offset(-1, 0).Select End If End If End Sub といった方法で、A列に入力した内容が、別シートに データとして残る方法を考えてみてください。 E列は SUMIF関数(或いは SUMIFS関数)で得られます。 データを残しておくことで、過去の入力を確認したり、月単位などでも集計が出来て、応用範囲が広がります。

drakiyo
質問者

お礼

ご返事ありがとうございます。 すごく参考になりました。 理解できるよう頑張ります。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (4)

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

一例です。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub If IsNumeric(Target) And Target <> "" Then Target.Offset(0, 4) = Target.Offset(0, 4) + Target.Value Else Target.Offset(0, 4) = "" End If End Sub

drakiyo
質問者

お礼

ご返事ありがとうございます。 参考にさせていただきます このたびはありがとうございました。

すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Application.EnableEvents = False Cells(Target.Row, "E") = Cells(Target.Row, "E") + Target Application.EnableEvents = True End If End Sub で最低線はこれで良いはず。色んなセル入力の場合があるので(取り消し、複数セル選択など諸々)、十分ではなく心配だが。 簡単そうに見えるが、色んなことが詰まっている。初心者には過ぎたこと。 ーー 又エクセルシートを、こういう使い方をするのは、標準使用法違反と思う。 同じ列で、セル選択をヅラしていって、入力し、データの終わった行の下行でΣなどで計数を足すものだ。 魅力的ではあるが、濫用しないほうが良い。特に入力者が作成者以外の場合はね。 こういう発想と質問は関数しか使えない初心者にも時どき質問するものがいる。 ーー 誤入力の取り消しなどの対応は出来てないし、対応が難しい。 ーー ちなみに、イベントの反応がおかしくなったら(無反応) Sub test01() Application.EnableEvents = True End Sub を作って実行することを勧める。

drakiyo
質問者

お礼

この度はありがとうございました。 今回のご協力いただいた内容を理解出来るように頑張りたいと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。
noname#158634
noname#158634
回答No.2

その前にまずそのコードが何をしてるのかを理解してませんよね? そういうのは質問じゃなくて「他人にやらせる」っていうんです。 >inp = "$A$1" >outp = "E1" 少しでも自分で理解しようとしているなら、上記2行を見ただけでもなんとなく見当はつくはずですよ?

すると、全ての回答が全文表示されます。
回答No.1

こんな感じでどうですか? Private Sub Worksheet_Change(ByVal Target As Range) Dim a As Range, c As Range Set a = Intersect(Target, Range("A1:A5")) If a Is Nothing Then Exit Sub Application.EnableEvents = False For Each c In a With c.Offset(, 4) If IsEmpty(c.Value) Then .Value = 0 ElseIf IsNumeric(c.Value) Then .Value = .Value + c.Value Else '数値以外は何もしない End If End With Next Application.EnableEvents = True End Sub

drakiyo
質問者

お礼

ありがとうございます。 参考にさせて頂きます。 すごく助かりました。

すると、全ての回答が全文表示されます。

関連するQ&A