'RangeのColumnWidthとWidthの関係をテストするマクロを作成して 'みました。 'テスト結果はダイアログボックスとデバッグウィンドウに出力されます。 'もしよろしければ結果を教えて頂けると大変に嬉しいです。 'セル幅に関する基準値の取得とテストを行うマクロ '新規モジュールシートに以下のコードをコピーします。 'アクティブブックにSheet1という名前のワークシートを用意し、 'Test1マクロを実行してください。 Option Explicit Sub Test1() Dim range1 As Range Dim cellWidth As Double, columnWidth1 As Double Dim widthBase As Double, width1 As Double, width2 As Double Dim s As String 'テスト用セルの設定 Set range1 = Sheets("Sheet1").Range("A1") Application.ScreenUpdating = False 'セル幅の取得 cellWidth = range1.Width 'セル幅の基準値の取得 widthBase = GetWidthBase(range1) 'ColumnWidthが1のときのWidthを取得 width1 = ColumnWidthToWidth(range1, 1) 'ColumnWidthが2のときのWidthを取得 width2 = ColumnWidthToWidth(range1, 2) Application.ScreenUpdating = True '基準値等を使いテスト用セル範囲のColumnWidthを計算する columnWidth1 = WidthToColumnWidth2( _ cellWidth, widthBase, width1, width2) '結果文字列の作成と出力 With range1.Worksheet.Parent.Styles("標準").Font s = "標準フォント: " & .Name & " " & .Size & Chr$(10) End With s = s & "基準値: " & widthBase & Chr$(10) s = s & "ColumnWidth=1のWidth: " & width1 & Chr$(10) s = s & "ColumnWidth=2のWidth: " & width2 & Chr$(10) s = s & "計算されたColumnWidth: " & columnWidth1 & Chr$(10) s = s & "実際値との一致: " & (columnWidth1 = range1.ColumnWidth) MsgBox s Debug.Print s End Sub '試行により、セル幅の基準値を取得する関数 Function GetWidthBase(range1 As Range) As Double Dim w0 As Double, w As Double 'ColumnWidthの待避 w0 = range1.ColumnWidth '幅を0に設定 range1.ColumnWidth = 0 '増分の初期化 w = 0 Do While True '増分の設定 w = w + 0.001 'ColumnWidthの設定 range1.ColumnWidth = w '変更されたらWidthを取得して終了する If range1.ColumnWidth > 0 Then GetWidthBase = range1.Width 'ColumnWidthの復帰 range1.ColumnWidth = w0 Exit Do End If Loop End Function '試行により、ColumnWidthをWidthに変換する関数 Function ColumnWidthToWidth(range1 As Range, _ columnWidth1 As Double) As Double Dim w As Double w = range1.ColumnWidth range1.ColumnWidth = columnWidth1 ColumnWidthToWidth = range1.Width range1.ColumnWidth = w End Function 'WidthをColumnWidthに変換する関数 Function WidthToColumnWidth2(cellWidth As Double, _ widthBase As Double, width1 As Double, width2 As Double _ ) As Double Dim cellWidthCount As Integer Dim widthCount1 As Integer, widthCount2 As Integer 'セル幅を基準値の倍数に変換 cellWidthCount = Int(cellWidth / widthBase + 0.0001) '「ColumnWidthが0から1の幅」を基準値の倍数に変換 widthCount1 = Int(width1 / widthBase + 0.0001) '「ColumnWidthが1から2の幅」を基準値の倍数に変換 widthCount2 = Int((width2 - width1) / widthBase + 0.0001) If cellWidthCount <= widthCount1 Then 'ColumnWidth<=1の場合 'セル幅を「ColumnWidthが0から1の幅」で割り、小数点以下2桁で丸める WidthToColumnWidth2 = CDbl(Format((cellWidthCount / widthCount1) * 100, "0")) / 100 Else 'ColumnWidth>1の場合 'セル幅から「ColumnWidthが0から1の幅」を引いた残りを '「ColumnWidthが1から2の幅」で割り、1を加え、小数点以下2桁で丸める WidthToColumnWidth2 = CDbl(Format( _ (((cellWidthCount - widthCount1) / widthCount2) + 1) * 100, "0")) / 100 End If End Function