EXCEL2000で結合したセルの高さ自動設定がききません。

結合したセルは
・文字の配置
横位置:左詰
縦位置:上詰め
・文字の制御
折り返して全体を表示
セルを結合する
になっています。

セルを5つ結合して、その結合したセルの横幅を文字列が
越えたら次の行にいって、かつその折り返し部分が見えるように
したいんです。
結合していない単体のセルの場合は、折り返され、かつ
折り返し部分が見えるように高さが変わります。

結合したセルでの高さ自動設定はできないのでしょうか?
教えてください。よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (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
    • good
    • 2
この回答へのお礼

回答ありがとうございます。お礼が遅れまして申し訳ありません。
マクロは「新しいマクロの記録」でしか作ったことないので
上記のコードはほとんどわかりませんが、説明のとおりにしたところ
やれました。
「回答がないなあ」とあきらめていたのでほんとうに助かりました。
ありがとうございました。

お礼日時:2001/06/11 12:02

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qセルを右詰にする(セル内の右詰でなく)

WinXP EXCEL2003です。

(テキストの空白などでうまく表現できないようでしたら添付ファイルのAとBをご覧ください。)

添付Aのように入力されているデータがあったとしますと

空白の部分を詰めて、右に詰めたいとき。求める結果→添付B



どのような処理をすればよいでしょうか?

空白部分を●●●などの記号に置換してテキストエディタ(秀丸など)で正規表現を利用して置換する・・・などトライしてみたのですが、うまくいきません。

できればEXCEL上で完結したいです。宜しくお願いします!!

Aベストアンサー

例えばF1のセルに
=IF(ISERROR(CHOOSE(COLUMN(A1)-COUNTIF($A1:$E1,""),$A1,$B1,$C1,$D1,$E1))=TRUE,"",CHOOSE(COLUMN(A1)-COUNTIF($A1:$E1,""),$A1,$B1,$C1,$D1,$E1))
との数式を入れ、横にコピーすれば、例の感じにはなりそうですね。
けど、シンプルじゃないですけどね。

Qセルの高さを「指定したセルの高さ×セル内の行数」に自動で修正する方法について

エクセル2010を使っている者ですが、セルの高さの設定のことで伺います。

「ホーム」タブ→「セル」のリボン→書式で、セルの高さを指定することができますが、そこで指定すると、1行で入力されたセルのみでなくセル内で行の折り返しがあって複数行になっているセルについても、指定したとおりの高さになってしまいます。(例えば、高さを14にすると、1行で入力されたセルのみでなく2行で入力されたセルについても高さが14になってしまい、入力した値が表示されなくなってしまう)

セルの高さを指定しつつ、複数行になったセルについては「指定したセルの高さ×セル内の行数(正確には、そのセルの所属する行中の最大行になったセルの行数)」に自動で修正されるようにする方法はありますか?

Aベストアンサー

こんにちは。

おそらくは、マクロでよろしいかとは思いますが、「自動で修正される」というように設定してしまうと、私なら、うっとうしく感じますが、こういう感覚は、人それぞれですから言明はしません。

実際に、私が使う目的でマクロを考えてみました。

「個人用マクロブック(PERSONAL.XLSB)」
「標準モジュール」にマクロを置き、
「クイックアクセスツールバー」に登録。
(私は、ショートカットにはしません。たぶん、忘れてしまうからです)

なぜ、「個人用マクロブック」に登録するかというと、2点の利点があります。

ひとつは、保存する拡張子の影響がない(xlsx/xlsm)。もう一つは、クイックアクセスツールとして、いつでも使える。

なお、十分に納得のいかない内容でしたら、以下のマクロは個人用マクロブックにはいれるべきではありません。
今回は、特別に、マクロに内容説明を入れましたので、それを読めば、何をしようとしているか分かるはずです。
ふつうは、このような解説を入れませんから、納得がいけば解説部分は消してよいです。

'//
Sub Lines_CellHeight()  'この名前は、臨時ですから、適当に変えてください。(日本語名可)
'No. 9043589
 Dim c As Range
 Dim i As Long
 Dim h As Double
 Dim stdHt As Double
 Dim ht As Double
 If TypeName(Selection) <> "Range" Then  'マウスで選択した場所が、セルの範囲でないなら、
  MsgBox "該当範囲を選択してください。", vbExclamation  'メッセージを出して、
  Exit Sub  'マクロは終わる
 End If
 stdHt = ActiveSheet.StandardHeight  '標準のセルの高さ
 For Each c In Selection  '選択範囲からひとつのセルを検討する
  If c.HasFormula = False And Not IsEmpty(c) Then  'セルは数式がないことと、空ではないなら、
   i = Len(c.Value) - Len(Replace(c.Value, vbLf, ""))  'セル内の改行コードの数
   If i > 0 Then  '一つでもあれば、
    ht = c.Rows.RowHeight  'セルの行の高さ
    If stdHt * (i + 1) > ht Then  'セルの高さよりも、標準のセルの高さ✕(改行コード数+1)が高ければ、
     c.FormatConditions.WrapText = False  '書式の折り返して全体を表示する、Offにし
     c.EntireRow.RowHeight = ht * (i + 1)  'セルの高さ✕(改行コード数+1) の高さにする
    End If
   End If
  End If
 Next c
End Sub

こんにちは。

おそらくは、マクロでよろしいかとは思いますが、「自動で修正される」というように設定してしまうと、私なら、うっとうしく感じますが、こういう感覚は、人それぞれですから言明はしません。

実際に、私が使う目的でマクロを考えてみました。

「個人用マクロブック(PERSONAL.XLSB)」
「標準モジュール」にマクロを置き、
「クイックアクセスツールバー」に登録。
(私は、ショートカットにはしません。たぶん、忘れてしまうからです)

なぜ、「個人用マクロブック」に登録するかというと、2点の...続きを読む

Q結合セル内の値を、結合解除後に結合されていた全てのセルへコピーする方法

結合セル内の値を、結合解除後に結合されていた全てのセルへコピーする方法

例えば、A1~A5、A6~A10がそれぞれ結合されており、【あ】【い】という文字が
それぞれ入力されているとします。
各結合セルを解除後、各結合セルを構成していたセルにそれぞれの文字をコピーして、
A1~A5には【あ】
A6~A10には【い】という文字が入るようにしたいと思っているのですが、
実践している下記の方法だと、セル数が多いせいか時間がかかってしまいます。

(1)結合セルを全て解除
(2)For Next if文で1行目から順にセルを見て、何も入力されていなければ、
 直上のセルに入っている文字をコピーする。

そこで、下記のような方法で高速化できないか考えたのですが、記述がわかりません。
ご教授頂けますでしょうか。
または、他に高速化できる方法がありましたらお教え頂けますと幸いです。

(1)上から順に結合セルを探す。
(2)結合セルに当たったら、結合セルを構成する先頭セルと末尾セルのアドレスを変数に記憶
(3)該当の結合セルを解除
(4)記憶したら先頭セルの内容を、先頭セル直下~末尾セルまでにコピー
(5)末尾セルの直下から、(1)~(4)を繰り返す。

どうぞ、よろしくお願いいたします。

結合セル内の値を、結合解除後に結合されていた全てのセルへコピーする方法

例えば、A1~A5、A6~A10がそれぞれ結合されており、【あ】【い】という文字が
それぞれ入力されているとします。
各結合セルを解除後、各結合セルを構成していたセルにそれぞれの文字をコピーして、
A1~A5には【あ】
A6~A10には【い】という文字が入るようにしたいと思っているのですが、
実践している下記の方法だと、セル数が多いせいか時間がかかってしまいます。

(1)結合セルを全て解除
(2)For Next if文で1行目から順にセルを...続きを読む

Aベストアンサー

使用範囲が少なければ、時間はそれほどかからないと思います…

Sub 結合解除()
 Dim 範囲 As Range
 Dim 結合範囲 As Range
 Dim 値 As Variant
 For Each 範囲 In ActiveSheet.UsedRange
   If 範囲.MergeCells Then
     Set 結合範囲 = 範囲.MergeArea
     値 = 範囲
     範囲.UnMerge
     結合範囲 = 値
   End If
 Next
End Sub

Qエクセル2013VBA結合セルの間のセル位置取得

いつもお世話になってます。
エクセル2013VBAで質問です。

B3:B4セルが結合されています。また、C3:AG3セル(31セル分)も結合されています。
その時、C4:AG4セルを取得したいのですが位置がずれて思うように取得できません。
どのような指定をすればよろしいでしょうか?
お手数ですがお願いいたします。
下記は試してみてだめだったもののうちの一つです。

Sub test()
Range("B3").Offset(0, 1).MergeArea.Select
Range("B3").Offset(1, 0).Resize(1, 31).Select
End Sub

Aベストアンサー

Range("B3").Offset(, 1).Offset(1).Resize(1, 31).Select
こんな感じ?

Q折り返し行数あたりのセルの高さの設定

Excel(97 for Win / 98 for Mac)にて、折り返しによる複数の行を含むセル
がある行の高さを、一括で指定する方法は無いでしょうか?
自動設定にすると、セル内部の行数に応じた高さになりますが、その場合は、
あくまでも自動設定で、希望の高さより狭くなってしまったりします。

つまり、例えば、
内部に1行しか含まない行は 30
内部に2行を含むセルがある行は 60
内部に3行を含むセルがある行は 90
というように、内部に含む”折り返し行数”当たりの行の高さの指定を
するということです。

手作業で合わせるというのが、一回限りの操作としては一番安易ですが、
かなりの行数・折り返し行数のばらつきの多さから、少々しんどいのです。
おそらく、マクロが書ければ解決しそうですが、マクロの知識はほとんど
ありません。これを機会に覚えるというのも選択肢かとも思いますが、
簡単な解決法がありましたら教えてください。

Aベストアンサー

#1のものです。VBAになりますが、
Sub test01()
Dim sh1 As Worksheet
Set sh1 = Worksheets("sheet1")
MsgBox sh1.Cells(1, 1).RowHeight & "の整数倍の行高にします。"
For i = 1 To 3
a = sh1.Cells(i, 1)
s = 1
bairitu = 1
p01:
p = InStr(s, a, Chr(10), 1)
If p = 0 Then GoTo p02
MsgBox p
bairitu = bairitu + 1
s = p + 1
GoTo p01
p02:
sh1.Cells(i, 1).RowHeight = bairitu * sh2.Cells(1, 1).RowHeight
Next i
End Sub
Sheet1でA列に文字を入れるとして、A1に望みの
行高を設定しA2以下データを入れてみてください。
入力が終わったら、上記を実行してみてください。
改行した数の整数倍分だけ行高が増えるはずです。
考えておられることに基本線が合っておれば、後の改良は更なる要望を上げていただければ考えます。
データ入力セルは、書式-セル-配置-折り返して全体を表示にして 、改行はALT+Enterキーで改行してください。

#1のものです。VBAになりますが、
Sub test01()
Dim sh1 As Worksheet
Set sh1 = Worksheets("sheet1")
MsgBox sh1.Cells(1, 1).RowHeight & "の整数倍の行高にします。"
For i = 1 To 3
a = sh1.Cells(i, 1)
s = 1
bairitu = 1
p01:
p = InStr(s, a, Chr(10), 1)
If p = 0 Then GoTo p02
MsgBox p
bairitu = bairitu + 1
s = p + 1
GoTo p01
p02:
sh1.Cells(i, 1).RowHeight = bairitu * sh2.Cells(1, 1).RowHeight
Next i
End Sub
Sheet1でA列に文字を入れるとして、A1に望み...続きを読む


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

このカテゴリの人気Q&Aランキング

おすすめ情報