【Excel(VBA)】作業中のシートだけを書き出す方法(テキスト化あり)

2019-03-08 23:12:44 293

はじめに

エクセルで作業をしていると、いくつものシートを使い、結果のシートは1つだけということがよくある。

そんなときに、上司や顧客から結果だけを求められた場合、大量のシートが入った大容量のファイルを渡すのは忍びない。

この場合、必要な1つのしーとだけを書き出して渡せばいいが、普通に書き出すと計算式やら参照やら、エリアの名前やらが入った状態になり、エラー表示のリスクが高まる。

こんな時のために、
①アクティブシートを書き出し、
②値をテキストベースに変換し、
③不必要なテーブルの名前を削除し、
④新しいファイルとして書き出す
マクロを用意した。

必要なシートを瞬時に書き出す

vba


Sub シートを書き出し()

filepath = ActiveWorkbook.path
newName = InputBox("ファイル名を入力してください", "ファイル名の入力", ActiveWorkbook.ActiveSheet.Name)

'キャンセルなら、作成しない
If newName <> "" Then
ActiveWorkbook.ActiveSheet.Copy
'計算式をなくして全セルをテキストに変換
Cells.Copy
Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'名前を削除
For Each n In ActiveWorkbook.Names
On Error Resume Next ' エラーを無視
n.Delete
Next
'図形を削除
YesNo = MsgBox("図形オブジェクトを削除しますか?", vbYesNo + vbQuestion)
If YesNo = vbYes Then
For Each ws In ActiveWorkbook.Worksheets
For Each shp In ws.Shapes
shp.Delete
Next shp
Next ws
End If
'保存
ActiveWorkbook.SaveAs Filename:=filepath & "\" & newName
ActiveWorkbook.Close
End If
End Sub

関連記事