[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『1つのセルに順次数字を入れて足し算を』(さや)
初歩的な質問ですみません
1つのセルに直接数字を入れて足し算や引き算が出来るのでしょうか?たとえば、A1に356と入っていた所に、256を入力して612となるようにしたいのですけど・・・・宜しくお願いします
マクロ(VBA)を使えば可能です。
(INA)
(さや)
1.ALT+F11キーで、VBEを起動 2.プロジェクトウィンドウのThisWorkBook を Wクリック 3.中央の真っ白なウィンドウ(コードウィンドウ)に以下のコードをコピペ
Public myVal As Double
Private Sub Workbook_Open() myVal = Worksheets("Sheet1").Range("A1").Value End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) If Sh.Name <> "Sheet1" Then Exit Sub If Target.Address <> Range("A1").Address Then Exit Sub
Application.EnableEvents = False
If Target.Value = "" Then myVal = 0 Else Target.Value = myVal + Target.Value myVal = Target.Value End If
Application.EnableEvents = True End Sub
これで、sheet1 A1 が対象になります。
(INA)
しかし、複数のセルを対象にするのには、("A1""B1""C1")と入力したのではダメなようですが、連続したセルの場合や離れたセルの場合にどうすれば良いのでしょうか?ごめんなさい、お手数をお掛けしますが宜しくお願いします。
(さや)
こんな感じです。
Public myVal As Variant
Private Sub Workbook_Open() With Worksheets("Sheet1") myVal = Array(.Range("A1").Value, .Range("B1").Value, .Range("C1").Value) End With End Sub
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) Dim i As Long
If Sh.Name <> "Sheet1" Then Exit Sub
Select Case Target.Address Case Range("A1").Address i = 0 Case Range("B1").Address i = 1 Case Range("C1").Address i = 2 Case Else Exit Sub End Select
Application.EnableEvents = False
If Target.Value = "" Then myVal(i) = 0 Else Target.Value = myVal(i) + Target.Value myVal(i) = Target.Value End If
Application.EnableEvents = True End Sub
>初歩的な質問ですみません これはけっして初歩的な内容のご質問ではないですね。 (^_^;) (INA)
(さや)
セルの値を上書き入力したときに、 もともとあった値を取得できなくなってしまいますので、 セルに書かれている値を何処かに保持しておく必要があります。
こんかいは、ブックを開いた時点で(Workbook_Open)で、 A1,B1,C1 の値を 変数 myVal(0),myVal(1),myVal(2) に格納して 保持させています。変数=メモリに保持させていることになりますので、 もし対象とするセル範囲が多くなる場合には、別シートを非表示にして セルに値を保持する方が効率がよいでしょう。
あとは、SheetChangeイベント(対象シートのセルの値の変化)で実行されるマクロ により、セル番地に応じて i = 0,1,2 を使い分けて、 変数の処理をしています。
(INA)
(さや)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.