- ベストアンサー
折り返し行数あたりのセルの高さの設定
Excel(97 for Win / 98 for Mac)にて、折り返しによる複数の行を含むセル がある行の高さを、一括で指定する方法は無いでしょうか? 自動設定にすると、セル内部の行数に応じた高さになりますが、その場合は、 あくまでも自動設定で、希望の高さより狭くなってしまったりします。 つまり、例えば、 内部に1行しか含まない行は 30 内部に2行を含むセルがある行は 60 内部に3行を含むセルがある行は 90 というように、内部に含む”折り返し行数”当たりの行の高さの指定を するということです。 手作業で合わせるというのが、一回限りの操作としては一番安易ですが、 かなりの行数・折り返し行数のばらつきの多さから、少々しんどいのです。 おそらく、マクロが書ければ解決しそうですが、マクロの知識はほとんど ありません。これを機会に覚えるというのも選択肢かとも思いますが、 簡単な解決法がありましたら教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#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キーで改行してください。
その他の回答 (2)
- misatoanna
- ベストアンサー率58% (528/896)
すでにマクロの例が出されていますが、せっかく記述したので、レスします。 こちらは、セルのダブルクリックによる処理ですが‥‥。 得意分野でないので拙い表記ですが、誰か得意な方のフォローがあればいいですね。 [Alt]+[F11] で Visual Basic Editor を起動させ、Sheet?(Sheet?) をダブルクリックして表示されるエディタに次のモジュールをコピペして、Visual Basic Editor を終了してください。 -------------- コピーは次の行から Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) DT = Target.Value N = 0 For P = 1 To Len(DT) If Mid(DT, P, 1) = Chr(10) Then N = N + 1 Next P Select Case N Case Is = 0 Selection.Rows.RowHeight = 18 Case Else Selection.Rows.RowHeight = N * 15 + 18 End Select With Selection .VerticalAlignment = xlCenter .WrapText = False .Columns.AutoFit '※ End With End Sub -------------- コピーは前の行まで 当該セルをダブルクリックすると、セル高が自動設定されます。 ここでは、1行データのセル高を 18、1行増えるごとに 15 づつ増えるようにしてあります。 列幅を自動変更しない場合は、※つき行のコマンドの先頭に ' をつけてください。 '.Columns.AutoFit また、'※ は削除してもOKです。
お礼
ありがとうございました。 行数が多いため、一括で処理できるNo.2の方の方法を使わせていただく ことになりましたが、今後の参考にさせていただきたいと思います。 (やはり、マクロがかけると便利だなと実感しましたので、ちょっと勉強 してみようかという気になりました。)
- imogasi
- ベストアンサー率27% (4737/17069)
書式-行-高さ-自動調節にして 書式-セル-配置-折り返して全体を表示にして 書式-セル-配置-縦位置を上詰めにして セルの入力時にALT+Enterキーで改行すれば ご希望に近いようになるのではないですか。 行高はフォントサイズで決まるようになります。
お礼
早速のアドバイスありがとうございます。 質問が少々舌足らずでした。 アドバイス頂いた内容まではわかっているのですが、行高をフォントサイズ で決まるものと異なる(具体的には、もう少し広く)したいのです。 と、なると、やはり、他の質問の解答に出てくるように、 「改行幅を指定する方法は無い」 という結論に行き着かざるをえないのでしょうか…。
お礼
ありがとうございました。 下記のように、試行錯誤で一部改変して、ほぼ思い通りの結果を得られる ようになりました。(ヘルプと、かつて少しだけかじったBasicの知識で かなり試行錯誤した結果です。) 欲を言うと、明示的に改行してある行数だけではなく、自動改行で折り返されて いる場合も行数としてカウントできると完璧なのですが、それはちょっと無理 ですよね? あと、均等割付にすると上下がいっぱいのところまで来てしまって、上下のセル との間隔が狭くなってしまうので、縦位置は中央詰めにしています。そうすると、 単純に整数倍では上下の余白が大きくなりすぎるために、0.7倍してみました。 実は、この機能を使うのは私ではなくて、さらにエクセル初心者の人ですので、 この、2行以上の時の増分をフォントサイズとA1の高さから自動で求められれば 更にいいのです。が、それはなんとかできそうな気がしますので、練習を兼ねて もうすこし自分で工夫してみようと思います。 Sub gyou_takasa() Dim sh1 As Worksheet Rem Set sh1 = Worksheets("sheet1") Set sh1 = ActiveSheet MsgBox sh1.Cells(1, 1).RowHeight & "の整数倍の行高にします。" For i = 1 To Selection.Rows.Count For j = 1 To Selection.Columns.Count a = sh1.Cells(i, j) s = 1 bairitu = 1 bairitumax = 1 p01: P = InStr(s, a, Chr(10), 1) If P = 0 Then GoTo p02 Rem MsgBox p bairitu = bairitu + 1 s = P + 1 GoTo p01 p02: If bairitu > bairitumax Then bairitumax = bairitu Next j p03: If bairitumax > 1 Then bairitumax = (bairitumax - 1) * 0.7 + 1 sh1.Cells(i, 1).RowHeight = bairitumax * sh1.Cells(1, 1).RowHeight Next i End Sub