こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel VBA AutoFit の制約について

お世話になります。

Excel2010(Windows7) VBA にて、セル幅が自動調整
されず表示が「###」のままの場合があるのですが、
Cells.Select: Cells.EntireColumn.AutoFit
実行において何か成約事項等ございますでしょうか?
また、次のコードを使用した場合も、自動調整されない
場合もありました(殆どは自動調整されるのですが)。
その際は(記憶が曖昧ですが)「.EnableEvents = False」
をコメントアウトすると自動調整されました。
同一Bookの中でも、ルーチンによって動きが異なります。

With Application
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual
End With
・・・
Cells.Select
Cells.EntireColumn.AutoFit
・・・
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic
End With

情報不足で申し訳ございませんが
よろしくお願い申し上げます。

投稿日時 - 2018-01-14 21:23:08

QNo.9418431

すぐに回答ほしいです

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

.Calculation = xlCalculationManual が実行され、
その後、課題列の課題セルに、必要な列幅が大きくなるような値が埋まり、
再計算されないまま、
.Cells.EntireColumn.AutoFit が実行され、
その後、
.Calculation = xlCalculationAutomatic
によって、再計算される。

つまり、
.Cells.EntireColumn.AutoFit が実行されるときに
まだ、セルに期待値が埋まっていない可能性です。

もし、その不安があるのであれば
私なら、

 With ThisWorkbook.Sheets(1)
  Application.Calculate
  .Cells.EntireColumn.AutoFit
 End With

とします。

投稿日時 - 2018-01-15 13:05:07

お礼

重ねてのご回答ありがとうございます。
動作につきましても良く分かりました。
ありがとうございました。

投稿日時 - 2018-01-16 12:37:51

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

Cells.Select
Cells.EntireColumn.AutoFit

このような記述をした場合、
Activeなシートが対象になります。
例えば、このコードが実行されるときに
期待とは異なるシートがActiveになっていることはありませんでしょうか。

私だったら、次のコードで、明示的にシートを指定します。
 With ThisWorkbook.Sheets(1)
  .Cells.EntireColumn.AutoFit
 End With

また、このような記述のほうが、後々、
コードが読みやすいハズです。

投稿日時 - 2018-01-15 09:21:38

補足

.Calculation = xlCalculationManual
が影響するのでしょうか?
(何ともない場合も有り分かりかねています・・・)

投稿日時 - 2018-01-15 13:04:25

お礼

早々のご回答ありがとうございました。

事前に、別ルーチンで
.Calculation = xlCalculationManual
実施後
 With ThisWorkbook.Sheets(1)
  .Cells.EntireColumn.AutoFit
 End With
事後に、別ルーチンで
.Calculation = xlCalculationAutomatic
があると、
セル幅が自動調整されず表示が「###」のままでした。
「.Calculation =」をコメントにすると OK でした。

投稿日時 - 2018-01-15 11:13:54

あなたにオススメの質問