Excel VBA質問箱 IV

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

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


4736 / 13644 ツリー ←次へ | 前へ→

【54816】結合セルの行の高さ りった 08/3/31(月) 14:11 質問[未読]
【54819】Re:結合セルの行の高さ n 08/3/31(月) 15:35 発言[未読]
【54820】Re:結合セルの行の高さ VBWASURETA 08/3/31(月) 16:11 発言[未読]
【54821】Re:結合セルの行の高さ りった 08/3/31(月) 17:24 お礼[未読]
【54822】Re:結合セルの行の高さ n 08/3/31(月) 18:05 発言[未読]
【54824】Re:結合セルの行の高さ りった 08/3/31(月) 18:30 お礼[未読]

【54816】結合セルの行の高さ
質問  りった  - 08/3/31(月) 14:11 -

引用なし
パスワード
   いつもお世話になっております。

結合セルが有る場合、AutoFitでは行の高さが正しく設定されません。
結合セルが有る場合の行の高さの自動設定方法をご教示下さい。

結合セル使いたくは無いのですが、自分で変えれないフォーマットに有るので...

【54819】Re:結合セルの行の高さ
発言  n  - 08/3/31(月) 15:35 -

引用なし
パスワード
   こんにちは。
結合セル範囲が限定されている場合は、比較的簡単なのですが...

例えば、A1:C10の範囲で、1行×3列の3セルずつ結合している場合、
Sub try()
  Dim n As Single
  Dim x As Single
  Dim i As Long
  
  ActiveSheet.DisplayAutomaticPageBreaks = False
  With Range("A1:C10")
    n = .Item(1).ColumnWidth
    x = n
    For i = 2 To 3
      x = x + .Item(i).ColumnWidth
    Next i
    .UnMerge
    .Item(1).ColumnWidth = x
    .EntireRow.AutoFit
    .Merge across:=True
    .Item(1).ColumnWidth = n
  End With
End Sub

こんな感じになります。

考え方としては、
1)A1セル幅を変数 n に記憶。
2)結合範囲であるA1:C1までの幅をそれぞれ足していき変数 x に記憶。
3)いったん、結合解除。
4)A1セル幅を記憶しておいた x まで広げる。(結合セル幅にする)
5)AutoFit。
6)再び横方向結合。
7)A1セル幅を記憶しておいた n に戻す。

結合セル範囲が複雑に混在している場合、工夫すればできそうですが、
面倒そうなので、あまり考えたくないです。

【54820】Re:結合セルの行の高さ
発言  VBWASURETA  - 08/3/31(月) 16:11 -

引用なし
パスワード
   こんにちは。

もしかすると前の質問のコピーシートでしょうか?
それでしたら連続的に結合していなかった気がします。
そうなると結合された部分でするしかないと思います。

後、改行で何行かの文字列にされているのでしたら算出で、

式例:
改行数*1文字表示に必要な高さ/セル縦結合数=1行辺り必要な高さ
※但し1行の文字列が折り返して表示していない状態のものとしての式です。

を割り出すしかないような気がします。

【54821】Re:結合セルの行の高さ
お礼  りった  - 08/3/31(月) 17:24 -

引用なし
パスワード
   回答有難う御座います。

結合セル範囲が複雑に混在しています。
大変そうなのでしばらく現状どおり手作業で粘って、暇が出来たらやってみます。

【54822】Re:結合セルの行の高さ
発言  n  - 08/3/31(月) 18:05 -

引用なし
パスワード
   >現状どおり手作業で粘って
...と比較するなら、
"dummy" という名前のシートを用意。
結合セルをActiveにし、下記実行。
ショートカットキーに登録したりすると、ちょっとはラクかも。

Sub try()
  Dim r As Range
  Dim x As Single
  Dim i As Long
  
  Set r = ActiveCell.MergeArea
  For i = 1 To r.Columns.Count
    x = x + r.Columns(i).ColumnWidth
  Next
  With Sheets("dummy").Range("A1")
    With .Font
      .Name = r.Item(1).Font.Name
      .Bold = r.Item(1).Font.Bold
      .Size = r.Item(1).Font.Size
    End With
    .WrapText = True
    .Value = r.Item(1).Value
    .ColumnWidth = x
    .EntireRow.AutoFit
    r.RowHeight = .RowHeight / r.Rows.Count
  End With
  
  Set r = Nothing
End Sub
(フォントによってはうまくいかないケースもあるかも...)

【54824】Re:結合セルの行の高さ
お礼  りった  - 08/3/31(月) 18:30 -

引用なし
パスワード
   回答有難う御座います。
ブックが多いのでdummyシートを追加するのが大変ですが、その対策は自分でも出来ますので、ご提示頂いたコードを変更して使用させて頂きます。

有難う御座いました。

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