Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7591 / 13646 ツリー ←次へ | 前へ→

【38051】結合した折り返し設定のセルの高さを自動設定したい mog 06/5/25(木) 14:49 質問[未読]
【38086】Re:結合した折り返し設定のセルの高さを自... ichinose 06/5/26(金) 9:36 発言[未読]
【38104】Re:結合した折り返し設定のセルの高さを自... mog 06/5/26(金) 14:29 お礼[未読]

【38051】結合した折り返し設定のセルの高さを自動...
質問  mog  - 06/5/25(木) 14:49 -

引用なし
パスワード
   ちょっと色々調べたところできない気もするのですが、
最後の望みで質問させてください;;

Excelは結合したセルで、「折り返して全体を表示する」設定にしていると、
中の文字がはみ出たり、中で改行してセル内に内容が収まらない場合など、
自動的にセルのサイズを変更してくれませんよね?>仕様?
もちろん、行の高さの自動設定(ダブルクリック)をしても、
全体が表示されるような適切なサイズになりません。


そこで、これをVBAを使ってうまくできないかな、と思っています。
また、最低1行の内容であっても2行の高さにする、という仕様にしたいのです。
(こちらは前者ができればできそうですが・・・)


なにか、「セル内の文字列の行数を取得する」など、うまい方法はありますでしょうか?

# 検索したところ、文字列内の改行をカウントする、という手法はあったのですが、
# それだと「セルからはみ出た場合」に対応できませんよね・・・?

【38086】Re:結合した折り返し設定のセルの高さを...
発言  ichinose  - 06/5/26(金) 9:36 -

引用なし
パスワード
   ▼mog さん:
おはようございます。


アクティブなシートに対しての例です。

このシートの右隣に作業する真っ白なシートを用意してください。

標準モジュールに

'===================================================
Sub test()
  Call set_scale(Range("a1")) 'パラメーターに指定したセルが結合セルの
'                 先頭せるで実際に高さ調節を行いたいセルです。
End Sub
'====================================================
Sub set_scale(rng As Range, Optional sht As Worksheet = Nothing)
  Dim tmprng As Range
  On Error Resume Next
  Set tmprng = rng.MergeArea
  If Err.Number <> 0 Then
    Set tmprng = rng
    End If
  With tmprng
    If sht Is Nothing Then
     Set sht = .Parent.Next
     End If
    wk = .ColumnWidth * (.Columns.Count)
    sht.Range("a1").ColumnWidth = wk
    sht.Range("a1").ColumnWidth = wk + (.Width - sht.Range("a1").Width) * (sht.Range("a1").ColumnWidth) / sht.Range("a1").Width
    sht.Range("a1").HorizontalAlignment = .HorizontalAlignment
    sht.Range("a1").VerticalAlignment = .VerticalAlignment
    sht.Range("a1").WrapText = True
    sht.Range("a1").Value = .Value
    .RowHeight = sht.Range("a1").RowHeight / .Rows.Count
    sht.Range("a1").Clear
    End With
End Sub

簡単な説明で申し訳ないですが、試してみてください。
即興作成なので穴はあるかもしれませんが、
考え方は、作業シートに
結合セルではなく、単一セルで高さ調整を行いたい対象結合セルと
同じ列幅に設定し、結合セルの内容をここに流し込みます。
単一セルですから、列の高さは自動設定されますから、
その高さを元の結合セルに設定するという方法です。

試してみてください。

【38104】Re:結合した折り返し設定のセルの高さを...
お礼  mog  - 06/5/26(金) 14:29 -

引用なし
パスワード
   ▼ichinose さん:

ochinoseさん、ありがとうございました!!
すごいですね 少し改造して無事解決しました!!

「計算でダメならコピーして計ってしまえ」って考えですね 笑
正確にはフォントサイズなどのコピーを必要でしたが、
ほぼこのソースでいけました!!新しい発想で楽しかったです。

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

>▼mog さん:
>おはようございます。
>
>
>アクティブなシートに対しての例です。
>
>このシートの右隣に作業する真っ白なシートを用意してください。
>
>標準モジュールに
>
>'===================================================
>Sub test()
>  Call set_scale(Range("a1")) 'パラメーターに指定したセルが結合セルの
>'                 先頭せるで実際に高さ調節を行いたいセルです。
>End Sub
>'====================================================
>Sub set_scale(rng As Range, Optional sht As Worksheet = Nothing)
>  Dim tmprng As Range
>  On Error Resume Next
>  Set tmprng = rng.MergeArea
>  If Err.Number <> 0 Then
>    Set tmprng = rng
>    End If
>  With tmprng
>    If sht Is Nothing Then
>     Set sht = .Parent.Next
>     End If
>    wk = .ColumnWidth * (.Columns.Count)
>    sht.Range("a1").ColumnWidth = wk
>    sht.Range("a1").ColumnWidth = wk + (.Width - sht.Range("a1").Width) * (sht.Range("a1").ColumnWidth) / sht.Range("a1").Width
>    sht.Range("a1").HorizontalAlignment = .HorizontalAlignment
>    sht.Range("a1").VerticalAlignment = .VerticalAlignment
>    sht.Range("a1").WrapText = True
>    sht.Range("a1").Value = .Value
>    .RowHeight = sht.Range("a1").RowHeight / .Rows.Count
>    sht.Range("a1").Clear
>    End With
>End Sub
>
>簡単な説明で申し訳ないですが、試してみてください。
>即興作成なので穴はあるかもしれませんが、
>考え方は、作業シートに
>結合セルではなく、単一セルで高さ調整を行いたい対象結合セルと
>同じ列幅に設定し、結合セルの内容をここに流し込みます。
>単一セルですから、列の高さは自動設定されますから、
>その高さを元の結合セルに設定するという方法です。
>
>試してみてください。

7591 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free