• ベストアンサー

常に最下行を表示する方法

こんばんわ。   データをエクセル上にリアルタイムにロギングしていくソフトを使用しているのですがデータが上段から下段へ移行していきます。 上段から下段へ移動するのは問題ないのですが データが入力されるにつれモニター画面を通り越してしまうので最新データを常に見ていることができません。 最新データを常に見れるように最下段に入ったデータを常にモニター画面に表示できるようにできないでしょうか? 因みに私が扱ってるデータは一秒間に5回くらい入力されます。 エクセル2000を使用していますが5万行くらいのデータ量になります。 どうぞご教授のほどよろしくお願いします。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

なるほど。 それではANo.2で回答したマクロを Private Sub Worksheet_Change(ByVal Target As Range)  on error resume next  Target.Offset(1).Select End Sub とします。 このマクロは,ロギングが走っているシートごとにシート名タブを右クリックして,コードの表示を選んで現れたシートに貼り付けます。

power_forever
質問者

お礼

こんにちは 再レスありがとうございます。 改めていただいた式で試してみたところ 完璧でした! 私の思ったとおりの動作で不具合もありませんでした。 エクセルの操作で解決できるものだと思っていたのすが VBAは私には敷居の高いもので 恥ずかしながら教えていただいたものを内容を理解することもできずそのままコピペしただけです。 しかしこの機会にVBAを真剣に勉強してみようとおもいます。 まずは頂いた内容の意味を手探りですが解いてみようと思います。 この度はkeithin様他諸先輩方の教えを頂きまして解決できました。 本当にありがとうございました。

その他の回答 (4)

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.5

標準モジュールの出し方。  Sheet見出し上で右クリック → コードの表示 → VBE画面が出ますので  その画面で、挿入をクリック → 標準モジュールを選択  出てきた画面に貼り付けしてください。 マクロの実行方法  キーボードの[Alt]と[F8]を押します。  実行したいものを選択します。 コメントを書き加えましたので、読んでください 'ここから Option Explicit Private Declare Function GetAsyncKeyState Lib "user32" ( _ ByVal vKey As Long) As Integer Private 呼び出し回数 As Long Sub スクロールサブ()   Dim i As Long   Const myName = "Sheet1" 'スクロールしたいシートの名前に変更する   If ActiveSheet.Name = myName Then     i = Range("A" & Rows.Count).End(xlUp).Row 'A列の最終行をセット。列が違ったら"A"を"B"などに書き換える     ActiveWindow.ScrollRow = i     If GetAsyncKeyState(vbKeyEscape) <> 0 Then 'Escを2秒以上押すと実行停止       呼び出し回数 = 0       Application.StatusBar = False       Exit Sub     End If     If 呼び出し回数 < 0 Then       呼び出し回数 = 0       Exit Sub     End If   End If   '2秒毎に自分自身を呼び出し、スクロールする   Application.OnTime Now + TimeValue("00:00:02"), "スクロールサブ"   呼び出し回数 = 呼び出し回数 + 1   Application.StatusBar = _      "呼び出し回数... " & 呼び出し回数 End Sub Sub 繰り返し停止サブ()   呼び出し回数 = -1000   Application.StatusBar = False End Sub

power_forever
質問者

お礼

こんにちは 再レスありがとうございます。 コメントをいただいたおかげで私にも使用することができました。 動作も完璧に不具合もなく動作しました! 2秒ごとにロギング画面が更新されるものでした。 ナルホド納得の動作でこれも正解ですね! いろいろと設定も変えられるので他用途でも使用できそうです。 今回はki-aaa様の教えを頂き解決に至れました。 本当にありがとうございました。 私ごときが諸先輩方の回答に甲乙をつけるなど憚られるのですが システムの関係上ご容赦ください。

  • ki-aaa
  • ベストアンサー率49% (105/213)
回答No.3

こんな方法はどうでしょうか 標準モジュール Option Explicit Private Declare Function GetAsyncKeyState Lib "user32" ( _ ByVal vKey As Long) As Integer Private 呼び出し回数 As Long Sub スクロールサブ()   Dim i As Long   i = ActiveSheet.UsedRange.Rows.Count   ActiveWindow.ScrollRow = i   If GetAsyncKeyState(vbKeyEscape) <> 0 Then 'Escapeが現在押されている状態だったら実行停止     呼び出し回数 = 0     Application.StatusBar = False     Exit Sub   End If   If 呼び出し回数 < 0 Then     呼び出し回数 = 0     Exit Sub   End If   Application.OnTime Now + TimeValue("00:00:02"), "スクロールサブ"   呼び出し回数 = 呼び出し回数 + 1   Application.StatusBar = _      "呼び出し回数... " & 呼び出し回数 End Sub Sub 繰り返し停止サブ()   呼び出し回数 = -1000   Application.StatusBar = False End Sub

power_forever
質問者

お礼

こんばんわ。 返信ありがとうございます! 早速試させていただきました。 が・・・ どうやら私の狭小な脳では内容の理解どころか どうやってこの式を使用するのかさえ分かりませんでした;; Option ExplicitのところからNo1のtom04様に教えていただいた のと同じ方法でコピペしたのですが上手く動作していないように見えました。 どのような内容なのかわかりませんが 動作したらとても素敵な動きをするようで楽しみで仕方ありません。 もしよろしければ今一度ご教授いただけたらと思っております。 どうぞよろしくお願いいたします。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

シート名タブを右クリックしてコードの表示を選び Private Sub Worksheet_Change(ByVal Target As Range) Target.Offset(1).Select End Sub とかでいいです。

power_forever
質問者

お礼

こんばんわ 返信ありがとうございます! 早速試させていただきました 結果は・・・ 思ったとおりの動きをしてくれました! 最新データがモニターからはみ出すことなく常に表示されました。 が・・・ 『実行エラー'1004'RangeクラスのSelectメソッドが失敗しました』 というエラーがでてしまいます。 デバックを見ると Target.Offset(1).Select の部分が黄色く表示されています。 式の内容は全くわからないので現象を追及してみたところ ロギングをしているシートを見ている状態では問題なく動作しているようですが、 別シートに移動するとエラーがでます。 シートを複数使用していること自体説明してなかった部分ですので 「そんなの聞いてないよ!」って言われたらそれまでです。 申し訳ありません;; もしもまだお時間があり改善策など思いつくようなことがありましたら どうぞご教授のほどよろしくお願いいたします。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! 一例です。 画面左下にある操作したいSheet見出し上で右クリック → コードの表示 → VBE画面が出ますので、 ↓のコードをコピー&ペーストしてみてください。 Private Sub Worksheet_Change(ByVal Target As Range) 'この行から Dim i As Long i = ActiveSheet.UsedRange.Rows.Count ActiveWindow.ScrollRow = i End Sub 'この行まで 尚、最終行が画面の1行目に表示されてしまいますので、仮に最終行を画面の10行目に表示したい場合は ActiveWindow.ScrollRow = i  の部分を ActiveWindow.ScrollRow = i-9 のように調整してみてください。 参考になれば良いのですが・・・m(__)m

power_forever
質問者

お礼

早速のご返事ありがとうございます! 今日試してみたのですが・・・ この式では刻々と入力される最新のロギングデータを表示するのではなく そのシートの最下行を表示してしまうようです。 5万行をシートに設定していたら5万行目を表示します。 私の説明が悪いがために勘違いなされたものと推測いたします。 このような書き込みをするのも初めてなもので 上手く伝わらないだろうと思いつつの質問でしたので申し訳ありません。 もしもまだお付き合いくださるようでしたら 今一度教えを乞いたいと思っておりますのでどうぞよろしくお願いします。

関連するQ&A