Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2013)
BOOKの保存と更新
投稿日時: 18/05/08 23:03:54
投稿者: himajii3

Book aをBookbという名前で保存して、Book aのデータを消去するマクロを教えてください。
自分でつくったのは、Bookbという名前で保存はするのですが、データを消去するファイルは
Bookbの表示になっています。元のファイル(Book a)名で消去したいのですが。

回答
投稿日時: 18/05/08 23:27:14
投稿者: simple

SaveCopyAsでBookbの名前で保存してはどうですか?
Bookaはそのまま残りますから、それを随意に加工して下さい。

回答
投稿日時: 18/05/08 23:57:36
投稿者: sy

Book a は、マクロを実行しているマクロブックそのものですか?
 
そうならすでに解決策は提示されていますので割愛します。
 
もし違うブックを操作しているのでしたら、Bookbで保存した後に、もう一度Book aで保存しなおせば、そのまま操作出来ますよね。

投稿日時: 18/05/10 08:03:03
投稿者: himajii3

 
 
「保存」は下記の通りです。
 
 
 
Private Sub CmdSave_Click()
    Dim FileName As Variant
     
    FileName = Application.GetSaveAsFilename(InitialFileName:="BOOKAH30.○月.xlsm", FileFilter:="Excelファイル,*.xlsm")
    If FileName = False Then
        Exit Sub
    End If
     
    ActiveWorkbook.SaveAs FileName
 
End Sub
 
「更新」は下記の通りです
 
Private Sub CmdUpdate_Click()
    Dim idxRow, maxRow, idxSheet As Integer
     
    
    For idxSheet = 1 To Worksheets.Count
        Worksheets(idxSheet).Select
 
        If Worksheets(idxSheet).Range("B2").Value = "BOOK A" Then
            maxRow = Worksheets(idxSheet).Cells(Rows.Count, 2).End(xlUp).Row
 
            Worksheets(idxSheet).Range("H6").Value = Worksheets(idxSheet).Range("H" & maxRow).Value
         
            Worksheets(idxSheet).Range("B7:G" & (maxRow - 1)).Value = ""
 
        End If
 
    Next
     
    Worksheets("Shett A").Select
    maxRow = Worksheets("Sheet A").Cells(Rows.Count, 2).End(xlUp).Row
     
    Worksheets("Sheet A").Range("B6:D" & maxRow).Value = ""
    Worksheets("Sheet A").Range("F6:F" & maxRow).Value = ""
    Worksheets("Sheet A").Range("H6:H" & maxRow).Value = ""
     
    MsgBox ("更新が終了しました")
     
End Sub
 
 
画面に開いているファイルは「BOOKAH30.○月.xlsm」と表示されます。
 

回答
投稿日時: 18/05/10 09:29:30
投稿者: WinArrow
投稿者のウェブサイトに移動

>元のファイル(Book a)名で消去したいのですが。
 
この意味は、更新前の状態に戻したいということですか?
 
元のファイル(Book a)と
本マウロが記述されているブックと同じですか?
 

投稿日時: 18/05/10 09:45:53
投稿者: himajii3

Book AをマスターファイルとしてBook Bで保存し、BookAに入力してBook Cで保存するを繰り返したいのです。

回答
投稿日時: 18/05/10 11:38:47
投稿者: よろずや

>Book AをマスターファイルとしてBook Bで保存し、BookAに入力してBook Cで保存するを繰り返したいのです。
 
Book B や Book C は、マクロ付のままでいいのですか?
普通、データファイルにはマクロは要らないと思うのですが?

投稿日時: 18/05/10 12:29:20
投稿者: himajii3

BOOK B,BOOH Cは値のみのコピーでよいのです。
マクロは要りません。
 

回答
投稿日時: 18/05/10 12:49:23
投稿者: よろずや

ThisWorkbook.Worksheets("Sheet A").Copy
とやると、Book A の Sheet A をもとにした Book ができます。
この Book に対して、随意に加工して Book B として保存するのが、普通の形だと思います。
 
もう一度
ThisWorkbook.Worksheets("Sheet A").Copy
として加工後に、Book C として保存すればよろしいかと。
 

回答
投稿日時: 18/05/10 13:34:25
投稿者: WinArrow
投稿者のウェブサイトに移動

himajii3 さんの引用:
Book AをマスターファイルとしてBook Bで保存し、BookAに入力してBook Cで保存するを繰り返したいのです。

 
私の質問の意味が伝わっていないようですね?
 
(Book A)をマスタとして考え、
データを追加/更新し、」別ブックで保存、
という作業を繰り返し行いたいという
説明ですが、
マスタブックを直接更新するから
>データを消去する
とか、元の戻すtかを考える必要性が生まれます。
 
このような運用には、
まず、マスタブックは、データだけを記録するデータブック(できればテンプレート形式)
(つまり、マクロを持ち込まない)で作成します。
マクロは別のマクロだけのブックに作成します。
 
マウロの処理ですが
@マスタブックを開く
Aデータを取り込む
B別ブックで保存する。
といった内容になります。
BookBを作成するときも、BOOKCを作成するときも@〜Bの処理をすればよいです。
常に「○マスタブックを開く」から、実行するので
>データ消去
なんて考える必要がありませんよね・・・
 
 
 
 
 

投稿日時: 18/05/10 18:56:18
投稿者: himajii3

BookAをテンプレートとしておいて開き、入力して、BookBの名前で保存し、改にBookAを開く
 
マスタBookを開くという処理が抜けているように思います。
 
皆様いろいろアドバイスありがとうございました。