• ベストアンサー

エクセル「折り返して全体を表示」での折り返しの行数取得方法

エクセル2000のVBAで質問します。 A1セルにVLOOKUP関数で文字列が表示されます。 セルの書式設定で「折り返して全体を表示する」にした場合、セル内で折り返されて全部で何行になっているのかを取得する方法はありますか?(VBAでも関数でも) 現在、セルの高さを3行分とっているのですが、関数で表示される文字列の長さによっては3行でおさまらない場合があり、何行になるかがわかれば行数に応じてフォントサイズを変更し、縮小して全体を表示させようと思っています。 当初、セルからはみ出るかどうかがわかれば出来るかと思い、 Sub test01() With Worksheets("Sheet1").Range("A1") h = .Height .Value = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" .WrapText = True .EntireRow.AutoFit h2 = .Height .EntireRow.RowHeight = h End With If h2 > h Then MsgBox "はみ出しちゃった!", , " \(≧▽≦)丿" End If End Sub というマクロを書いてみたのですが、行数がわからないと縮小する割合が求められないので質問いたしました。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

こんにちは。 最初は、"dummy"シートを使って行高を取得してあげれば、と考えて Sub try()   Dim hs(1 To 10) As Single '10行分   Dim h As Single   Dim h2 As Single   Dim r As Range   Dim i As Long   Dim x   On Error GoTo errHndlr   Set r = Worksheets("Sheet1").Range("A1")   With Sheets("dummy").Range("A1") '■"dummy"シートを用意     With .Font       .Name = r.Font.Name       .Size = r.Font.Size     End With     .ClearContents     .EntireRow.AutoFit     hs(1) = .RowHeight     .WrapText = True     For i = 1 To 9       .Value = String(i, vbLf)       .EntireRow.AutoFit       hs(i + 1) = .RowHeight     Next     .ClearContents     .RowHeight = hs(1)   End With   With r     h = .RowHeight     .Value = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"     .WrapText = True     .EntireRow.AutoFit     h2 = .RowHeight     .RowHeight = h   End With   x = Application.Match(h2, hs)   If h2 <> hs(x) Then x = x + 1 errHndlr:   Set r = Nothing   MsgBox CStr(x) End Sub ...なんてしたり、 Justifyメソッドを使って必要行数を出したりしてみましたけど、 最大行高が決まっているのなら、行数は必要なく、 Sub try2()   Const h As Single = 36   Dim i  As Long   With ActiveCell     .WrapText = True     For i = .Font.Size To 2 Step -1       .EntireRow.AutoFit       If .RowHeight <= h Then Exit For       .Font.Size = i - 1     Next     .RowHeight = h   End With End Sub これでいいのでは。

merlionXX
質問者

お礼

Sub try2 最高です \(*^▽^*)/ 行高は固定ですから何も計算で縮小率を求めなくともAutoFitした結果が行高以下になるまでFont.Sizeを下げていけばいいわけですね。 ありがとうございました!

その他の回答 (1)

  • keirika
  • ベストアンサー率42% (279/658)
回答No.1

回答にならないかも知れませんが・・・・ 改行の数ではなく、文字数で縮小率を決めてはどうでしょうか。

merlionXX
質問者

お礼

わたしも最初は文字数で行こうかと考えたのですが、文字列が日本語と英文が入り混じって全角も半角もあるため、断念しました。 ありがとうございました。

関連するQ&A