[[20040220103103]] 『1つのセルに順次数字を入れて足し算を』(さや) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『1つのセルに順次数字を入れて足し算を』(さや)

初歩的な質問ですみません

1つのセルに直接数字を入れて足し算や引き算が出来るのでしょうか?たとえば、A1に356と入っていた所に、256を入力して612となるようにしたいのですけど・・・・宜しくお願いします


 マクロ(VBA)を使えば可能です。

  (INA)


 マクロ(VBA)は、やった事がないのですけど、簡単に出来るのでしょうか?
もし、説明をして頂けるのなら挑戦してみたいのですけど・・・・だめでしょうか?

 (さや)


 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)


 INAさん、ありがとうございます m(__)mペコ 出来ました!

 しかし、複数のセルを対象にするのには、("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)

 INAさん、ごめんなさい!
 こんなに大変なことだと知らずに・・・・感覚的には、もっと簡単に出来る事だと考えていました。でも、私的には本当に不思議です。分かっていないから思うのでしょうが、エクセルの計算式の様に、「:」「,」などで出来る物だと思っていましたが、こんなに内容が変わってしまうとは思いも寄りませんでした。
 本当にごめんなさい。そして、ありがとうございました。

 (さや)


 セルの値を上書き入力したときに、
 もともとあった値を取得できなくなってしまいますので、
 セルに書かれている値を何処かに保持しておく必要があります。

 こんかいは、ブックを開いた時点で(Workbook_Open)で、
 A1,B1,C1 の値を 変数 myVal(0),myVal(1),myVal(2) に格納して
 保持させています。変数=メモリに保持させていることになりますので、
 もし対象とするセル範囲が多くなる場合には、別シートを非表示にして
 セルに値を保持する方が効率がよいでしょう。

 あとは、SheetChangeイベント(対象シートのセルの値の変化)で実行されるマクロ
 により、セル番地に応じて i = 0,1,2 を使い分けて、
 変数の処理をしています。

  (INA) 


 再度の質問にちょっと気が引けるのですけど、下から5行目 Target.Value = myVal(i) + Target.Value の位置が、黄色く色付けされて「実行時エラー 13 型が一致しません。」と、出ますが、どういう事なのでしょうか?

 (さや)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.