Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows XP全般 : Excel 2003)
Rows.AutoFitについて
投稿日時: 20/05/14 08:55:58
投稿者: 富山の初心者

お願いします。
下記コーディングを実行すると、

Sub Macro1()
    Range("B2:C3").Columns.AutoFit
    Range("B2:C3").Rows.AutoFit
End Sub
結果として、列幅は"B2:C3"の最大幅に調整され、B1,C1に依存しません。
想定どおりの結果となりました。
しかし、
行高さが"B2:C3"の最大高さではなく、A2,A3の高さに調整されました。
どこかまちがっているのでしょうか?
という、質問です。
 
ちなみに、Win10/excel2010でも、同様にうまくいきませんでした。
 

回答
投稿日時: 20/05/14 11:19:50
投稿者: WinArrow
投稿者のウェブサイトに移動

列、行の全体を対象とする場合は、
  
 (1)方法1
Columns("B:C").Autofit
 Rows("2:3").Autofit
   
 (2)方法2
Range("B2:C3").EntireColumn.Autofit
 Range("B2:C3").EntireRow.Autofit

投稿日時: 20/05/14 12:43:57
投稿者: 富山の初心者

WinArrow様 有難うございます。
 
今回は「列、行の全体を対象とする場合」ではなく、
"B2:C3"のみを対象としたいのです。
 
質問があいまいですみません。
 
再度、皆様の回答をお待ちします。

回答
投稿日時: 20/05/14 13:52:28
投稿者: WinArrow
投稿者のウェブサイトに移動

富山の初心者 さんの引用:
WinArrow様 有難うございます。
 
今回は「列、行の全体を対象とする場合」ではなく、
"B2:C3"のみを対象としたいのです。
 
質問があいまいですみません。
 
再度、皆様の回答をお待ちします。

 
すみません
読み違えていました。
 
全体としては、A2:A3の行高の方が大きいですよね?
B2:C3の行高の大きい方に合わせたいということでしょうか?
 

投稿日時: 20/05/14 17:07:01
投稿者: 富山の初心者

WinArrow 様 ありがとうございます。
 

引用:
全体としては、A2:A3の行高の方が大きいですよね?
B2:C3の行高の大きい方に合わせたいということでしょうか?

その通りです。

回答
投稿日時: 20/05/14 17:36:47
投稿者: WinArrow
投稿者のウェブサイトに移動

↓こんな感じでいかがでしょうか?
  
Dim RHEIGHT As Single
   
     RHEIGHT = WorksheetFunction.Max(Range("B2").RowHeight, Range("B3").RowHeight)
     Rows("2:3").RowHeight = RHEIGHT
 
でもよく考えると2行目A列の行高とB列の行高が違うっておかしくない?
 
B列セルの文字サイズに行高を合わせたい
というのが本音なのかな?
 
 

回答
投稿日時: 20/05/14 17:49:21
投稿者: WinArrow
投稿者のウェブサイトに移動

作業シートを使用する方法です。
 
Dim RHEIGHT As Single
Dim mySHT As Worksheet, wkSHT As Worksheet
     
    Set mySHT = Sheets(1)
    Worksheets.Add after:=Sheets(Sheets.Count)
    Set wkSHT = ActiveSheet
     
    mySHT.Range("B2:C3").Copy Destination:=wkSHT.Range("B2:C3")
     
    With wkSHT
        RHEIGHT = WorksheetFunction.Max(.Range("B2").RowHeight, .Range("B3").RowHeight)
    End With
    mySHT.Rows("2:3").RowHeight = RHEIGHT
    Application.DisplayAlerts = False
    wkSHT.Delete
    Set wkSHT = Nothing
    Application.DisplayAlerts = True

投稿日時: 20/05/14 18:44:42
投稿者: 富山の初心者

WinArrow 様ありがとうございます。
 
WinArrow 様のコーディングを確認せずに、
追記をすることを、おゆるしください。
 
実例を示した方がよさそうなので、実例を示します。
 
A2/A3/B1/C1に48ポイント文字AAAを
B2/C2/B3/C3に24ポイント文字Aを入力

Sub Macro1()
    Range("B2:C3").Columns.AutoFit
    Range("B2:C3").Rows.AutoFit
End Sub
を実行すると、
B列/C列は24ポイント1文字分の幅になります。これはOKです。
問題は、
2行目/3行目が
24ポイント分の高さではなく、
48ポイント分の高さになることです。
 
希望としては、Range("B2:C3")を選択してRows.AutoFitしているわけですので、
24ポイント分の高さになってほしいのです。
 
WinArrow 様のコーディングは後日確認してみます。
 
再度、皆様の回答をお待ちします。

回答
投稿日時: 20/05/15 07:51:10
投稿者: WinArrow
投稿者のウェブサイトに移動

行高が異なることを想定したコードの方がよいかも?
 
Sub test()
Dim Rowx As Long, CellADD As String
Dim mySHT As Worksheet, wkSHT As Worksheet
       
    Set mySHT = Sheets(1)
    CellADD = "B2:C3"
' CellADD = mySHT.Range("B2:C3").Address
    Worksheets.Add after:=Sheets(Sheets.Count)
    Set wkSHT = ActiveSheet
    mySHT.Range(CellADD).Copy Destination:=wkSHT.Range(CellADD)
       
    With wkSHT
       .Range(CellADD).EntireRow.AutoFit
       For Rowx = .Range(CellADD).Row To .Range(CellADD).Row + .Range(CellADD).Rows.Count - 1
           mySHT.Rows(Rowx).RowHeight = .Rows(Rowx).RowHeight
       Next
    End With
    Application.DisplayAlerts = False
    wkSHT.Delete
    Set wkSHT = Nothing
    Application.DisplayAlerts = True
End Sub

投稿日時: 20/05/18 12:36:04
投稿者: 富山の初心者

Range("B2:C3").Rows.AutoFitは小生の想定通りの動作はしないということですね。
Excelの仕様なのかも?。
 
WinArrow 様の20/05/15 07:51:10 投稿の方法でやってみて
想定通りの動作となりまし。
ので、解決とさせていただきます。
 
ありがとうございました。