dポイントプレゼントキャンペーン実施中!

選択した列が AutoFit していたら列幅を8に。
選択した列が AutoFit していなかったら AutoFit 実行。
というコードがうまくいきません。
ほんとのド素人で何もわかっていませんのでよろしくお願いします。

Private Sub CommandButton3_Click()

ActiveCell.EntireColumn.Select

With Selection

If .EntireColumn.AutoFit = True Then

Selection.ColumnWidth = 8

Else

.EntireColumn.AutoFit = True

End If

End With

End Sub

質問者からの補足コメント

  • If .EntireColumn.AutoFit = True Then

    Selection.ColumnWidth = 8

    は実行されるのですが、

    Else

    .EntireColumn.AutoFit = True

    が実行されません。

      補足日時:2022/02/02 23:27
  • ステップインで検証すると、

    .EntireColumn.AutoFit = True

    ではない(Selection.ColumnWidth = 8 です)のに、
    Else に移行せず、

    Selection.ColumnWidth = 8

    を実行してしまいます。

      補足日時:2022/02/02 23:30

A 回答 (3件)

No.1の者です。



最初に、幅を数字として取得し変数へ保管、その後、AutoFitを実行。
変数と、AutoFit後の数字を比較。
同じなら、AutoFitされていた状態。 → 幅を8へ
違うなら、AutoFitを実行

あと、
最初の状態が、AutoFit → 8
最初の状態が、8 → AutoFit
最初の状態が、上記以外 → ???


Dim myColmWidth As Double

With ActiveCell
myColmWidth = .ColumnWidth
.EntireColumn.AutoFit
If myColmWidth = .ColumnWidth Then
.ColumnWidth = 8
Else
'8でもAutoFitでもない場合は、どうする?
.ColumnWidth = myColmWidth '元に戻しています。
End If
End With
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>最初に、幅を数字として取得し変数へ保管、その後、AutoFitを実行。
変数と、AutoFit後の数字を比較。
同じなら、AutoFitされていた状態。 → 幅を8へ
違うなら、AutoFitを実行

この発想が 天才的!! と思いましたよ。^^
下記のようにさせていただいたところ上手くいきました~。\(^^)/
本当にありがとうございました。m(_ _)m


Private Sub CommandButton3_Click()

Dim myColmWidth As Double

With ActiveCell
myColmWidth = .ColumnWidth
.EntireColumn.AutoFit

If myColmWidth = .ColumnWidth Then
.ColumnWidth = 8
End If

End With

End Sub

お礼日時:2022/02/03 00:23

No.1の者です。



幅が8ならAutoFit、それ以外なら8にしています。

With ActiveCell
If .ColumnWidth = 8 Then
.EntireColumn.AutoFit
Else
.ColumnWidth = 8
End If
End With
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
何度もお手数おかけしました。

お礼日時:2022/02/03 00:34

こんばんは。



たぶんですが、EntireColumn.AutoFitって、実行する事はできますが、
今の状態がフィットしているかは、分からないかと。

複数列の処理している様ですが、全ての列をAutoFit又は、8にするという事
でしょうか? 選択した範囲が全て同じになっている?

何回か実施すると、8又は、AutoFitのどちらかになると思うのですが、
8だったらAutoFit、8以外だったら8にするとかは、ダメでしょうか?
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

>今の状態がフィットしているかは、分からないかと。

そうなんですか。

If .EntireColumn.AutoFit = True Then

Selection.ColumnWidth = 8

までは一応実行されるようなんですが、よくわかりません。

>全ての列をAutoFit又は、8にするという事
でしょうか? 

いえ、複数列にデータを入れていますが、そのうちの一列だけを選択してコードを実行させたいです。

>8だったらAutoFit、8以外だったら8にするとかは、ダメでしょうか?

なるほど。
ただ幅を変える可能性もあるので、できればAutoFitの有無で分岐させられればと。

お礼日時:2022/02/02 23:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!