[[20150516124148]] 『文字数が多いものだけ行幅を広げる』(サンパレス) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『文字数が多いものだけ行幅を広げる』(サンパレス)

 ある表で、行幅が一定に設定されています。
 それで、ある列のセルの文字数が多くて、セルからはみ出す場合のみ、
 対応する行の幅を広げることをVBAでやりたいのですが、いかがでしょうか。
 Rows.AutoFit とすると、文字数が多い行は広がりますが、
 文字数が少ない行は幅が狭くなってしまいます。
 よろしくお願いいたします。

< 使用 Excel:Excel2013、使用 OS:Windows8 >


 Private Sub Worksheet_Change(ByVal Target As Range)
   Dim col As Long
   Dim row As Long
   row = Target.row
     col = Target.Column
     Cells.Select
     Cells.EntireColumn.AutoFit
     Cells.EntireRow.AutoFit
     Columns(col).ColumnWidth = Columns(col).ColumnWidth * 1
     Rows(row).RowHeight = Rows(row).RowHeight * 1
 End Sub

 シートモジュールに貼付。
 どうでしょうか。
(二丁目) 2015/05/16(土) 13:31

こんなこと?

 Sub test()
    Dim t As Range
    Dim w
    Dim n As Long
    Dim c As Range

    Set t = Range("B5:H15")  '表の範囲
    w = Array(, 10, 15, 10, 20, 10, 10, 5)  '最小設定値

    For Each c In t.Columns
        n = n + 1
        n = n + 1
        With c
            .AutoFit
            .ColumnWidth = WorksheetFunction.Min(.ColumnWidth, w(n))
        End With
    Next

 End Sub

(マナ) 2015/05/16(土) 14:07


↑は、MinではなくMaxの間違いでした

(マナ) 2015/05/16(土) 14:10


あら、幅でなく高さでしたか?失礼しました。

(マナ) 2015/05/16(土) 14:15


 あくまで列幅 だとして。

 Sub Test2()
    Dim col As Range
    Dim sv As Double

    Application.ScreenUpdating = False

    With ActiveSheet.UsedRange
        For Each col In .Columns
            sv = col.ColumnWidth
            col.AutoFit
            If col.ColumnWidth < sv Then col.ColumnWidth = sv
        Next
    End With

 End Sub

(β) 2015/05/16(土) 15:57


 お望みのこととは違うと思いますが、こんな方法も。
 E列に1行目から数行ぐらいセルからはみ出すぐらいの文字を入れて試してみてください。

 Sub test()
  Dim r As Range
  Dim c As Range
   Set r = ActiveSheet.Range(ActiveSheet.Cells(1, 5), ActiveSheet.Cells(1, 5).End(xlDown))
   For Each c In r
    c.HorizontalAlignment = xlCenterAcrossSelection
   Next c
   Set r = Nothing
 End Sub
(カリーニン) 2015/05/16(土) 19:51

 ありがとうございます。

 βさんのコードですが,「あくまで列幅 だとして。」となっていますが,
 変動させたいのは,行幅でありまして。

 文字数がはみ出す行は,行幅を広げる
 文字数がはみ出さないものは,行幅を狭めないで,現状のまま

 としたいのですが,どうなりますでしょうか。

 質問が分かりにくくて,申し訳ありません。

(サンパレス) 2015/05/17(日) 10:09


 横から失礼。

 それは、「行の高さ」と普通呼ばれます。

 ColumnWidthの代わりに RowHeightを使えばいいですよ。
 (ご自分で行の高さを調節する動作をマクロ記録すれば判明するのです)

 まったく同じ考え方でできると思います。
 ・始めに高さを記憶して置いて、
 ・AutoFit
 ・狭くなってしまっていたら、元に戻す。

 ここまでヒントを示されているのですから、
 練習のためにご自分でトライされたらいかがですか?
 それでもできなかったら、他人に頼りましょう。

(γ) 2015/05/17(日) 10:28


 ありがとうございます。
 できました。
(サンパレス) 2015/05/17(日) 17:44

それは良かったです。
あなたの作成されたコードを提示されると、読者の参考になりますね。
give and take でお願いします。回答頂いた方へのお返しにもなります。
(γ) 2015/05/17(日) 18:20

 こんな感じです。
 みなさん,どうもありがとうございました。

 Sub Test2()
    Dim col As Range
    Dim sv As Double
    Application.ScreenUpdating = False
    With ActiveSheet.UsedRange
        For Each col In .Rows
            sv = col.RowHeight
            col.AutoFit
            If col.RowHeight < sv Then col.RowHeight = sv
        Next
    End With
 End Sub

(サンパレス) 2015/05/17(日) 21:32


助言を受け入れて頂き、ありがとうございます。
# col を row に置換しておくとよいかもしれませんね。

(γ) 2015/05/17(日) 22:02


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.