- ベストアンサー
エクセルの特定のシートのみを保存するマクロ
- エクセルの特定のシートのみを保存するマクロを作成する方法について教えてください。
- エクセル内にあるたくさんのシートの中から特定のシートを選んで保存する方法が知りたいです。毎日データ更新する中で、他の人に送信する必要があるシートだけを別のエクセルファイルとして保存したいです。
- シートの保存時にそのシート名を特定のセルの入力値にしたいです。マクロを実行するたびに同じ名前で上書き保存されるのを避けたいです。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
ANo.1です。 > この場合、シートの保存をする時点で、値のみの保存にしたらよろしいのでしょうか。 保存の前に値のみの状態にすれば良いと思います。 私のコードの場合、保存(ActiveWorkbook.SaveAs ……)の前に以下の4行を追加してみてください。 Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False
その他の回答 (5)
- Wendy02
- ベストアンサー率57% (3570/6232)
余計なお世話の続きで、別にエラーや不具合がなければ、何でもよいと思います。 >ActiveSheet.Select >ActiveSheet.Copy これを行えば、シートモジュールも含まれますので、シートモジュールのマクロがあったり、ActiveX コントロールがある場合は、それらもコピーされますので、私は、他人にメールに添付する場合は、こういう方法は使いません。 なお、Select --> Selection は省き、 ActiveSheet.Copy NewBook.ActiveSheet とします。しかし、シートそのものをコピーするのは、トラブルの発生するケースがたまにあります。名前定義やフォームのコピーされる時に、元とコピー先の関係が複雑になることがあります。たぶん、Excelのバグに近いものだと思います。ですから、特別の条件がなければ、シートコピーというのは、Cells.Copyだけで貼りつけます。今回、Cells.Copyで、PasteSpecial Paste:xlValues だけにしてしまいましたが、それでは、コピーされないものとしては、書式がありますから、以下のようにしたほうがよいです。 * の二行は、以下のように変えたほうがよいかもしれません。 > Application.SheetsInNewWorkbook = shCnt > ThisWorkbook.Worksheets("Sheet1").Cells.Copy '* > .ActiveSheet.Cells(1).PasteSpecial Paste:=xlValues '* > With Application.Dialogs(xlDialogSaveAs) ↓ ThisWorkbook.Worksheets("Sheet1").Cells.Copy .ActiveSheet.Cells(1) .ActiveSheet.UsedRange.Value = .ActiveSheet.UsedRange.Value
- Wendy02
- ベストアンサー率57% (3570/6232)
こんなところかな? なるべく易しい内容にしました。ThisWorkbook.Path が、My Document にある場合を想定していますが、そうでなければ、書き換えてください。ActiveX のボタンに設定しました。 >全く同じ名前で上書き保存されていくのは困りますので 今は、ファイル名は日付になっています。上書きに対しては、システム側のメッセージに任せてあります。なお、相手にメールで渡すブック名は、なるべくなら、拡張子を抜いたベースファイル名は8文字までにとどめたほうが良いかと思います。余計なお世話かもしれませんが。 '// Private Sub CommandButton1_Click() Dim myFolder As String Dim shCnt As Integer Dim orgDir As String shCnt = Application.SheetsInNewWorkbook orgDir = ThisWorkbook.Path '------設定------------- myFolder = ThisWorkbook.Path & "\ファイル\" 'ユーザーフォルダ '------------------------ Application.SheetsInNewWorkbook = 1 'シートは1つ ChDir myFolder With Workbooks.Add Application.SheetsInNewWorkbook = shCnt ThisWorkbook.Worksheets("Sheet1").Cells.Copy .ActiveSheet.Cells(1).PasteSpecial Paste:=xlValues With Application.Dialogs(xlDialogSaveAs) .Show Format$(Date, "yymmdd") End With .ActiveSheet.Cells(1).Select .Close False End With ChDir orgDir End Sub 'おまけ Sub CationOnButton() 'ボタン名の変更 On Error Resume Next With Me.CommandButton1 .Caption = StrConv("ファィル保存", vbNarrow) .Font.Size = 9 End With On Error GoTo 0 End Sub
- trajaa
- ベストアンサー率22% (2662/11921)
VLOOKUP参照の件は解決されたのですね? 多分その疑問は当然出てくるだろうと予想はしていました。 しかし、シートに設けたボタンとのご指定でしたので、敢えてそのままにしました。 また、アクティブシート以外でも可能ですが、シート構成などが私には解りませんでしたので 一番単純なアクティブシートとしました。 対応策としては、シート上のボタンでは無くツールバーのボタンという方法があります。 試しに、ツールバー上で右クリックしユーザー設定を選び、コマンドタブの中のマクロ分類を見ると ユーザー設定ボタンが現れます。 このボタンをツールバー上に貼り付けて、マクロの登録を行う事が可能です。 ボタンはツールバーにしか有りませんから、コピーした後のファイルには痕跡が残りません。 「他の人が使ってもすぐわかるように、できれば簡単にしておきたいのです。」 この辺は、ツールバーのボタンに説明キャプションを付けるなどして対応願います。 操作を行うシートとコピー対象のシートを規定する方法など、他にも方法はありますが・・・・ 流石にそこまではご容赦願います。
補足
回答をありがとうございます。よくわかりました。ただ、VLOOKの件は未解決でして、値のコピーにすれば解決するのかと思い、いろいろ調べたところSelection.PasteSpecial Paste:=xlValues に行きついたのですが、使い方(また、これでよいのか)がよくわかりませんでした。 値のコピーでなくてもいいのですが、何せリンクが繋がったままで、シートの中身がころころ変わってしまっては困ります。当然わかりそうなことだったのでしょうが、、わからず申し訳ありません。 もし解決策があればどうぞお願いいたします。
- trajaa
- ベストアンサー率22% (2662/11921)
ざっとこんな感じ Sub FileSaveMacro() Dim fname As String fname = Range("A1").Text ActiveSheet.Select ActiveSheet.Copy ActiveWorkbook.SaveAs _ Filename:="C:\Documents and Settings\aaaaaaaa\My Documents\ファイル\" & fname & ".xls", FileFormat:=xlNormal End Sub ・特定のセルが不明ですからA1で設定しています、適宜変更願います。 ・マイドキュメントのアカウント名が不明ですので aaaaaaaa と仮定しています。適宜修正ください。 あとはマクロをボタンに登録すればOK (但し、コピー対象がアクティブシートであるという前提です。) 細部については自身で設定調整願います。
お礼
できました!それもいとも簡単に、、素人の私でも!びっくりしました。 本当にありがとうございます。カンペキです。 ところでこれは、このシートがアクティブであることが条件、とのことですが、たとえばここにコピーボタン(このマクロ設定)を用意してしまうと、それが保存したシートを閲覧した人に見えてしまいますよね。 それでお尋ねは、他のシートにマクロ設定のボタンを用意して、、、というふうに記載したのですが、他のシートに設定すると、そちらのシートがアクティブになってしまいますよね。 何かもしいい案をお持ちでしたら、ご教授ください。もちろん、マクロ実行、というのを押すのも不便ではないのですが、他の人が使ってもすぐわかるように、できれば簡単にしておきたいのです。
補足
申し訳ありません。ド素人だったので、予定外のことが、、。というのもこのシートがコピーされ保存されたのですが、もともとVLOOKなどを使用して、ほかのシートとリンクしていたため、この、もとのエクセルをいじるたびに、この保存したシートの中身は変わってしまうようです。 何か防ぐ方法がもしあればどうぞお願いいたします。
- mt2008
- ベストアンサー率52% (885/1701)
何だか、フォルダとファイル、ブックとシートの区別が付いていないような気がします。 こういう事でしょうか? アクティブなシートを、シート一枚だけのブックとして、マイドキュメントの「ファイル」と言うフォルダに保存したい。 しかも、ブック名はシートの特定セルの値を使いたい。 それでしたらこんな感じ。 マイドキュメントのパスはOSによって違うのでCドライブにして有ります。実際のパスに合わせて変更してください。 シート名はA1セルの値を使用、A1セルが空の時は年月日時分秒をブック名に使用します。 また、同じ名前のブックがある時は保存せずにメッセージで警告しています。 Sub Sample() Dim sSheetname, sSheetFullpath sSheetname = Range("A1").Value If IsEmpty(sSheetname) Then sSheetname = Format(Now(), "YYYYMMDDhhmmss") sSheetFullpath = "C:\ファイル\" & sSheetname & ".xls" If Dir(sSheetFullpath) <> "" Then MsgBox ("同名ブック有り") Exit Sub End If ThisWorkbook.ActiveSheet.Copy ActiveWorkbook.SaveAs Filename:=sSheetFullpath ActiveWindow.Close End Sub #Excel2003で確認
お礼
たいへん、ありがとうございます。もうお人方のほうにも書いたのですが、保存したシートが(VLOOKがあるため)参照先であるもとのエクセルシートと常につながっていて、参照元をさわるたびに中身が更新されてしまう、というトラブルを予測しておりませんでした。 この場合、シートの保存をする時点で、値のみの保存にしたらよろしいのでしょうか。
お礼
ありがとうございます!やってみたら本当にできました。本当に全て教えていただいたまんまですが、、(自分の力じゃなく、、)ありがとうございました! 自分で操作する分にはややこしくても気にならないのですが、いつも他人がやったときに簡単にできるようにしておかないと落ち着かなくて、、(仕事の引継ぎなどを考えると) 因みに、最後にひとつ質問なのですが、私の目から見ると、下記の二つは同じように見えます。これはなぜ二回コピー作業をしないといけないのでしょうか? ActiveSheet.Select ActiveSheet.Copy Cells.Select Selection.Copy
補足
>保存の前に値のみの状態にすれば良いと思います ありがとうございます!朝ずっと考えていてそこまでは思いついたのですが、それをどういうコードで書けばいいのかが全くわかりませんでした。 いろいろ試したのですが、失敗しました。 教えていただいた4行で今から試してみます。ありがとうございます。