アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセル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

というマクロを書いてみたのですが、行数がわからないと縮小する割合が求められないので質問いたしました。

A 回答 (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

これでいいのでは。
    • good
    • 1
この回答へのお礼

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

ありがとうございました!

お礼日時:2008/06/25 18:07

回答にならないかも知れませんが・・・・



改行の数ではなく、文字数で縮小率を決めてはどうでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/06/25 18:11

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A