Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


3502 / 13645 ツリー ←次へ | 前へ→

【61661】カメラ機能を使用したブックがあると異常に処理が遅くなる ON 09/5/25(月) 17:07 質問[未読]
【61662】Re:カメラ機能を使用したブックがあると異... ON 09/5/25(月) 17:18 発言[未読]
【61663】Re:カメラ機能を使用したブックがあると異... ON 09/5/25(月) 17:20 発言[未読]
【61664】Re:カメラ機能を使用したブックがあると異... もも 09/5/25(月) 18:04 発言[未読]
【61666】Re:カメラ機能を使用したブックがあると異... ON 09/5/25(月) 18:29 発言[未読]
【61667】Re:カメラ機能を使用したブックがあると異... もも 09/5/25(月) 18:51 発言[未読]
【61706】Re:カメラ機能を使用したブックがあると異... ON 09/5/28(木) 13:35 発言[未読]
【61709】Re:カメラ機能を使用したブックがあると異... もも 09/5/28(木) 14:56 発言[未読]
【61710】Re:カメラ機能を使用したブックがあると異... もも 09/5/28(木) 14:58 発言[未読]
【61722】Re:カメラ機能を使用したブックがあると異... ON 09/5/29(金) 20:56 お礼[未読]
【61805】Re:カメラ機能を使用したブックがあると異... ON 09/6/5(金) 16:21 お礼[未読]

【61661】カメラ機能を使用したブックがあると異常...
質問  ON  - 09/5/25(月) 17:07 -

引用なし
パスワード
   こんにちは

よろしくお願いいたします


Bブックのマクロ CLR_DT2 が、異常に遅いので、調べてみると
カメラ機能を使用したAブックが別途開いていた為でした

Aブックのカメラシートがないとき
 処理一瞬
 2009/05/25 16:25:04
 2009/05/25 16:25:04
 2009/05/25 16:25:04
 2009/05/25 16:25:04

Aブックのカメラシートが1枚のとき
 2009/05/25 16:24:09
 2009/05/25 16:24:10
 2009/05/25 16:24:11
 2009/05/25 16:24:12

Aブックのカメラシートが2枚のとき
 2009/05/25 16:23:36
 2009/05/25 16:23:39
 2009/05/25 16:23:43
 2009/05/25 16:23:44

Aブックのカメラシートが3枚のとき
 2009/05/25 16:20:54
 2009/05/25 16:20:58
 2009/05/25 16:21:02
 2009/05/25 16:21:04


Bブックのマクロ確認時
ActiveSheet.EnableCalculation = False
Application.EnableEvents=False
とか入れてみましたが変化はありませんでした


別ブックが開いていても、それでマクロが影響することはないと思っていましたが
このような状況が、なぜ発生するのでしょうか


カメラ付ブックが開いていても影響を受けないためには
コードをどのように修正すればいいでしょうか

アドバイスよろしくお願いいたします


Aブック

 一般シート10枚(表等)
 一般シートで、上記シートの各表をカメラ機能で貼り付けたシート3枚
  シート1枚にカメラによる表が5個程度貼り付けています
  この3枚のシートで、各シートの各表の全体イメージがわかるものとなっています

 マクロ無し

Bブック

 Aブックとは無関係
 マクロ有りブック
 コードは、下記マクロ1個のみ

Sub CLR_DT2()

Debug.Print Now()

With ActiveSheet


   .Range("M2").Value = ""
   .Range("I4").Value = ""
   .Range("I5").Value = ""

   .Range("B8").Value = ""
   .Range("B9").Value = ""
   .Range("B10").Value = ""
  
   .Range("C12").Value = ""
   .Range("F12").Value = ""
   .Range("I12").Value = ""
  
   .Range("S37").Value = ""
   .Range("M5").Value = ""
   .Range("E13").Value = ""
   
  
   Debug.Print Now()
   
   
   .Range("D16:F20").ClearContents
   
   .Range("B19").Value = ""
   .Range("B20").Value = ""
   .Range("G19").Value = ""
   .Range("G20").Value = ""
   .Range("G21").Value = ""
   
   .Range("I16").Value = ""
   .Range("I17").Value = ""
   .Range("I18").Value = ""
   .Range("I19").Value = ""
   .Range("I20").Value = ""
   .Range("I21").Value = ""
   
   Debug.Print Now()
   
   .Range("D26:F26").ClearContents
   .Range("D29:F29").ClearContents
   .Range("D32:F32").ClearContents
   .Range("D34:F35").ClearContents

   .Range("M21").Value = ""
   .Range("M37").Value = ""
   
  
   End With
   
   Debug.Print Now()

End Sub

【61662】Re:カメラ機能を使用したブックがあると...
発言  ON  - 09/5/25(月) 17:18 -

引用なし
パスワード
   追記
Bブックは、新規作成で
CLR_DT2だけ貼り付けたので
シートは空の状態です

【61663】Re:カメラ機能を使用したブックがあると...
発言  ON  - 09/5/25(月) 17:20 -

引用なし
パスワード
   追記
エクセル2003です

【61664】Re:カメラ機能を使用したブックがあると...
発言  もも  - 09/5/25(月) 18:04 -

引用なし
パスワード
   ▼ON さん:
こんにちは

そもそもなぜ無関係なAブックを開いていなければいけないのか不明ですが

>Bブックのマクロ確認時
>ActiveSheet.EnableCalculation = False
>Application.EnableEvents=False
>とか入れてみましたが変化はありませんでした

ここで
>ActiveSheet.EnableCalculation = False
アクティブシートの計算をしないよう設定しても意味がありません。
コードを組んでいるのはBブックな訳で、これではAブックの
再計算は止まりません。

下のようにAブックの計算を止めてみてください。

でも、私ならAブックを先に閉じますが・・・

Sub Test()
Dim sh As Worksheet

For Each sh In Workbooks("Aブック").Worksheets
 sh.EnableCalculation = False
Next sh

'ここにコード

For Each sh In Workbooks("Aブック").Worksheets
 sh.EnableCalculation = True
Next sh

End Sub

【61666】Re:カメラ機能を使用したブックがあると...
発言  ON  - 09/5/25(月) 18:29 -

引用なし
パスワード
   ▼もも さん こんにちは
ありがとうございます

>そもそもなぜ無関係なAブックを開いていなければいけないのか不明ですが
複数ブックを起動していることは頻繁にやってます・・・

なので、知らないところで、カメラ機能使用ブックが開いていると
当然、カメラ機能を使用しているブックか不明だったりしてると
突然バグが発生したみたいな感じでパニクリそう・・・みたいな・・です

回避コードがあれば、幸せになれそうな気がしています


下記試してみました

Sub Test()
Dim sh As Worksheet

For Each sh In Workbooks("Aブック.xls").Worksheets
 sh.EnableCalculation = False
Next sh

CLR_DT2

For Each sh In Workbooks("Aブック.xls").Worksheets
 sh.EnableCalculation = True
Next sh

End Sub

2009/05/25 18:10:17
2009/05/25 18:10:21
2009/05/25 18:10:26
2009/05/25 18:10:28

Sub Test2()
Dim sh As Worksheet

Application.Calculation = xlManual

CLR_DT2

Application.Calculation = xlAutomatic

End Sub

2009/05/25 18:11:58
2009/05/25 18:11:59
2009/05/25 18:12:00
2009/05/25 18:12:01


Application.Calculation では、効果がありましたが・・・

でも、やはりAブックの影響は受けていますね・・・・


CLR_DT2 が Aブックの影響を受ける原因等がわかりません

アドバイスあればよろしくお願い致します

【61667】Re:カメラ機能を使用したブックがあると...
発言  もも  - 09/5/25(月) 18:51 -

引用なし
パスワード
   ▼ON さん:

対処法は色々あると思いますが
Aブックがどんな内容なのかわからないのでなんともいえません。

>CLR_DT2 が Aブックの影響を受ける原因等がわかりません
>
>アドバイスあればよろしくお願い致します

という事であれば原因はAブックと解っているはずですので
Aブックを閉じるなり、別インスタンスのエクセルでやるなりだと
思うのですが。

Aブックに数式やリンクが多ければ当然影響は受けますね。
なぜなら、Bブックが再計算される状況になれば
Aブックも再計算されるからです。

これは、例えばAブックのシートモジュールに

Private Sub Worksheet_Calculate()
MsgBox "Aブックが再計算されました"
End Sub

とか書いておいて

Bブックで

Sub test()
ActiveSheet.Range("A1").Value = ""
End Sub

とでもしてtestを実行してみればわかると思います。

【61706】Re:カメラ機能を使用したブックがあると...
発言  ON  - 09/5/28(木) 13:35 -

引用なし
パスワード
   もも さん 遅くなりました
ありがとうございます

>対処法は色々あると思いますが

>Aブックを閉じるなり、別インスタンスのエクセルでやるなりだと
>思うのですが。
が、理解できる人ならかまわないのですが
エクセル一般操作でいっぱいいっぱいの人に利用してもらうブックを作成しています

また
ブックを同時に開いての複数使用使用は一般的なことのように思います

>Aブックに数式やリンクが多ければ当然影響は受けますね。

>>Aブック
>> 一般シート10枚(表等)
>> 一般シートで、上記シートの各表をカメラ機能で貼り付けたシート3枚

下記で、数式記載があるか調べてみましたがありませんでした

Sub 全シート数式検索()

Dim c As Variant '検索されたセル
Dim Ws As Worksheet

For Each Ws In ThisWorkbook.Worksheets
  For Each c In Ws.UsedRange
    If c.HasFormula = True Then
      Debug.Print c.Address(0, 0)
      Debug.Print c.Formula
    End If
  Next
Next

End Sub

ただ、上記では
カメラ機能の数式 たとえば、=$A$1:$B$10 は取得できていません・・・
(上記、今回初めて知りました)


>Aブックも再計算されるからです。
上記のため、Aブックでは再計算される可能性はないような気がします・・・

また
>Aブックのカメラシートがないとき
> 処理一瞬
からも、今回の原因は、カメラ機能にあると思います

不具合サンプル作ろうとしてマクロ記録してみたら出来きずに
ググッてみたら下記かかりました


▼【23782】カメラ機能をマクロ記録出来ない カメラ機能 マクロ記録できない
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=23782;id=excel

エクセルのカメラ機能について
ht tp://oshiete1.goo.ne.jp/qa2480777.html


>どうもカメラ機能はリアルタイムにエクセルのバックグラウンドで処理されている感じなので、カメラ機>能の画像を貼付けたブックがあるとVBAの実行に支障が置きます。
>(数秒足らずの処理が分単位以上の処理時間になります)


ただ、カメラ機能を使用したブックにお目にかかることはかなりまれなので
この状況がわかっていれば、いいような気もしてきました


何かあればよろしくお願いいたします

【61709】Re:カメラ機能を使用したブックがあると...
発言  もも  - 09/5/28(木) 14:56 -

引用なし
パスワード
   ▼ON さん:
>>Aブックも再計算されるからです。
>上記のため、Aブックでは再計算される可能性はないような気がします・・・

再計算という言葉が微妙ですがカメラ機能もリンクに変わりないわけで
リンク先の取得という動作のために重くなっているのでしょう。

で、セルへの変更がされる度にリンク先を確認に行きますので
(Aブックでも)
当然重くなるわけです。

で、「セルへの変更がある都度」なので
その機会を減らすという意味では

Sub CLR_DT2()

Debug.Print Now()
With ActiveSheet
 .Range("M2,I4:I5,B8:B10,C12,F12,I12,S37,M5,E13").Interior.ColorIndex = 6 '.ClearContents
 Debug.Print Now()
 .Range("D16:F20,B19:B20,G19:G21,I16:I21").Interior.ColorIndex = 6 '.ClearContents
 Debug.Print Now()
 .Range("D26:F26,D29:F29,D32:F32,D34:F35,M21,M37").Interior.ColorIndex = 6 '.ClearContents
 Debug.Print Now()
End With
End Sub

と、纏めるとか。
もっと極端にすると

Sub CLR_DT2()

Debug.Print Now()
With ActiveSheet
 .Range("M2,I4:I5,M5,B8:B11,C12,E13,F12,I12,B19:B20,D16:F20,G19:G21,I16:I21,M21,D26:F26,D29:F29,D32:F32,D34:F35,M37").ClearContents
End With
Debug.Print Now()
End Sub

と、するだけでも速度は相当変わると思いますが。

>>Aブックを閉じるなり、別インスタンスのエクセルでやるなりだと
>>思うのですが。
>が、理解できる人ならかまわないのですが
>エクセル一般操作でいっぱいいっぱいの人に利用してもらうブックを作成しています

という事であれば、このくらいしか対処しようが無いのではないでしょうか?

【61710】Re:カメラ機能を使用したブックがあると...
発言  もも  - 09/5/28(木) 14:58 -

引用なし
パスワード
   ▼ON さん:

最初のコードがテスト用のままでした

Sub CLR_DT2()

Debug.Print Now()
With ActiveSheet
 .Range("M2,I4:I5,B8:B10,C12,F12,I12,S37,M5,E13").ClearContents
 Debug.Print Now()
 .Range("D16:F20,B19:B20,G19:G21,I16:I21").ClearContents
 Debug.Print Now()
 .Range("D26:F26,D29:F29,D32:F32,D34:F35,M21,M37").ClearContents
 Debug.Print Now()
End With
End Sub

【61722】Re:カメラ機能を使用したブックがあると...
お礼  ON  - 09/5/29(金) 20:56 -

引用なし
パスワード
   ▼もも さん ありがとうございます

>で、「セルへの変更がある都度」なので
>その機会を減らすという意味では

了解です
ありがとうございました

>なぜなら、Bブックが再計算される状況になれば
>Aブックも再計算されるからです。
なんですが
Private Sub Worksheet_Calculate()
は知りませんでした

>MsgBox "Aブックが再計算されました"
どうすれば出来るのかなと試してみたのですが
数式が参照しているセルに変化があった場合しか再計算しませんでした

そんなわけで、カメラで参照しているだけなので
本来は再計算はされないのでは・・・と思います


>どうもカメラ機能はリアルタイムにエクセルのバックグラウンドで処理されている感じなので、カメラ機>能の画像を貼付けたブックがあるとVBAの実行に支障が置きます。
>(数秒足らずの処理が分単位以上の処理時間になります)
あわせて
エクセルのバグか仕様みたいな気がしてきました

何かありましたらコメントよろしくお願いいたします

【61805】Re:カメラ機能を使用したブックがあると...
お礼  ON  - 09/6/5(金) 16:21 -

引用なし
パスワード
   もも さん ありがとうございました

今後もよろしくお願い致します

3502 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free