Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6537 / 13646 ツリー ←次へ | 前へ→

【44644】同一セルに値を加算していくには? Ron 06/11/27(月) 10:00 質問[未読]
【44645】Re:同一セルに値を加算していくには? りん 06/11/27(月) 10:31 回答[未読]
【44646】Re:同一セルに値を加算していくには? Ron 06/11/27(月) 12:46 お礼[未読]
【44647】Re:同一セルに値を加算していくには? のびくん 06/11/27(月) 15:02 質問[未読]
【44648】Re:同一セルに値を加算していくには? Kein 06/11/27(月) 15:35 回答[未読]
【44659】Re:同一セルに値を加算していくには? のびくん 06/11/28(火) 0:52 発言[未読]
【44668】Re:同一セルに値を加算していくには? Kein 06/11/28(火) 15:19 回答[未読]
【44670】Re:同一セルに値を加算していくには? りん 06/11/28(火) 15:32 発言[未読]
【44682】Re:同一セルに値を加算していくには? のび 06/11/28(火) 18:58 発言[未読]
【44684】Re:同一セルに値を加算していくには? りん 06/11/28(火) 19:12 発言[未読]
【44685】Re:同一セルに値を加算していくには? のび 06/11/28(火) 21:01 発言[未読]
【44693】Re:同一セルに値を加算していくには? Mari 06/11/29(水) 7:29 発言[未読]
【44694】Re:同一セルに値を加算していくには? りん 06/11/29(水) 8:26 回答[未読]
【44700】Re:同一セルに値を加算していくには? のび 06/11/29(水) 12:54 お礼[未読]
【44701】Re:同一セルに値を加算していくには? のび 06/11/29(水) 12:57 お礼[未読]

【44644】同一セルに値を加算していくには?
質問  Ron  - 06/11/27(月) 10:00 -

引用なし
パスワード
   セルに値を入力したあと、もう一回同じセルに値を入力すると上書されます。
上書しないで新しく入力するたびにそれまで入力済みの値に加算合計を表示する
(電卓のように)ようにしたいのですが、どのようにすればいいでしょうか。
よろしくお願いします。

【44645】Re:同一セルに値を加算していくには?
回答  りん E-MAIL  - 06/11/27(月) 10:31 -

引用なし
パスワード
   Ron さん、こんにちわ。

>セルに値を入力したあと、もう一回同じセルに値を入力すると上書されます。
>上書しないで新しく入力するたびにそれまで入力済みの値に加算合計を表示する
>(電卓のように)ようにしたいのですが、どのようにすればいいでしょうか。
>よろしくお願いします。

Changeイベントで見張って、セルに数値が入力されたら戻してから加算。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim dt As Variant
  With Target
   If .Count = 1 Then
     If IsNumeric(.Value) Then
      Application.EnableEvents = False
      dt = .Value
      Application.Undo
      If IsNumeric(.Value) Then
        .Value = .Value + dt '加算
      Else
        .Value = dt '元が文字列とかの場合は上書き
      End If
      Application.EnableEvents = True
     End If
   End If
  End With
End Sub

こんな感じです。
特定のセルのみで処理したい場合は、Targetの位置を判定する分岐を入れてください。

【44646】Re:同一セルに値を加算していくには?
お礼  Ron  - 06/11/27(月) 12:46 -

引用なし
パスワード
   りん さん、こんにちわ。
早速のご返事ありがとうございます。

まさに、やりたかったことが実現でき感謝しております。
ありがとうございました。

【44647】Re:同一セルに値を加算していくには?
質問  のびくん  - 06/11/27(月) 15:02 -

引用なし
パスワード
   ▼りん さん:
>Ron さん、こんにちわ。
>
>>セルに値を入力したあと、もう一回同じセルに値を入力すると上書されます。
>>上書しないで新しく入力するたびにそれまで入力済みの値に加算合計を表示する
>>(電卓のように)ようにしたいのですが、どのようにすればいいでしょうか。
>>よろしくお願いします。
>
>Changeイベントで見張って、セルに数値が入力されたら戻してから加算。
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>  Dim dt As Variant
>  With Target
>   If .Count = 1 Then
>     If IsNumeric(.Value) Then
>      Application.EnableEvents = False
>      dt = .Value
>      Application.Undo
>      If IsNumeric(.Value) Then
>        .Value = .Value + dt '加算
>      Else
>        .Value = dt '元が文字列とかの場合は上書き
>      End If
>      Application.EnableEvents = True
>     End If
>   End If
>  End With
>End Sub
>
>こんな感じです。
>特定のセルのみで処理したい場合は、Targetの位置を判定する分岐を入れてください。

分岐?
たとえばA1とC5で実行したい場合はどう書き込めばいいですか。
初歩的な質問ですみません
If Not Intersect(Me.Range("A1")?
よろしくお願いします。

【44648】Re:同一セルに値を加算していくには?
回答  Kein  - 06/11/27(月) 15:35 -

引用なし
パスワード
   >A1とC5で実行したい場合
SelectionChange イベントを絡めた方法で・・

Private MyVal As Double

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With Target
   If .Count > 1 Then Exit Sub
   Select Case .Address
     Case "$A$1", "$C$5"
     Case Else: Exit Sub
   End Select
   If IsEmpty(.Value) Then Exit Sub
   If Not IsNumeric(.Value) Then Exit Sub
   MyVal = .Value
  End With
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
   If .Count > 1 Then Exit Sub
   Select Case .Address
     Case "$A$1", "$C$5"
     Case Else: Exit Sub
   End Select
   If IsEmpty(.Value) Then Exit Sub
   If Not IsNumeric(.Value) Then Exit Sub
   Application.EnableEvents = False
   .Value = MyVal + .Value
  End With
  Application.EnableEvents = True
End Sub

【44659】Re:同一セルに値を加算していくには?
発言  のびくん  - 06/11/28(火) 0:52 -

引用なし
パスワード
   ▼Kein さん:
ありがとうございます。
一度クリアにしたい場合どうすればいいでしょうか
またA1とC5それぞれ独立していないのでしょうか?
何度も申し訳ないのですがよろしくお願いします。

>>A1とC5で実行したい場合
>SelectionChange イベントを絡めた方法で・・
>
>Private MyVal As Double
>
>Private Sub Worksheet_SelectionChange(ByVal Target As Range)
>  With Target
>   If .Count > 1 Then Exit Sub
>   Select Case .Address
>     Case "$A$1", "$C$5"
>     Case Else: Exit Sub
>   End Select
>   If IsEmpty(.Value) Then Exit Sub
>   If Not IsNumeric(.Value) Then Exit Sub
>   MyVal = .Value
>  End With
>End Sub
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>  With Target
>   If .Count > 1 Then Exit Sub
>   Select Case .Address
>     Case "$A$1", "$C$5"
>     Case Else: Exit Sub
>   End Select
>   If IsEmpty(.Value) Then Exit Sub
>   If Not IsNumeric(.Value) Then Exit Sub
>   Application.EnableEvents = False
>   .Value = MyVal + .Value
>  End With
>  Application.EnableEvents = True
>End Sub

【44668】Re:同一セルに値を加算していくには?
回答  Kein  - 06/11/28(火) 15:19 -

引用なし
パスワード
   あー・・ちょっと先のコードはおかしいので、全体を↓に差し替えて下さい。

Private MyVal1 As Double, MyVal2 As Double

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  With Target
   If .Count > 1 Then Exit Sub
   If Not IsNumeric(.Value) Then Exit Sub
   Select Case .Address
     Case "$A$1": MyVal1 = .Value
     Case "$C$5": MyVal2 = .Value
   End Select
  End With
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
  With Target
   If .Count > 1 Then Exit Sub
   If IsEmpty(.Value) Then Exit Sub
   If Not IsNumeric(.Value) Then Exit Sub
   Application.EnableEvents = False
   Select Case .Address
     Case "$A$1": .Value = MyVal1 + .Value
     Case "$C$5": .Value = MyVal2 + .Value
   End Select
  End With
  Application.EnableEvents = True
End Sub

1つの変数で済ませるのは、無理があることが分かりました。

【44670】Re:同一セルに値を加算していくには?
発言  りん E-MAIL  - 06/11/28(火) 15:32 -

引用なし
パスワード
   のびくん さん、こんにちわ。
>>
>>>セルに値を入力したあと、もう一回同じセルに値を入力すると上書されます。
>>>上書しないで新しく入力するたびにそれまで入力済みの値に加算合計を表示する
>>>(電卓のように)ようにしたいのですが、どのようにすればいいでしょうか。
>>>よろしくお願いします。
>>
>>Changeイベントで見張って、セルに数値が入力されたら戻してから加算。
>>
>>Private Sub Worksheet_Change(ByVal Target As Range)
>>  Dim dt As Variant
>>  With Target
>>   If .Count = 1 Then
     If .Address = "$A$1" or .Address = "$C$5" Then
>>     If IsNumeric(.Value) Then
>>       Application.EnableEvents = False
>>       dt = .Value
>>       Application.Undo
>>       If IsNumeric(.Value) Then
>>         .Value = .Value + dt '加算
>>       Else
>>         .Value = dt '元が文字列とかの場合は上書き
>>       End If
>>       Application.EnableEvents = True
>>      End If
     End If
>>   End If
>>  End With
>>End Sub
>>
>>こんな感じです。
>>特定のセルのみで処理したい場合は、Targetの位置を判定する分岐を入れてください。
>
>分岐?
>たとえばA1とC5で実行したい場合はどう書き込めばいいですか。

単純にやるならこんな感じです。

【44682】Re:同一セルに値を加算していくには?
発言  のび  - 06/11/28(火) 18:58 -

引用なし
パスワード
   ▼りん さん:
返事ありがとうございます。
Changeイベントを抜ける場合は例えばESCキー等で
できないでしょうか。よろしくお願いします。


>>>
>>>>セルに値を入力したあと、もう一回同じセルに値を入力すると上書されます。
>>>>上書しないで新しく入力するたびにそれまで入力済みの値に加算合計を表示する
>>>>(電卓のように)ようにしたいのですが、どのようにすればいいでしょうか。
>>>>よろしくお願いします。
>>>
>>>Changeイベントで見張って、セルに数値が入力されたら戻してから加算。
>>>
>>>Private Sub Worksheet_Change(ByVal Target As Range)
>>>  Dim dt As Variant
>>>  With Target
>>>   If .Count = 1 Then
>     If .Address = "$A$1" or .Address = "$C$5" Then
>>>     If IsNumeric(.Value) Then
>>>       Application.EnableEvents = False
>>>       dt = .Value
>>>       Application.Undo
>>>       If IsNumeric(.Value) Then
>>>         .Value = .Value + dt '加算
>>>       Else
>>>         .Value = dt '元が文字列とかの場合は上書き
>>>       End If
>>>       Application.EnableEvents = True
>>>      End If
>     End If
>>>   End If
>>>  End With
>>>End Sub
>>>
>>>こんな感じです。
>>>特定のセルのみで処理したい場合は、Targetの位置を判定する分岐を入れてください。
>>
>>分岐?
>>たとえばA1とC5で実行したい場合はどう書き込めばいいですか。
>
>単純にやるならこんな感じです。

【44684】Re:同一セルに値を加算していくには?
発言  りん E-MAIL  - 06/11/28(火) 19:12 -

引用なし
パスワード
   のび さん、こんばんわ。
>Changeイベントを抜ける場合は例えばESCキー等で
>できないでしょうか。よろしくお願いします。
加算じゃなくて、通常の入力に切り替えたいということでしょうか?
DELキーでセルの値を消す、ではだめですか?

【44685】Re:同一セルに値を加算していくには?
発言  のび  - 06/11/28(火) 21:01 -

引用なし
パスワード
   ▼りん さん:
何度もすみません
>のび さん、こんばんわ。
>>Changeイベントを抜ける場合は例えばESCキー等で
>>できないでしょうか。よろしくお願いします。
>加算じゃなくて、通常の入力に切り替えたいということでしょうか?
>DELキーでセルの値を消す、ではだめですか?
delキーで消えないんです。

【44693】Re:同一セルに値を加算していくには?
発言  Mari  - 06/11/29(水) 7:29 -

引用なし
パスワード
   ▼のび さん:

DelKeyでは消せないです。
隣のセル(上下左右どれでもOK)と同時に選択して、Delで消えます。
対象セルだけで消そうとすると、コードを変える必要がありそうですね。

【44694】Re:同一セルに値を加算していくには?
回答  りん E-MAIL  - 06/11/29(水) 8:26 -

引用なし
パスワード
   のび さん、おはようございます。
>>DELキーでセルの値を消す、ではだめですか?
>delキーで消えないんです。

ブランクセルはIsNumericがTRUEを返すことを忘れてました。
ついでに、Undoで元のセルに戻ってしまう不具合を修正。

Private Sub Worksheet_Change(ByVal Target As Range)
  Dim dt As Variant,rdat as String
  With Target
   If .Count = 1 Then
     Select Case .Address(False, False)
      Case "A1", "C5" '該当セルのアドレスを列記
        If IsNumeric(.Value) And Not IsEmpty(.Value) Then
         Application.EnableEvents = False
         dt = .Value
         rdat = ActiveCell.Address '現在のセルの位置
         Application.Undo
         If IsNumeric(.Value) Then
           .Value = .Value + dt '加算
         Else
           .Value = dt '元が文字列とかの場合は上書き
         End If
         Range(rdat).Select 'Undo前の位置に戻す
         Application.EnableEvents = True
        End If
     End Select
   End If
  End With
End Sub

こんな感じです。

【44700】Re:同一セルに値を加算していくには?
お礼  のび  - 06/11/29(水) 12:54 -

引用なし
パスワード
   ▼りん さん:こんにちわ
delOKですよ
ありがとうございました。
解決です。

mariさんご指導ありがとうございました。
またお願いします。

>>>DELキーでセルの値を消す、ではだめですか?
>>delキーで消えないんです。
>
>ブランクセルはIsNumericがTRUEを返すことを忘れてました。
>ついでに、Undoで元のセルに戻ってしまう不具合を修正。
>
>Private Sub Worksheet_Change(ByVal Target As Range)
>  Dim dt As Variant,rdat as String
>  With Target
>   If .Count = 1 Then
>     Select Case .Address(False, False)
>      Case "A1", "C5" '該当セルのアドレスを列記
>        If IsNumeric(.Value) And Not IsEmpty(.Value) Then
>         Application.EnableEvents = False
>         dt = .Value
>         rdat = ActiveCell.Address '現在のセルの位置
>         Application.Undo
>         If IsNumeric(.Value) Then
>           .Value = .Value + dt '加算
>         Else
>           .Value = dt '元が文字列とかの場合は上書き
>         End If
>         Range(rdat).Select 'Undo前の位置に戻す
>         Application.EnableEvents = True
>        End If
>     End Select
>   End If
>  End With
>End Sub
>
>こんな感じです。

【44701】Re:同一セルに値を加算していくには?
お礼  のび  - 06/11/29(水) 12:57 -

引用なし
パスワード
   Keinさんお礼が遅くなりました。
ありがとうございました。
またわからないことがありましたら質問
させて貰いますよろしくお願いします。
解決!

6537 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free