[[20100419163129]] 『アドバンスドフィルターで抽出すると書式が反映さ』(なた) ページの最後に飛ぶ

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

 

『アドバンスドフィルターで抽出すると書式が反映されない?』(なた)

 いつも勉強になっております。なたと申します。
題名にもあるのですが、下記の条件で印刷ファイルに設定してある
ハズの書式が反映されません。なぜなのでしょうか?

 例えば、[ DAT.xls のシート名 DAT ]をテーブルとして、印刷用
ファイル [ RPT.xls のシート名 RPT ]に抽出して、印刷しようと
したのですが、抽出はきちんと出来ているのですが、書式(この場
合はフォントサイズ)が反映されていないのです。

 印刷用ファイルの全セルをフォントサイズ8に設定して保存しても
抽出後にはもっと大きなフォントで抽出されて、印刷プレビューで
はみ出してしまいます。

 もしかして抽出したデータは別のシートとかに抽出して、ループと
かで書き出さないとだめなのですか(TT)?
教えて下さい。。。

 win XP excel2007です。

 >データは別のシートとかに抽出して、ループと
 >かで書き出さないとだめなのですか(TT)?

 そうですね!!抽出先を指定しているのですよね!!
 新規ブック(Sheet1、Sheet2 というシート名が存在する)にて、
 以下のコードを試して比較してください。

 標準モジュールに

 '=========================================================================
 Option Explicit
 Sub test1()
    Call mk_samp_data(Worksheets("sheet1"))
    Call pr_sheet_format(Worksheets("sheet2"))
    MsgBox "ご覧のデータにフィルタをかけます。抽出先は、Sheet2です"
    With Range("A1:E30")
       .AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "K1:K2"), CopyToRange:=Worksheets("sheet2").Range("a1"), Unique:=False
    End With
 End Sub
 '==============================================================================
 Sub test2()
    Dim rng As Range
    Call mk_samp_data(Worksheets("sheet1"))
    Call pr_sheet_format(Worksheets("sheet2"))
    MsgBox "ご覧のデータにフィルタをかけます。抽出先は、Sheet2です"
    With Range("A1:E30")
       .AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range( _
        "K1:K2"), Unique:=False
       On Error Resume Next
       Set rng = .SpecialCells(xlCellTypeVisible)
       If Err.Number = 0 Then
          rng.Copy
          Worksheets("sheet2").Range("a1").PasteSpecial xlPasteValues
          Application.CutCopyMode = False
       End If
       .Parent.ShowAllData
       On Error GoTo 0
    End With
 End Sub
 '==============================================================================
 Sub mk_samp_data(sht As Worksheet)
    With sht
       With .Range("a1:e1")
          .Formula = "=""項目"" & column()"
          .Value = .Value
       End With
       With .Range("a2:e30")
          .Formula = "=int(rand()*10000)+1"
          .Value = .Value
       End With
       .Range("k1:k2").Value = [{"項目1";">4000"}]
    End With
 End Sub
 '==============================================================================
 Sub pr_sheet_format(sht As Worksheet)
    sht.Range("a1:e30").ClearContents
    With sht.Range("a1:e30")
       .Font.Size = 6
    End With
 End Sub

 test1は、AdvancedFilterメソッドで抽出先を指定した例です。
 これだと、Sheet2の書式(フォントサイズ)を設定してもSheet1の書式に
 なってしまいます。つまり、セルごとコピーされている。

 test2は、Sheet1にデータを抽出し、Sheet2に値のみの貼付を行っています。
 これだとSheet2の書式(フォントサイズ)は、保持されます。

 二つを比較してみてください。

 ichinose


 レスくれてたんですね(TT
ありがとうございます。&ごめんなさい。

 とてもわかりやすいファイルを作ってくださって
感謝です。大変よくわかりました!
さっそく今後はこの手でいきます=!

 ichinoseさん ありがとうございまし!
なた

コメント返信:

[ 一覧(最新更新順) ]


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