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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
エクセルファイルに _x000D_ と...
-
Excelでcsvやtxtで保存する時に...
-
セル内の一部の文字だけをハイ...
-
エクセルの入力規則プルダウン...
-
Excel入力で勝手にエンター押さ...
-
エクセル2013で英単語を折り返...
-
マウスポインターが白十字のまま
-
エクセルで1つのセルにスクロ...
-
セルは大きくさせず、中の文字...
-
エクセルでセルを上下に結合し...
-
エクセルの白黒の反転で困って...
-
エクセル 折り返して全体を表...
-
エクセルで特定の列のセルだけ...
-
エクセルでカーソルが合わない
-
CSVファイルでテキストの改行の...
-
セルを結合して中央揃えを行う...
-
Excel Vbaを使って 結合セルを...
-
セルを結合しても、文字をセル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル: セルの枠を超えて表示
-
Excel countif関数で取り消し線...
-
セル内の一部の文字だけをハイ...
-
エクセルで1つのセルにスクロ...
-
エクセルファイルに _x000D_ と...
-
Excelでcsvやtxtで保存する時に...
-
マウスポインターが白十字のまま
-
エクセルの白黒の反転で困って...
-
セルを結合しても、文字をセル...
-
セルは大きくさせず、中の文字...
-
エクセルでセルを上下に結合し...
-
エクセルで画像を透過させて画...
-
エクセル2013で英単語を折り返...
-
エクセルで右隣のセルより優先...
-
Excel入力で勝手にエンター押さ...
-
エクセルの入力規則プルダウン...
-
VBA:結合されたセルに対する「...
-
エクセル 折り返して全体を表...
-
Excel 隣のセルに文字を表示さ...
-
エクセルのセル外改行は可能で...
おすすめ情報