EXCEL2000で結合したセルの高さ自動設定がききません。
結合したセルは
・文字の配置
横位置:左詰
縦位置:上詰め
・文字の制御
折り返して全体を表示
セルを結合する
になっています。
セルを5つ結合して、その結合したセルの横幅を文字列が
越えたら次の行にいって、かつその折り返し部分が見えるように
したいんです。
結合していない単体のセルの場合は、折り返され、かつ
折り返し部分が見えるように高さが変わります。
結合したセルでの高さ自動設定はできないのでしょうか?
教えてください。よろしくお願いします。
No.1ベストアンサー
- 回答日時:
皆さんから回答がありませんね。
少し調べてみましたが、結合セルの自動調整はExcelの機能では難しいかもしれません。VBAでも結合セルに対してはAutoFitできないようです。私も「めんどくさいなァ」と思って使っていました。できなければ作ればいいという事で、下記マクロを書いてみました。行・列の結合具合に関係なく矩形選択したセルの中に全部の入力値が表示できるよう行高を調整します。
やってることは、単一セルにしてしまい、最適な行高を調べ、それを選択した行の高さに配分し再度結合を行っています。列の結合を行っている場合は、フォントの具合が微妙で、1行分余分になってしまうことがあります。現時点では回避できていません。(たまに起きます)
nmHgt = ActiveSheet.StandardHeight でシートに設定された標準の高さを使っていますが、直接数値を入れても(例えば13.5とか、そのシートの固有な高さ)いいです。
標準モジュールに貼り付けて、ツール→マクロ→マクロ→オプションでZとかのキーを割り当てると、調整したいセル範囲を選択し、Ctrl+Shift+Zキーでマクロが動きます。
参考になればと思い作って見ました。(行数を減らすためにかなりもがいています。マルチステートメントをばらしてインデントをつければ見やすくなると思います)
Public cWd() As Single '選択範囲の各列の幅
Public Sub AutoFitEx()
Dim nmHgt As Single '標準行高
nmHgt = ActiveSheet.StandardHeight '値をセットしてもいい
Dim rg As Range '選択セル範囲
Dim intHgt, fitHgt As Single '初期の行高、調整した行高
Dim mgRCt, mgCCt As Single '結合された行数、列数
Dim rCt, cCt As Integer '行・列カウンタ
Dim wkHgt, dsHgt As Single '必要な行高、計算上の行高
Application.ScreenUpdating = False
Set rg = Selection
'=== 結合解除 ===
mgRCt = rg.Rows.Count: mgCCt = rg.Columns.Count
If mgRCt > 100 Then Exit Sub '余り多数の行・列を選択したら処理しない
ReDim cWd(mgCCt)
For cCt = 1 To mgCCt '各列の幅を読み込む
cWd(cCt) = rg.Cells(1, cCt).ColumnWidth
cWd(0) = cWd(0) + cWd(cCt)
Next
rg.Select: rg.HorizontalAlignment = xlLeft: rg.VerticalAlignment = xlTop
rg.MergeCells = False
'=== 1セルに収めて必要な高さを知る ===
rg.Cells(1, 1).Select: intHgt = nmHgt
With Selection
.ColumnWidth = cWd(0): .WrapText = True: .Rows.AutoFit: fitHgt = .Height
End With
'=== 必要な高さを各行に等分する ===
If fitHgt / intHgt > mgRCt Then
For rCt = 1 To mgRCt
wkHgt = fitHgt * 100
dsHgt = (Int(wkHgt / (75 * mgRCt)) - (wkHgt Mod (75 * mgRCt) <> 0)) * 0.75
rg.Cells(rCt, 1).RowHeight = dsHgt
Next
Else
For rCt = 1 To mgRCt: rg.Cells(rCt, 1).RowHeight = nmHgt: Next
End If
'=== 列の幅を元に戻し結合する ===
For cCt = 1 To mgCCt: rg.Cells(1, cCt).ColumnWidth = cWd(cCt): Next
rg.MergeCells = True '再度結合する
Application.ScreenUpdating = True
End Sub
回答ありがとうございます。お礼が遅れまして申し訳ありません。
マクロは「新しいマクロの記録」でしか作ったことないので
上記のコードはほとんどわかりませんが、説明のとおりにしたところ
やれました。
「回答がないなあ」とあきらめていたのでほんとうに助かりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/12/26 12:05
- Excel(エクセル) Excel VBAで、行の高さを、上下1文字分程度高くしたい 3 2023/04/23 00:17
- Excel(エクセル) エクセルでA列セル内で折り返すことなく、文字列を、B列C列・・・側に一行に 2 2022/07/23 02:02
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/01/06 08:39
- Excel(エクセル) office16 のクイックアクセスツールバーの設定 3 2023/01/10 14:02
- Excel(エクセル) エクセル セル内の文字数を超えたら自動的に折り返して表示 2 2023/07/24 05:32
- Excel(エクセル) エクセルの数式で教えてください。 5 2023/02/10 15:11
- Excel(エクセル) エクセル VBA セルの結合 2 2022/09/07 11:48
- Excel(エクセル) エクセルの数式について教えてください。 7 2023/06/18 10:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
セル内の一部の文字だけをハイ...
-
セルは大きくさせず、中の文字...
-
エクセルファイルに _x000D_ と...
-
マウスポインターが白十字のまま
-
エクセルで画像を透過させて画...
-
セルを結合しても、文字をセル...
-
エクセルの白黒の反転で困って...
-
エクセル2013で英単語を折り返...
-
エクセルで1つのセルにスクロ...
-
エクセルのIF関数で、文字が...
-
エクセルのカメラがずれる
-
Excelでcsvやtxtで保存する時に...
-
エクセルでセルを上下に結合し...
-
エクセルの2つのセルを内容も消...
-
Excel 隣のセルに文字を表示さ...
-
セルの大きさを個別に変更したい。
-
Excel入力で勝手にエンター押さ...
-
エクセルで半角漢字
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
セル内の一部の文字だけをハイ...
-
エクセルの白黒の反転で困って...
-
セルは大きくさせず、中の文字...
-
マウスポインターが白十字のまま
-
エクセルファイルに _x000D_ と...
-
Excelでcsvやtxtで保存する時に...
-
エクセルで画像を透過させて画...
-
エクセルで1つのセルにスクロ...
-
エクセルでセルを上下に結合し...
-
エクセルの2つのセルを内容も消...
-
セルを結合しても、文字をセル...
-
エクセルで特定の列のセルだけ...
-
エクセルの入力規則プルダウン...
-
VBA:結合されたセルに対する「...
-
エクセルで右隣のセルより優先...
-
Excel入力で勝手にエンター押さ...
-
エクセル 折り返して全体を表...
-
エクセル2013で英単語を折り返...
おすすめ情報