MENU  □ MANUAL  □ 新着記事  □ 新規トピック追加  □ トピック一覧  □ SEARCH  □ 過去ログ
ログ内検索
・ キーワードを複数指定する場合は 半角スペース で区切ってください。
・ 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
・ 過去ログから探す場合は過去ログをチェック。
・ 過去ログは番号が大きいほど新しいログです。

キーワード/
検索条件/ (AND) (OR)
検索範囲(現在のログ)
(過去ログ1) (過去ログ2) (過去ログ3) (過去ログ4) (過去ログ5)
(過去ログ6) (過去ログ7) (過去ログ8) (過去ログ9) (過去ログ10)
(過去ログ11) (過去ログ12) (過去ログ13) (過去ログ14) (過去ログ15)
(過去ログ16) (過去ログ17) (過去ログ18) (過去ログ19) (過去ログ20)
(過去ログ21) (過去ログ22) (過去ログ23) (過去ログ24) (過去ログ25)
(過去ログ26) (過去ログ27) (過去ログ28) (過去ログ29) (過去ログ30)
(過去ログ31) (過去ログ32) (過去ログ33) (過去ログ34) (過去ログ35)

過去ログ12 を検索

HIT数 / 4件
NO.96783  表示行範囲の変更をリアルタイムで知る方法
■投稿者/ Rocker
■投稿日/ 2007/04/29(Sun) 08:17:47
□URL/

お世話になります。

●状況
1000行を超えるデータを処理して各行に棒グラフ表示(各行のセルに複数の色を
つけ棒グラフ状に描く)しています。各行のデータは相互に関連(参照されている)し
ている場合もあり、ひとつのデータを変更すると数百の行の値が変化するケースもあ
り、棒グラフを書き終えるまでに十数秒かかる場合もあります。このパフォーマンス
を改善したいのです。データの更新はChangeイベントを用いて入力の度にリアルタイム
で棒グラフを更新します。(ある理由でバッチ処理でなく、リアルタイムで再表示
が必要です。)

●やりたいこと
いろいろなパフォーマンスチューニングはやりましたが、もう限界?かと思っていま
す。この上は、行データはすべて更新するとしても、もっとも処理時間を要する
棒グラフ(セルに罫線と色づけをして棒グラフ状に見せる)の処理は画面に表示され
ている部分の行だけを更新するようにすることにしました。

●問題
表示されている行のみ更新することはできるのですが、ユーザーが表示倍率を変更
したり、スクロールした場合に新たに表示された行の棒グラフ描画をさせる必要があり
ます。ところが、画面に表示されている行範囲が変更された場合にVBAではイベントが
発生しないためリアルタイムで把握することができません。

●質問
画面に表示される行範囲がスクロール、倍率変更、その他の方法で変更されたことを
リアルタイムで知る方法はありますでしょうか。 win32 APIを呼ぶ方法でも構いま
せん。

どうかよろしくお願いいたします。






++++++++++++++++++++
OS      ⇒Windows 2000
Version⇒Excel 2000
++++++++++++++++++++
親記事
削除チェック/

NO.96794  Re[1]: 表示行範囲の変更をリアルタイムで知る方法
■投稿者/ ケイン
■投稿日/ 2007/04/29(Sun) 13:06:45
□URL/

>画面に表示される行範囲がスクロール、倍率変更、その他の方法で
>変更されたことをリアルタイムで知る方法
は、たぶん無いでしょう。しかし、色の変更はあくまでデータを変更する
ことをトリガーにするわけだから「入力データが変更された → そのとき
そのセル範囲と、そのセル範囲に関係していて現在、可視状態にある範囲を
着色する」という処理でよいはずですね ? ならば例えば以下のようなコードで
出来ると思います。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyR As Range

'Cells.Interior.ColorIndex = xlNone
On Error Resume Next
Set MyR = Intersect(Target.DirectDependents, _
ActiveWindow.VisibleRange)
If Not MyR Is Nothing Then
MyR.Interior.ColorIndex = 5
Set MyR = Nothing: Err.Clear
End If
Target.Interior.ColorIndex = 6
End Sub

ただ、私にはどうも "リアルタイム処理に拘りすぎ" との印象がぬぐえません。
多くの入力データを更新しても、色の変更は別のタイミングでも良いのなら、
Worksheet_Activate や Worksheet_Deactivate とか Workbook_BeforeClose
など、許容できるタイミングでの処理に変更することを検討して下さい。


この記事にはVBAのコードが含まれています。

緑の太文字→注釈
茶色の太文字→条件分岐
赤の太文字→ループ
青の太文字→その他
記事NO.96783 のレス /
削除チェック/

NO.96805  Re[2]: 表示行範囲の変更をリアルタイムで知る方法
■投稿者/ bykin
■投稿日/ 2007/04/29(Sun) 22:31:27
□URL/

こんばんわ。

マクロにこだわりすぎなんとちゃいまっか?
Changeイベントで

>1000行を超えるデータを処理して各行に棒グラフ表示(各行のセルに複数の色を
>つけ棒グラフ状に描く)しています。

なんて、重たそうな処理(対象セルが数千個?)をぐりぐりやろうとするから、時間かかってるんですわ。

>棒グラフ(セルに罫線と色づけをして棒グラフ状に見せる)

こんなのは工夫すれば条件付き書式でできると思うよ。
エクセルの標準機能を使ったほうが絶対早いです。

>ユーザーが表示倍率を変更したり、スクロールした場合

のことを考慮する必要もないし・・・

ちなみに2007やったら、ご希望の処理そのものが条件付き書式の新機能として追加されてまっせ。

ほな。
記事NO.96783 のレス /
削除チェック/

NO.96826  Re[3]: 表示行範囲の変更をリアルタイムで知る方法
■投稿者/ Rocker
■投稿日/ 2007/05/01(Tue) 00:49:37
□URL/

ケインさん、bykin さん、アドバイスありがとうございます。わたしも皆さんのご意見のとおりと思います。今、EXCEL上のVBAで通常のWinアプリとその操作性で遜色が全くないレベルのアプリを作成しようとしています。もう少しでいろいろとトライしてみます。ありがとうございました。
記事NO.96783 のレス / END
削除チェック/


パスワード/

- Child SEARCH -