Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12317 / 13645 ツリー ←次へ | 前へ→

【11076】sheetごとに保存したい みかん 04/2/27(金) 12:02 質問
【11077】Re:sheetごとに保存したい IROC 04/2/27(金) 12:33 回答
【11078】Re:sheetごとに保存したい Asaki 04/2/27(金) 12:36 回答
【11088】Re:sheetごとに保存したい みかん 04/2/27(金) 16:08 質問
【11089】Re:sheetごとに保存したい Asaki 04/2/27(金) 16:14 回答
【11097】Re:sheetごとに保存したい アイエネス 04/2/27(金) 23:38 発言
【11114】Re:sheetごとに保存したい Asaki 04/2/28(土) 13:26 回答
【11151】Re:sheetごとに保存したい みかん 04/3/1(月) 14:04 質問
【11152】Re:sheetごとに保存したい Asaki 04/3/1(月) 14:15 回答
【11155】Re:sheetごとに保存したい みかん 04/3/1(月) 15:32 質問
【11156】Re:sheetごとに保存したい Asaki 04/3/1(月) 16:17 回答
【11159】Re:sheetごとに保存したい みかん 04/3/1(月) 16:33 お礼

【11076】sheetごとに保存したい
質問  みかん  - 04/2/27(金) 12:02 -

引用なし
パスワード
   OS XP
EXCEL 2002です。
よろしくお願いします。

1つのファイルにたくさんのシートがあるのですが
そのシートごとに新たに保存したく思います。
コマンドボタンをつくり、
そのシート名をファイル名につけたいのですが
どうしたらいいでしょう。

一応考えたのはこんな感じです。
よろしくお願いします。

Private Sub CommandButton1_Click()
Dim name As String

  'Sheet名を取得する
  name = ここがわかりません。

  '取得したファイル名で保存
  ActiveWorkbook.SaveAs Filename:="C:\" & name & ".xls"

End Sub

【11077】Re:sheetごとに保存したい
回答  IROC  - 04/2/27(金) 12:33 -

引用なし
パスワード
   name = Activesheet.name

ですか?

【11078】Re:sheetごとに保存したい
回答  Asaki  - 04/2/27(金) 12:36 -

引用なし
パスワード
   こんにちは。

全シートを一気に保存するなら、↓のようにループすればよいかと思います。
Sub test()
  Dim sh   As Worksheet
  Dim str   As String

  For Each sh In Worksheets
    'シート名取得
    str = sh.Name
    '保存処理
  Next sh

End Sub

特定のシートにコマンドボタンを置いて、これを押したときにそのシートだけを保存するなら、
ActiveSheet.Name
でシートを取得できそうです。

【11088】Re:sheetごとに保存したい
質問  みかん  - 04/2/27(金) 16:08 -

引用なし
パスワード
   IROCさん、Asakiさん、迅速な回答、ありがとうございます。

2つのやり方を知りたかったので(全部保存する場合と1つずつ保存する場合)
大変助かります。
しかし、やってみるとどちらのやり方をしても
全部のsheetが保存されてしまうのです。
確かにactiveにしたsheetの名前で保存はされていて、開くとそのsheetがactiveになっているのですが、activeにしていないsheetもついてきてしまっています。
このactive sheetだけを選択して、
保存するというコードが必要なのでしょうか?

【11089】Re:sheetごとに保存したい
回答  Asaki  - 04/2/27(金) 16:14 -

引用なし
パスワード
   >全部のsheetが保存されてしまうのです。
Activeなシートを新規ブックにコピーして、
この新規ブックを保存するようにすればよいかと思います。

コードは、マクロの記録で取れると思います。

【11097】Re:sheetごとに保存したい
発言  アイエネス  - 04/2/27(金) 23:38 -

引用なし
パスワード
   ▼Asaki さん:
>>全部のsheetが保存されてしまうのです。
>Activeなシートを新規ブックにコピーして、
>この新規ブックを保存するようにすればよいかと思います。
>
>コードは、マクロの記録で取れると思います。

一つだけ注意しておきます。コピーして保存したあと、ブックを閉じるのを忘れずに。

【11114】Re:sheetごとに保存したい
回答  Asaki  - 04/2/28(土) 13:26 -

引用なし
パスワード
   ▼アイエネス さん:
>一つだけ注意しておきます。コピーして保存したあと、ブックを閉じるのを忘れずに。
ああ、すみません。
いつも Close しかしないので。。。

【11151】Re:sheetごとに保存したい
質問  みかん  - 04/3/1(月) 14:04 -

引用なし
パスワード
   みなさん ありがとうございます。
こんなに親切に教えていただいているのに
なかなかできないで悲しくなってきます。
エラーがでてしまったのでまた助けていただけると
ありがたく思います。

Sub test_all()
  Dim sh   As Worksheet
  Dim str   As String

  For Each sh In Worksheets

    'シート名取得
    str = sh.name
        
    'シートを違うファイルにコピー
    
    ActiveSheets.Select
    ActiveSheets.Copy
    
    '保存処理
    
    ActiveWorkbook.SaveAs Filename:= _
    "C:\Documents and Settings\mikan\デスクトップ\" _
    & str & ".xls"
  
  Next sh

End Sub

としたのですが、ActiveSheets.Selectでエラーになります。
記録マクロでやるとSheet("みかん").select になってしまい
みかんという名前のSheetしかselectされないですよね。
なのでActiveSheetかな?と思って作ってみたらだめでした。

【11152】Re:sheetごとに保存したい
回答  Asaki  - 04/3/1(月) 14:15 -

引用なし
パスワード
   >ActiveSheets.Selectでエラーになります。
ActiveSheetは既にActiveなのでSelectの必要はありません。

で、たぶん、エラーは
>ActiveSheets

ActiveSheet
で直るかと思いますが、保存したいシートはActiveSheetでないので、
sh.Copy
でないとダメだと思います。

それから、
Save後にCloseです。

【11155】Re:sheetごとに保存したい
質問  みかん  - 04/3/1(月) 15:32 -

引用なし
パスワード
   Asaki さん 本当にありがとうございます。

Sub test_all()
  Dim sh   As Worksheet
  Dim str   As String
 
  For Each sh In Worksheets
       
    'シートを違うファイルにコピー
    sh.copy
               
    'シート名取得
    str = sh.name
         
    '保存処理
    sh.SaveAs Filename:= _
    "C:\Documents and Settings\mikan\デスクトップ\" _
    & str & ".xls"
    
  Close
  
  Next sh

に直してみたのですが、これだとコピーしたファイルが保存されず
元のファイルがシート名ごとに保存されるままです。
(ファイルには全部のシートがついています。)
そして、同時にシートごとに振り分けられたBook1、Book2ができるのですが
保存できていません。
sh.save がいけないと思うのですが
コピーしたシートを保存するにはどうしたらいいのでしょう。
コピーしたシートを格納し、
例えば

cp=sh.Copy

とかをつくり

cp.SaveAs Filename:=
としようとしたら、cp=sh.Copyでエラーがでてしまいました。。。

よろしくお願いします。

【11156】Re:sheetごとに保存したい
回答  Asaki  - 04/3/1(月) 16:17 -

引用なし
パスワード
   >そして、同時にシートごとに振り分けられたBook1、Book2ができるのですが
>保存できていません。
保存処理自体は、【11151】 のとおりでよいのではないですか?

動きとしては、
1) 新規ブックにシートを1枚コピーする
 (シートオブジェクトのCopyメソッドを引数なしで実行すると、自動的に↑の動作になります)
2) その新規ブックをシート名と同じ名前で保存する
ですよね?
あくまでも、保存するのはBookですから、SaveAs の左につくのは、Bookでないとまずいです。

また、CloseもBookに対して行いますから、
ActiveWorkbook.Close

で、如何でしょうか?

【11159】Re:sheetごとに保存したい
お礼  みかん  - 04/3/1(月) 16:33 -

引用なし
パスワード
   Asaki さん

いつも迅速な回答
ありがとうございました!
ついにできました!

ActiveWorkbook.SaveAsのままで良かったのですね。
とても勉強になりました。
感謝します。

12317 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free