• ベストアンサー

エクセル2000 平均値を記録したい

Sheet1のA1セルからA40セルまである値が入力されています Sheet2のA1セルにはそれらの平均値が計算されています。 Sheet1の元の値が変更され平均値が変化したときにSheet2の新しい平均値はB1,B2,B3と下のセルに記録していくコード、または考え方を教えていただければ助かります。

  • kuoka
  • お礼率56% (9/16)

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

#1です。 イベントブロシジュアを聞くのが初めてなら、やってみる方法も解説が必要かも。 平均を考えるデータを入力するシートを仮にSheet1とする。 メニューでツール-マクロ-VisualBasicEditorをクリック。 出てきた画面の、多分左側のフレームの上部に、VBAProject(Book1)が見えると思うが、その下のSheet1をダブルクリックする。白紙的な画面になって、上左の「General」をクリックして「WorkSheet」、右側の「Declaration」をクリックして Changeをクリックして選ぶ。 Private Sub Worksheet_Change(ByVal Target As Range) End Sub になるから、真ん中に回答の中身をコピペする。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub がでるかも知れないが、放っておいてよい。 実行はワークシートに戻ってA2:A10にデータを入れる。 Sheet2のA列に平均が順次出て行く。 しかし1-9個のデータを入れている間も出てしまう。これがこのような 問題の難しいところ。 とりあえずデータ入力完成後にこのイベントプロシージュアーを働かせるにはどうするか。もうひとつGO・STOPのサインがいるかも。

kuoka
質問者

お礼

本当にありがとうございました。 初心者にとっては敷居が高いようでしたが無事に動きました。 おっしゃるとおりの問題はありますが支障はありませんでした。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

これは思いつきやすい問題だが、易しくはない。VBAを使わないとできないだろうし、初級の問題ではないでしょう。 Chengeイベントに(イベントブロシジュアーの造り方わかりますか、とりあえず略) Private Sub Worksheet_Change(ByVal Target As Range) Static r Dim s As Range Set s = Intersect(Target, Worksheets("sheet1").Range("$a$2:$a$10")) If s Is Nothing Then Else If r = "" Then r = 1 Sheets("sheet2").Cells(r, "A") = WorksheetFunction.Average(Sheets("sheet1").Range("a2:a10")) r = r + 1 End If End Sub でそれらしく、できるようですが、ボロがあるかもしれない。

kuoka
質問者

補足

本当にありがとうございます やはり初級の私には少々難しいです。 イベントブロシジュアーという単語も今回はじめて目にしました。 とにかく一度試させていただきます。

関連するQ&A

  • エクセルでシートに入力した値を別シートに飛ばし、月別に集計する方法を教えてください

    タイトルでは分かり辛かったとは思いますが、要約すると以下の通りです。 1.元シート(以下Aと呼びます)に毎日同じセル内に1回値を入力します。 2.その入力された値を別シート(以下Bと呼びます)へとリンクさせ、尚且つそのBシート内で1か月分の集計を取ります。 つまりAシートでは毎日同じセルに値を入力しますが、Bシートでは1列ずつ下に記録され1か月分の入力がされていく、そのような操作は可能でしょうか? Bシートのあるセルに”=Aシートの指定セル”を入力するとAシートで値を変更するたびに同じセル内で値が更新されてしまいます。 どなたか方法が分かる方お知恵をお貸し下さい。よろしくお願いします。

  • エクセル2003の使い方について

    エクセル2003の使い方について エクセル2003の使い方で教えていただきたいことがあります。 例えば、Sheet1のA1セルに数式を入力してある値がでてきました。 その値を別のsheet2のB1セル、sheet3のC1セル、sheet4のD1セルでも使用します。 これら別々のsheetではA1の値を使って別の計算をするため、 A1の値が変わるたびに変更になった値を手入力するのではなく、A1セルとリンクさせることはできますか? よろしくお願いいたします。

  • エクセル:新しいマクロの記録について

    「新しいマクロの記録」で、 ・Sheet1のセルA1に「=Sheet2!I1」と入力 という操作を記録してもらったのですが、 記録された内容を見ると、 ActiveCell.FormulaR1C1 = "=Sheet2!RC[8]" と書かれていました。 FormulaR1C1もよくわからないけど、 検索したところ、たぶんセル入力に使う決まった記述なんだろうと認識しました。 が、「セルI1」が「RC[8]」になったのが理解できません。 どんな法則でこの「8」という数字が出てきているのでしょうか? 別のコードの中では、 コード内では同じ RC[229] なのですが、 参照するシートによって、この参照しているセルが変化しているように見えます。 具体的には、 Sheet1!RC[229]と書かれた方はセルIM2を、 Sheet2!RC[229]と書かれた方はセルIB2を参照しています。 (実際セルにカーソルを合わせると、RC[229]の部分はIM2,IB2と表示されます) Sheet1も2も、最も右側にある列はそれぞれIM,IBなので、 RC[229]とは終端を意味するのでしょうか?

  • エクセル 平均値を求めたい

    エクセルでセルに入っている値から平均値を求めたい。 この時、平均値を求めるにあたって条件があるのですが分かる方いらっしゃいますか? <条件> 0の値は無視して平均値を求める。 <セル値>     A 1   3 2   0 3   7 5   5 A1=3,A2=0,A3=7から平均値を求める時、値が入っている箇所のみ反映され 計算される方法が知りたいです。 上記値を合計すると10になり平均値は5になるようにA5に計算式を入れたいと思います。 「AVERAGE」「MEDIAN」を使用すると合計の数は10でいいのですが 割る数が0の行も含み3となってしまいます。 できれば0と入力されている所は無視して10÷2になるようにしたいのですが どう式を組んだらよろしいでしょうか? ちなみに範囲(A1~A3)を狭くすることなく算出できればと思っています。 よろしくお願いします。

  • エクセルでこんなことできますか?

    たとえば、sheet1のセルA1に「あ」、sheet2のセルA1に「い」、が入力されています。 sheet3のセルA1にsheet1またはsheet2と入力すると別のセルB1に「あ」または「い」と表示されるようにしたいのです。(sheet3のセルA1に入っているシート名のシートのセルA1の値をsheet3のセルB1に表示する) sheet3のセルB1に何らかの計算式を入れればいいと思うのですが・・・ このようなことはできるのでしょうか? エクセル2000、Win98です。宜しくお願いします。

  • エクセルでシート間の相対参照

    シートを分けて表を作成しています。 Sheet3のセルA1に「='sheet1'!A1」という計算式を入力しています。 この計算式を[B1]にコピーすると「='sheet1'!B1」ではなく、「='sheet2'!B1」という計算式にすることは可能でしょうか? 参照するセルも、シートも変更してほしいのですが、うまくいきません。 どなたかよろしくお願いします。

  • EXCELについての質問です。

    EXCELについての質問です。 あるセルに入力された数値をもとに、セルを指定し、そのセルに他のセルの値を入れたいのですが。 説明下手で分かりにくいので、下に具体例を示させていただきます。 具体的には、シート1のA3セルに3と入力された場合に、シート2のA5セルから3つ下のセルにシート1のA4のセルの値が現れるように、 シート1A3セルに5と入力されたら、シート2のA5セルから5つ下のセルにシート1のA4のセルの値が現れるようにする。 としたいのですが、どのようにすればよいのでしょうか、ご存知の方教えてください。

  • エクセルのマクロについて

    QNo.3421130で質問させて頂いた件の続きなのですが 入力シート(1)のA1に入力された値を、シート2のB1に表示(つまりB列の同じ行数のセルに表示)するというマクロをお教え頂き、早速実践してみましたが、入力シートA1に入っている値が入力シートA10から算出された値(例:A11に日付の2007/10/18と入っていて、A10にはMONTH関数で10だけを抽出している。そのA10の値10をA1が参照している状態やIF関数で反映された値等)がシート2に表示されません。 また本マクロは入力シート(1)とシート2の同じ行列のセルの表示しか出来ませんが、たとえば入力シート(1)のA2セルの値をシート2のB4に表示(任意で表示位置を変更する方法、シート2の反映セルを下へずらす等)が分りません。 以下、お教え頂いたマクロです。 Private Sub Worksheet_Change(ByVal Target As Range)  If Target.Column = 1 Then    Sheets("Sheet2").Cells(Target.Row, "B").Value = Target.Value  End If End Sub 続きの質問であることと、説明が分りにくく大変申し訳ありません。 非常に困っております。よろしくお願いします。

  • EXCELの平均を出す関数について

    初歩的な質問となりますが、 どうぞよろしくお願いいたします。 sheet1に下記のようなデータがあります。   A    B    D 1 日付  売上  平均 2 7/1   200    3 7/2   100   =AVERAGE(B2:B3) 4 7/3   300   =AVERAGE(B2:B4) 5 7/4   200   =AVERAGE(B2:B5) 6 7/5         ・ 7 7/6         ・ ・  ・          ・ ・  ・          ・ ・  ・          ・ 32 7/31        =AVERAGE(B2:B5) 現在B6までデータが入力されています。 D列に今日までの平均を表示したいのですが、 上記のようなAVERAGE関数をD32まで先に埋めてしまった場合、 B6:B32のあす以降の計算結果も出てしまいます。 B列のセルに入力がない限り、 今日の日付以降を計算しない(空欄)ようにする方法はありますか? よろしくお願いいたします。

  • エクセル 関数を使わずにデータを取りたい

    EXCELを使ってデータ入力をしたいです。 下の図のように、シート1のA列にコードを入力すると、シート2のテーブルから値を引っ張ってくるようにしたい。 たとえば、シート1のA1に"C001"を入力したら、B1に"赤"が自動入力されるようにしたい。 シート1 A列 B列 行1 C001 シート2 A列 B列 行1 C001 赤 行2 C002 青 行3 C003 黄色 ただし、シート1のB列の値は、入力後に編集するため、ここには計算式を入れたくないのです。 なので、通常ならばB列にVLOOKUP関数を使えばすむことですが、計算式を入れずに上記を実現する方法を教えてください。

専門家に質問してみよう