Ken
選択的「更新」は可能でしょうか?
大野様へ
Kenです。大変お世話になっております。ところで、一縷の望みですが、
「更新」を選択的にする方法があれば、教えていただきたいのですが、、、
すなわち、シート”A”に存在する、QUOTE_Mだけに効く「更新」と
シート”B”にのみ有効な「更新」があり得るでしょうか?
実は、シート”A”には、約5万個のQUOTE_Mが存在しておりまして、更に
シート”B”には30個程度のCANDLE_Mが存在しております。
シート”A”に対する更新とシート”B”に対する更新のタイミングがズレておりまして
シート”A”の為に更新をかけますと、一緒にシート”B”にも更新がかかり、非常に
重い状態になってしまいます。したがいまして、「更新」が選択的に出来れば、
非常に都合が良くなるのですが、、、いかがでしょうか?
2021年11月25日
ストレッチ博士
よこっちょからお邪魔します。
やや荒業といえるかも知れませんが、簡単です
文字変換のマクロを作ってQUOTE_MをQUOTE_Zとでも変更してしまえば#NAMEになるので更新されないです。
更新したいときにQUOTE_ZをQUOTE_MにもどしてやればOK
2021年11月25日
Ken
ストレッチ博士様へ
横から入っていただき、感謝です!
ところで、全く思いも付かない提案でびっくりしております。
ところで、シート”A”には、5万個のQUOTE_Mがあるのですが、毎回(1分間に1回)
5万個のMを、Zに書き換えるのは、軽い作業でしょうか?もし、書き換える作業が
QUOTE_Mを処理するにかかる時間よりも圧倒的にはやければ、
実にすばらしいアイデアと思われますが、いかがでしょうか?
2021年11月25日
ストレッチ博士
実際に書き換えるのはQUOTE_Mの部分だけなんで5万個もないでしょ
せいぜい10個では?
っていうか1行マクロなんだからまず試したらどうです??
2021年11月25日
Ken
早速実験してみました。=QUOTE_Mを '=QUOTE_Mに置換えました。
置換えた数は52,280個と出ました。置換えるに必要だった時間は1~2秒でした。
非常に有望です! メインプログラムに入れ込もうと思います。
大変ありがとうございました。
2021年11月25日
大野 了
Kenさん、ストレッチ博士さん、こんにちは!!
更新ボタンを各シート単位でかける方法はパッとは思いつかないです。
もしかしたらシートを編集不可にしたら更新が掛からないかもしれませんが、
こちらは試してみないとノウハウがありません。
そしてストレッチ博士さんのやり方めっちゃいいですね!!
自分には絶対に思いつかない内容と思いました。
このリネームの方法が簡単だし、自分も一番いいと思います!!
ストレッチ博士さん、ありがとうございました!!
自分も一つノウハウが増えました!!
2021年11月25日
Ken
大野様、ストレッチ博士様、Kenでございます。
本日、半日を費やしまして、以下の置換えタスクを作成し、メインプログラムに
挿入して、実験したところ、処理時間が予想していたよりも、多く掛かりまして
結局、QUOTE_Mとの処理時間はほとんど同じ(あるいは少し多く掛かる)
という結果となってしまいました。残念です! ということで、大野様からは
<シートを編集不可にしたら更新が掛からないかもしれませんが、、
あたりにつきまして、教えていただければ幸いです。実験してみたいと思います。
(なんせ、52,800個という猛烈なセルの数がネックと思われます)
Sub シート更新無効有効化()
Dim b As Boolean
Dim ws04 As Worksheet
Set ws04 = Worksheets("データ一覧")
ws04.Select
If K = 1 Then '無効化
b = Range("C5:H8703").Replace("QUOTE_M", "QUOTE_Z")
GoTo ZZZ
End If
If K = 0 Then '復旧化
b = Range("C5:H8703").Replace("QUOTE_Z", "QUOTE_M")
End If
ZZZ:
End Sub
2021年11月26日
大野 了
Kenさん、こんにちは!
こちらですが、いったん描画を止めてみられるというのがいかがでしょうか?
描画が原因で遅いのであれば、もしかすると下記のソースで早くなるかもしれません。
Sub シート更新無効有効化()
Dim b As Boolean
Dim ws04 As Worksheet
On Error GoTo Catch
Application.ScreenUpdating = False
Set ws04 = Worksheets("データ一覧")
ws04.Select
If K = 1 Then '無効化
b = Range("C5:H8703").Replace("QUOTE_M", "QUOTE_Z")
GoTo ZZZ
End If
If K = 0 Then '復旧化
b = Range("C5:H8703").Replace("QUOTE_Z", "QUOTE_M")
End If
ZZZ:
Catch:
Application.ScreenUpdating = True
End Sub
2021年11月27日
Ken
大野様へ
早速実験してみました。Timer関数での経過時間を計測した
結果を以下に示しております。
ScreenUpdate =False時 =True時
無効化 の時間 10.87秒 11.16 秒
有効化 の時間 10.1秒 10.609 秒
結果、ScreenUpdate=False をやった場合とやらない場合の差は
わずか3~5%程度でした。少し残念です。
シート“データ一覧”の更新だけをバッサリと切る命令があれば
実に都合が良いのですが、、、
2021年11月27日
大野 了
kenさん、こんにちは
まったく速くなってないですね・・・
残念ですね・・・
シートの編集可不可は、
Protectメソッドで編集不可
Unprotectメソッドで編集不可解除
となります。
編集を掛けたいSheetオブジェクトに対して実行する形になります。
※Kenさんのロジックでいうところの『ws04』になります。
ですが、こちらは効果があるか未知数ですので、
一度、
校閲 - シートの保護を一度掛けてみられて
更新ボタンを押して早くなるかを確認してみられてからの方がいいと思います!!
2021年11月27日
Ken
大野様へ
実験してみました。結論はほとんど差が認められませんでした。
実験の概要を以下に記述しました。
1.シートws04を開き、上方の「校閲」タブをクリック。
2.シートの保護をクリック
3.シートとロックされたセルの内容を保護する(C)にチェックを入れる。
4.パスワードを設定し、OKボタンをクリック
5.アドインボタンをクリックし、手動にて「更新」ボタンをクリックする。
6.シートws04におけるQUOTE_Mが書き込まれたセルに数字が現れる。
以上の実験で明らかなように、保護をかけても、「更新」は全く保護に関係なく実行されました。(更新を掛けますと、ノートPCの空冷ファンがうなりだし、CPUの温度を下げようとします!)即ち、セルに書き込まれた内容を上書きしようとすると、パスワードの入力を求められますが、QUOTE_Mの実行は保護のあるなしに関係なく行われます。従いまして、CPUタイムの節約は出来ませんでした。残念です!
最初から一縷の望みかなあ、、と思っておりましたが、やはり一縷だったか!と、うなだれております。おつきあい大変感謝いたしております。ありがとうございました!
2021年11月29日
大野 了
Kenさん、こんにちは!!
ダメでしたか・・・
ワンチャンあるかなーと思ったんですが、俺も残念です・・・
ちょっと解決策は思いつかないですが、
何かいい方法思い付いたらここに書かせて書きたいと思います!!
2021年11月30日
ken
大野様へ
期待いたしております!
2021年11月30日