質問: エクセル VBAの質問です 「C:\完成前」フォルダにある全てのエクセルファイルの特定の列と行を非表示にし 「D:\出来上がり」フォルダにエクセルとPDFで保存したく思っております。 列はA列~H列までは固定で非表示にせず、H列から先は5行目セルを参照し、5行目の最後データが入っている列から逆に数えて10列分を表示させたいです。 例えば、A5からZ5のセルの26行にデータが入っていたとしたら A~Hまでの8列は表示(ここまではとにかく固定で表示) I~Pの8列は非表示、Q~Zの10列は表示(最後の列から10列表示)、というような具合です。 また、H列から先が10列以下の場合は、非表示にはせず全て表示させたいです。 また行の非表示は、C列の行に「コメント評価」、「満足度評価」の文字列があった場合は その行をまるごと非表示にしたいです。 説明が分かりづらく、かつややこしい話で申し訳ございません。 どうか、お知恵を拝借させてください。 よろしくお願い致します。
回答: 対象シートはアクティブシートの場合です。 シート名の指定がある場合は >Set ws = wb.ActiveSheet '対象シート(アクティブシート) を Set ws = wb.Sheets("Sheet1") '対象シート(シート名指定) にしてください。 PDFで保存するのはアクティブシートです。 ブック全体の場合は >ws.ExportAsFixedFormat xlTypePDF, dfolder & Left(wb.Name, InStrRev(wb.Name, ".")) & "pdf" 'ブックをPDFで保存" を wb.ExportAsFixedFormat xlTypePDF, dfolder & Left(wb.Name, InStrRev(wb.Name, ".")) & "pdf" 'アクティブシートをPDFで保存" にしてください。 Sub sample() Dim sfolder As String Dim dfolder As String Dim file As String Dim wb As Workbook Dim ws As Worksheet Dim c As Long ' sfolder = "C:\完成前\" '元フォルダ+"\" dfolder = "D:\出来上がり\" 'まとめフォルダ+"\" sfolder = "C:\sample\完成前\" '元フォルダ+"\" dfolder = "C:\sample\出来上がり\" '出来上がりフォルダ+"\" file = Dir(sfolder & "*.xls?") 'フォルダ内の最初のエクセルファイル名 Do While file <> "" 'ファイル名がある間 Set wb = Workbooks.Open(sfolder & file) 'ブックを開く Set ws = wb.ActiveSheet '対象シート(アクティブシート) 'Set ws = wb.Sheets("Sheet1") '対象シート(シート名指定) c = ws.Cells(5, Columns.Count).End(xlToLeft).Column '5行目最終列 If c > 18 Then ws.Columns("I").Resize(, c - 18).Hidden = True 'H列(8列)+10より大きければI列から最終列-10列非表示 wb.SaveAs dfolder & wb.Name '出来上がりフォルダに保存 ws.ExportAsFixedFormat xlTypePDF, dfolder & Left(wb.Name, InStrRev(wb.Name, ".")) & "pdf" 'ブックをPDFで保存" 'wb.ExportAsFixedFormat xlTypePDF, dfolder & Left(wb.Name, InStrRev(wb.Name, ".")) & "pdf" 'アクティブシートをPDFで保存" wb.Close False '閉じる file = Dir '次のファイル名 Loop '繰り返す End Sub