[[20070320075004]] 『セル A1 に5を入れて、セル B1 は常に合算の』(セルシオ) >>BOT

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

 

『セル A1 に5を入れて、セル B1 は常に合算の状態にしたのですが・・』(セルシオ)
 初心者です。セル A1 に5を入れて、セル B1 は常に合算の状態にしたのですが・・・・、
 たとえは、セル A1 に5を入れると セル B1 は5、
 そのままの状態で セル A1 に10を入れると セル B1 は15、
 そして、今度は セル A1 に8を入れると セル B1 は23と常に合算されるようにしたいのですが、
 どのようにしたら良いのでしょうか?博識者の方宜しくご指導ください。お願い致します。

  マクロを使うことになりますが、おすすめはしません。入力にエラーがあったとき、
 回復が不可能になるからです。入力の履歴は残すべきだと考えます。
  たくさんのデータを見えないようにしたいのなら、入力と表示を別のシートにするとかで
 対処できると思います。

 一応、マクロを書いてみますと、

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address <> "$A$1" Then Exit Sub
    Application.EnableEvents = False
    Range("B1").Value = Range("B1").Value + Target.Value
    Application.EnableEvents = True
 End Sub

 このコードをシートモジュールに貼り付けます。
 (シートタブ=Sheet1 とか表示される部分を右クリックし、「コードの表示」を
 選択して出てくるのがシートモジュールです。)

 繰り返しますが、この方法はお勧めはしません。

 (P)


 過去にほとんど同内容の相談がありました。
[[20041020105248]]『同一セル内での計算と内訳表示』(tasuketeman) 
 
実用的にはどこかに入力用のセル範囲を用意しておいて、そのセル範囲の集計結果を
SUM関数で出しておくものであると思います。
(みやほりん)(-_∂)b

 VBAでならSum関数で計算させないと、文字列でエラー...

 Private Sub Worksheet_Change(ByVal Target As Range)
 With Target.Cells(1,1)
      If .Address(0,0) <> "A1" Then Exit Sub
      Application.EnableEvents = False
      .Offset(,1).Value = Application.Sum(.Resize(,2))
      '.Offset(,1).Value = Application.Sum(.Offset(,1).Value, .Value)
      Application.EnableEvents = True
 End With
 End Sub
 (seiya)

  ↑ Applicaiton.EnableEvents  → Application.EnableEvents の
 スペル違いとして、Sumの引数に Valueプロパティを指定すると、
 文字列の場合はやっぱりエラーですね。Sum(.Resize(, 2)) のように
 範囲だけなら大丈夫のようです。
 Pさんのコードに On Error Resume Next を入れとくだけもよさそうです。
(純丸)(o^-')b

 ははーん
 範囲指定じゃないとだめなんですね?
 純丸さんありがとうございました。
 (seiya)

 シート上で考えると、
   範囲の場合、    =SUM(A1,B1)   A1 が 文字列 a でもエラーにはならない。
   Valueを付けた場合、 =SUM("a",1)   エラーになる。
 こんなことなのでしょう。
(純丸)(o^-')b  

 そうなんです。
 そんな記憶があったので...

 Appllication.Sum(.Offset(,1),.Cells)
 もしこれでエラーにならなかったら、RangeのDefault Property は
 Value ではないということになりますね?
 (seiya)

 Application.Sum(.Offset(, 1), .Cells) だと確かにエラーになりませんが、
 この場合、Property が省略されている訳ではなく、セル範囲としての
 .Cells なのではないかと思います。seiyaさん相手にVBAのことで意見を
 言えるほどのスキルは無いので、あくまで私の考えとして、ですが。
 はずしてたらごめんなさいです。
(純丸)(o^-')b

 純丸さん、

 RangeのDefault propertyは Item ということでしょう。
 .Offset(,-1).Item(1,1), .Cells.Item(1,1)
 ということになっているはずです。
 ということで、やはりPropertyは省略すべきではありませんね...
 (seiya)

 Itemメソッドを初めて見たことだし、ややこしくなりそうなので
 コメントは差し控えますが、「Propertyは省略すべきではない」という事には
 諸手を揚げて賛成します。
(純丸)(o^-')b

早速の返事ありがとう御座います
しかし、初心者なので回答の意味が良く分かりません。具体的に教えて頂けたら有りがたいのですが・・・・。 ダメでしょうか?
それと、質問では同一のシートでの作業を提案しましたが、本来は別のシートで作成したいのです。 申し訳ありませんが、詳しく教えていただけないでしょうか?お願い致します

 (超初心者のセルシオ)


 セルシオさん、
 何をどうしたいのかを「詳しく」説明してください。
 初心者だったら、「応用」するなんてことは一切考えないでください。
 応用できる力があれば、ある程度書けているはずですので。
 (seiya)

 要するに「ちょこっと工夫」では実現できない機能を要求している、ということ。
まずは最初の提示の条件で実験してみては?
 
【利用の仕方】
シート見出し右クリック、コードの表示を選択して、
seiyaさんのコードをコードウィンドウに貼り付け。
Alt押しながらQキーを押してエクセルに戻って、コードを貼り付けたシートの
A1セルに数値入力を繰り返すと、B1に数値が足しこまれていきます。
 
こういうのを便利だ、と思うのであれば、マクロを勉強するのも良いでしょう。
個人的には賛成しかねますが。
(みやほりん)(-_∂)b

コメント返信:

[ 一覧(最新更新順) ]


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