[[20131005163843]] 『表示列のみでの行のAutoFit』(ひでん) ページの最後に飛ぶ

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

 

『表示列のみでの行のAutoFit』(ひでん)

     A    B     C  
  -------------------------
 1  あ  あ  あ
      あ    
  -------------------------
 2  い  い  い
   い
  -------------------------
 3 う
  -------------------------
 上記のような表でB列を非表示した時に行の自動調整をすると

     A    C
  ------------------------
 1  あ  あ

  ------------------------
 2  い  い
    い
  ------------------------
 3  う
  ------------------------
 になります。

     A    C
  ----------------
 1  あ  あ
  ----------------
 2  い  い
    い
  -------------------
 3  う
  -------------------

 上記のように1行目の高さが表示列だけの内容でAUTOFITさせる方法はありますか?
 非表示の列の内容を判断させたくありません。
 行と列が非常に多いため、最低限の列の表示で印刷したいのですが、1行の幅が無駄に広いため紙を多量に使用します。
 そのため、非表示の列の内容は無視し、表示列の分だけの内容でAUTOFITしたいのです。 よろしくお願いします。Xp,2003を使っています。

  列を非表示にする前に、 当該列のセルの書式(配列)を
 「折り返して全体を表示」にしない設定したらどうですか?

 ※いちいち設定したり、元の書式に戻したりするのは面倒なので、
   マクロの活用も考慮に入れる必要があるかも知れませんけど。

 (半平太) 2013/10/05(Sat) 19:49

 >当該列のセルの書式(配列)を
            ↓   訂正 m(__)m
  当該列のセルの書式(配置)を

 新しいシートを作成し、シート名を 印刷 として、ThisWorkbook に下記のコードを
シート・ブックの保護は無い前提ですけど^
 シートSheet1 又は Sheet3 から印刷シートを選択した場合にコピーされます。
’「ThisWorkbook」

 Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
   Dim i As Long

   If ActiveSheet.Name = "印刷" Then
      If UBound(Filter(Array("Sheet1", "Sheet3"), Sh.Name, True)) = 0 Then  'Array()指定シートにする

         Application.ScreenUpdating = False
         Application.DisplayAlerts = False
         Application.EnableEvents = False
         Cells.Delete
         Sheets(Sh.Name).Copy after:=Sheets("印刷")
         Columns.EntireRow.AutoFit
         Range("A1:" & Cells.SpecialCells(xlCellTypeLastCell).Address).Value = Range("A1:" & Cells.SpecialCells(xlCellTypeLastCell).Address).Value

         For i = Cells.SpecialCells(xlCellTypeLastCell).Column To 1 Step -1
            If Columns(i).Hidden Then Columns(i).Delete
         Next i

         Sheets("印刷").Delete
         ActiveSheet.Name = "印刷"
         Application.EnableEvents = True
         Application.DisplayAlerts = True
         Application.ScreenUpdating = True

      End If
   End If
 End Sub
 (初)

 茶々入れすみません。
 AutoFit するなら列削除の後の方がよさそうな。
 (Mook)

 Mookさんありがとうございます。
 <AutoFit するなら列削除の後の方がよさそうな。
 その通りでした^^
 Next i後にColumns.EntireRow.AutoFitするべきでですね。
(初)


ありがとうございます。50列の2000行あるシートで計算式が多く、シートも6枚ありピボットなどもありマクロもあります。自動計算の状態では、データの追加するのに1セルごとに時間がかかるため、手動計算にして、必要なセルのに再計算させています。このような表のため、非表示の状態でAutoFitさせたいのですが・・・
マクロで印刷用のシートを作成しAutoFitするしかないのですね。

 >マクロで印刷用のシートを作成しAutoFitするしかないのですね。
 「しかない」って、私のアイデアはどう評価されたんでしょうか?

 >非表示の状態でAutoFitさせたいのですが・・・ 
 始めから非表示になっている、と云うのがネックなんですか?

 Sub UnwrapBeforePrint()  '印刷前に非表示列は折り返しを解除する
     Wrapping AfterPrint:=False
 End Sub

 Sub WrapAfterPrint()     '印刷後は非表示列を折り返しに戻す)
     Wrapping AfterPrint:=True
 End Sub

 Sub Wrapping(AfterPrint As Boolean)
     Const shNameToProc As String = "Sheet1"
     Dim cols As Range

     With Sheets(shNameToProc).UsedRange
         For Each cols In .Columns
             If cols.Hidden Then
                  cols.WrapText = AfterPrint
             End If
         Next
        .Rows.AutoFit
     End With
 End Sub

 (半平太) 2013/10/07(Mon) 19:22 →22:08 冗長だったので全面差替えにしました

コメント返信:

[ 一覧(最新更新順) ]


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