top of page

​タグ一覧

配列処理(67)

階層化フォーム(33)

ファイル操作(23)

シート・セル操作(11)

コード自動生成(10)

ユーザーフォーム(8)

図形操作(7)

GAS(5)

アニメーション(5)

技術解説(4)

副業(4)

考え方(4)

条件付き書式(4)

イミディエイトウィンドウ(3)

Enum(3)

Googleスプレッドシート(3)

ココナラ(3)

クリップボード(3)

介護(3)

開発効率化(2)

イベントプロシージャ(2)

PDF(2)

フリーランス(2)

リスキリング(2)

Excel(2)

Excel小ネタ(2)

数学(2)

Outlook(2)

文字列操作(2)

小説(2)

HTML(2)

JavaScript(2)

日報(2)

カレンダー(2)

パズル(2)

ステータスバー(1)

コード解析(1)

静的変数(1)

OneDrive(1)

バックアップ(1)

可変長引数配列(1)

ブック処理(1)

スクレイピング(1)

スプレッドシート(1)

coconala(1)

リボン登録マクロ(1)

QRコード(1)

実行予約(1)

給与計算(1)

VBA不使用(1)

リボン(1)

超勉強会(1)

六角形(1)

Excel遊び(1)

ボウリング(1)

時計(1)

スピログラフ(1)

図名描写(1)

連想配列(1)

イベント(1)

溶接ロボット(1)

VBA(1)

脱Excel(1)

Discord(1)

ECサイト(1)

CSV(1)

楽天(1)

保育士(1)

シフト表(1)

CDP(1)

楽天市場(1)

経理(1)

javascript(1)

医療(1)

文書作成(1)

LookerStudio(1)

シフト(1)

セキュリティ(1)

発注書(1)

ショートカット(1)

WebAPI(1)

色操作(1)

罫線(1)

スーパー開発ショートカット(1)

ライブラリ処理(1)

開発事例(1)

シート単体を別ブックとして保存する

更新日:2024年12月11日


<概要>


 今回は、シート単体を別ブックとして保存する汎用プロシージャを紹介します。


 Excelブック内にある特定のシート(ワークシート)単体だけを別ブックで出力するような処理を実装するときに用います。


 この時に考慮すべきが次のような事項です。

・そのシートにマクロを実行するボタンがある場合は邪魔になるので消去する(引数 DeleteButtonで設定)

・シート内で別シートを参照する数式が入っていると、出力後に外部ブック参照になってしまうので、値のベタ打ちに変換する(引数 ConvFormulaValueで設定)

・ブック出力後に何らかの処理を行う(返り値は出力ブックとして参照可能)

 

 これらのような事項も引数で調整できるような汎用プロシージャとして設計しております。


<用途>


  • シート単体を別ブックとして保存する



<プロシージャ紹介>


Public Function SaveSheetAsBook(Sheet As Worksheet, [SaveName As String], [SavePath As String], [DeleteButton As Boolean = True], [Message As Boolean = False], [ConvFormulaValue As Boolean = False], [CloseBook As Boolean = True]) As Workbook

名前: SaveSheetAsBook /Functionプロシージャ

説明: 指定のシートを別ブックで保存する


引数

Sheet ・・・対象のシート

[SaveName] ・・・保存ブック名(省略なら対象シートの名前)

[SavePath] ・・・保存先フォルダパス(省略なら対象シートのブックのフォルダパス)

[DeleteButton] ・・・コマンドボタンを消去するか(省略なら消去)

[Message] ・・・メッセージを表示するか(省略なら表示しない)

[ConvFormulaValue]・・・数式を値に変換するかどうか(省略なら変換しない)

[CloseBook] ・・・保存したブックを閉じるかどうか(省略なら閉じる)



<実行例>


 次のようなコードを用意します。

 なおOneDriveの影響も考慮してConvOneDrivePath_LocalPathプロシージャを利用しています。

Public Sub TestSaveSheetAsBook()
    Dim Sheet    As Worksheet: Set Sheet = Sheet2
    Dim SaveName As String: SaveName = "シート保存テスト"
    Dim SavePath As String: SavePath = ThisWorkbook.Path
    SavePath = ConvOneDrivePath_LocalPath(SavePath)
    
    Call SaveSheetAsBook(Sheet, SaveName, SavePath)
    
End Sub

 

 実行するとSheet2オブジェクトが「シート保存テスト.xlsx」で出力されます。

ree


<サンプルファイル>





<コード>



'SaveSheetAsBook    ・・・元場所:IkiAddin.ModFile
'DeleteButtonOnSheet・・・元場所:IkiAddin.ModShape

Public Function SaveSheetAsBook(ByRef Sheet As Worksheet, _
                    Optional ByRef SaveName As String, _
                    Optional ByRef SavePath As String, _
                Optional ByRef DeleteButton As Boolean = True, _
                     Optional ByRef Message As Boolean = False, _
            Optional ByRef ConvFormulaValue As Boolean = False, _
                   Optional ByRef CloseBook As Boolean = True) _
                                            As Workbook
              
'指定のシートを別ブックで保存する
'20210719作成
'20220223 ボタンの消去機能追加
'20221013 マクロ付きブックをxlsxで保存する際の警告メッセージ無視
'20231129 出力したブックをWorkbookオブジェクトとして返す機能追加
'https://www.softex-celware.com/post/savesheetasbook

'引数
'Sheet             ・・・対象のシート
'[SaveName]        ・・・保存ブック名(省略なら対象シートの名前)
'[SavePath]        ・・・保存先フォルダパス(省略なら対象シートのブックのフォルダパス)
'[DeleteButton]    ・・・コマンドボタンを消去するか(省略なら消去)
'[Message]         ・・・メッセージを表示するか(省略なら表示しない)
'[ConvFormulaValue]・・・数式を値に変換するかどうか(省略なら変換しない)
'[CloseBook]       ・・・保存したブックを閉じるかどうか(省略なら閉じる)

    '入力引数の調整
    If SaveName = "" Then
        SaveName = Sheet.Name
    End If
    If SavePath = "" Then
        SavePath = Sheet.Parent.Path
    End If
    
    'シートをコピー
    Sheet.Copy
    Dim SaveSheet As Worksheet: Set SaveSheet = ActiveWorkbook.Sheets(1)
    
    '数式を値に変換
    If ConvFormulaValue = True Then
        Dim Cell As Range
        For Each Cell In SaveSheet.UsedRange
            If Cell.HasFormula = True Then
                Cell.Value = Cell.Value
            End If
        Next
    End If
    
    'シート上のボタン消去
    If DeleteButton = True Then
        Call DeleteButtonOnSheet(SaveSheet)
    End If
    
    Application.DisplayAlerts = False '20221013
    ActiveWorkbook.SaveAs SavePath & "\" & SaveName
    If CloseBook = True Then
        ActiveWorkbook.Close
    Else
        Set SaveSheetAsBook = ActiveWorkbook
    End If
    Application.DisplayAlerts = True '20221013
    
    If Message Then
        MsgBox "シート名「" & Sheet.Name & "」を" & vbLf & _
               "「" & SavePath & "」に" & vbLf & _
               "ファイル名「" & SaveName & "」で保存しました。", vbInformation
    End If
    
End Function

Private Sub DeleteButtonOnSheet(Sheet As Worksheet)
'コマンドボタンのみ消去する
'20220223
    
    Dim Shape As Shape
    For Each Shape In Sheet.Shapes
        If Shape.Type = msoFormControl Then
            Shape.Delete
        End If
    Next 
End Sub

コメント

5つ星のうち0と評価されています。
まだ評価がありません

評価を追加
Softex-Celware

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page