• ベストアンサー

エクセル スクロールバーにて変わる値について、現在と1個前のデータを比較したい

スクロールバーを動かすことによって次々と変わる値があるとします。今、スクロールバーを動かす前の値をコピーし、その後にスクロールバーを動かして新しい値を表示させ、一個前の値と比較したいと思っています。当初、「値のコピー→スクロールバーを動かす」というマクロをつくり、そのマクロをスクロールバーにリンクさせればいいのかと思ったのですが、スクロールバーを動かした後の値がコピーされ、1個前の値がコピーされません。どうすればよろしいでしょうか。最終的には、現在、1個前、2個前との比較を同時にしたいと思っております。よろしくお願いいたします。

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

  • ベストアンサー
  • yokomaya
  • ベストアンサー率40% (147/366)
回答No.6

ツール→マクロ→VisualBasicEditorを起動して プロジェクトエクスプローラから標準モジュールを表示すると Macro1があると思います。 仮にあなたが=random云々を入力記録したセルをA1と仮定すると その中身を消して Range("F65536").End(xlUp).Offset(1, 0).Formula = Range("A1") とすればボタンを押すつどF列に記録が溜まっていきます。 {別のセルなら最後のRange("A1")を変更してみてください。}

oderoku
質問者

お礼

すごい!仕組みが全くわからないけれど、できました!今後、この解読をしていきたいと思います。何度も丁寧に回答していただき、本当にありがとうございました!

その他の回答 (6)

  • yokomaya
  • ベストアンサー率40% (147/366)
回答No.7

仕組みを解説しておきます。 ○=RANDOM式はどこかのセルに入力があるとランダムに変動するので あなたが記録した式はなくても入力さえ起こればサイコロは振られるのです。 ○そこで順次記録ですが Range("F65536").End(xlUp).Offset(1, 0).Formulaは F65536セルでCTRL+↑を押すと見つかるセルから 一つ下のセルに入力するという意味です。 実際キーボード操作すると意味がなおわかりやすいかと。 入力するのは貴方が=RANDOMを記録したセルの値です。 この入力を契機に前述の通りサイコロは振られます。 ○ 最後に貴方が当初要望しておられた比較ですがこれは意外に難しいです。とうのは何をしてもセルに入力するとサイコロが振られてしまうため例えばスクロールバーのセルにリンクをしてしまうと意図せずサイコロは振られてしまいます。スクロールバーでなく例えばコンボボックスなどでセルを用いず実現する必要がありそうです。

oderoku
質問者

お礼

大変参考になりました。 色々試して自分のモノにしたいと思います。 この度は本当にありがとうございました。

  • yokomaya
  • ベストアンサー率40% (147/366)
回答No.5

あなたが記録しているのはVBAです。そしてそれをボタンを押して実行しています。しかも判る人には判るのですがその記録には必然がありません。 random文は先に入力しておいても構わないのです。再計算さえされれば値は変化しますので。 さて記録といってますが記述が必要です。 マクロのコードをまずVBEで見る事は出来ますか?標準モジュールかと思いますが。

  • yokomaya
  • ベストアンサー率40% (147/366)
回答No.4

>「ためていくこと」がどうすればいいかわからないのです。 すみませんが、申し上げたようにサイコロを振るが想像できないのでおお答えできません。 説明してください。

oderoku
質問者

補足

(1)表示→ツールバー→フォーム→ボタン を選択し、セル上にボタンを作成。 (2)マクロの記録 により、1つのセルに、=rounddown(rand()*(6-1)+1,0) を入力する動作をマクロ登録 (3) (1)のボタンにマクロ登録をする。 これにより、ボタンを押すたびに1~6の数字が出てくるかと思います。したいことは、ボタンを押すと、そのときの数値の他、前2回の数値も同時に表示させたいのです。ボタンを押すたびに数値がどこかに記録できればいいと思うのですが、その記録の仕方がわかりません。よろしくお願いします。

  • yokomaya
  • ベストアンサー率40% (147/366)
回答No.3

>さいころのを振ってでた数字を、過去2回前まで表示させたいのです。 念のためお伺いしますけどVBAの話と考えてよろしいですよね。 通常マクロを使わずにサイコロを振るという動作が想像しにくいものですから。 過去二回にとらわれずサイコロを振る都度いずれかのセル(列または行)に順次結果をためて行けばそれをスクロールバーの値に応じて参照すれば済むのですが。そしてVBAの話ならそのプログラム(コード)を提示願います。

oderoku
質問者

補足

すみません。VBAの話ではないです。でも、回答文中にあった「過去2回にとらわれずサイコロを振る都度いずれかのセルに順次結果をためていけば」ができれば問題解決できると思います。「ためていくこと」がどうすればいいかわからないのです。 よろしくお願いいたします。

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

スクロールバーは連続して動かせて、質問者にとっては、動きの何がしかの休止時間があるのかもしれないが、それとスクロールを続けて行う、間のわずかの時間とを、区別してくれるようなコントロールではないでしょう。 だからその瞬間に値をとれという、何かの仕組みが別途いるのは自明でしょう。 (テキストボックスでも似たようなことがあり、コマンドボタンのクリックなどで、内容の確定ということで、次のステップへ進めます。) (1)コマンドボタンなどを設け、クリックしたときスクロールバーの値をとる。 それを退避変数に保存しておく (2)タイマーで、時間の経過に関連付ける (3)スクロールバーのマウス・アップのようなイベントがあれば それを使うとか スクロールバーのイベントはChangeを含め数個あるから、それらをチェックしたら。 ーー 質問にはシートに貼り付けたか、フォームに貼り付けたか、スクロールバーは「フォーム」からか「コントロールツールボックス」から 持ってきたかさえも書いてない。  #1でおっしゃっているコードも乗せる必要があるかも。  質問者の、このことで頭がいっぱいの頭の世界と、読者・回答者が初めて質問文を読んで作れるイメージ世界とは得てして違うのだということをお忘れなく。

oderoku
質問者

補足

質問が的はずれですみません。スクロールバーはフォームから持ってきました。(というかコントロールツールボックスというモノがあることを初めて知りました)。改めて申しますと、さいころのを振ってでた数字を、過去2回前まで表示させたいのです。つまり、スクロールバーによって動く数字を「1回目」「2回目」「3回目」・・・であり、そのたびごとにでる数字を、仮に1回目のが5、2回目が3、3回目が1、今回が6とでたならば、「今回6、1回前1 2回前3」と表示したいのです。 これをするには、スクロールバーを動かす前に値をコピーし、その後にバーを動かせばいいのでしょうが、これを連続でやるにはどうすればよろしいのでしょうか。ボックスによりワンクリックごとにコピーという考えは非常によくわかったのですが、実際に行うにはどうすればよろしいのでしょうか。あまりエクセルに詳しくなく、質問の仕方もこれであっているのかわかりませんが、よろしくお願いいたします。

  • yokomaya
  • ベストアンサー率40% (147/366)
回答No.1

先にCopyとっておけばいいだけでは? コード示さないと的確な回答は得られないのでは?

関連するQ&A