
を作成できればと思っています。
このブック内にはたくさんのシートがあります。
毎日データ更新するのですが、そのうち1シートのみ、他の人に送信する必要があるので、たとえば(理想は)編集が済んだ時点で、あるシートに設けたコマンドボタンのようなものをクリックしたときに、その必要な1シートがコピーされて、別のエクセルファイルとして保存されるのが理想です。
マイドキュメント内の、「ファイル」という名前のファイルに保存をしたいと思っています。
今は、必要なシートのシート名をクリックして、コピーを選び、新しいシートを作成して、、、という作業をしています。これを端折ることができないか、と考えております。
なお、このシートを保存するとき、そのシート名は、ある特定のセルの入力値になることが理想です。
というのも、そのマクロが起動するたびに、全く同じ名前で上書き保存されていくのは困りますので、、、
どなたかお詳しい方がいらっしゃいましたらどうぞお願いいたします。
No.4ベストアンサー
- 回答日時:
ANo.1です。
> この場合、シートの保存をする時点で、値のみの保存にしたらよろしいのでしょうか。
保存の前に値のみの状態にすれば良いと思います。
私のコードの場合、保存(ActiveWorkbook.SaveAs ……)の前に以下の4行を追加してみてください。
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
この回答への補足
>保存の前に値のみの状態にすれば良いと思います
ありがとうございます!朝ずっと考えていてそこまでは思いついたのですが、それをどういうコードで書けばいいのかが全くわかりませんでした。
いろいろ試したのですが、失敗しました。
教えていただいた4行で今から試してみます。ありがとうございます。
ありがとうございます!やってみたら本当にできました。本当に全て教えていただいたまんまですが、、(自分の力じゃなく、、)ありがとうございました!
自分で操作する分にはややこしくても気にならないのですが、いつも他人がやったときに簡単にできるようにしておかないと落ち着かなくて、、(仕事の引継ぎなどを考えると)
因みに、最後にひとつ質問なのですが、私の目から見ると、下記の二つは同じように見えます。これはなぜ二回コピー作業をしないといけないのでしょうか?
ActiveSheet.Select
ActiveSheet.Copy
Cells.Select
Selection.Copy
No.6
- 回答日時:
余計なお世話の続きで、別にエラーや不具合がなければ、何でもよいと思います。
>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
No.5
- 回答日時:
こんなところかな?
なるべく易しい内容にしました。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
No.3
- 回答日時:
VLOOKUP参照の件は解決されたのですね?
多分その疑問は当然出てくるだろうと予想はしていました。
しかし、シートに設けたボタンとのご指定でしたので、敢えてそのままにしました。
また、アクティブシート以外でも可能ですが、シート構成などが私には解りませんでしたので
一番単純なアクティブシートとしました。
対応策としては、シート上のボタンでは無くツールバーのボタンという方法があります。
試しに、ツールバー上で右クリックしユーザー設定を選び、コマンドタブの中のマクロ分類を見ると
ユーザー設定ボタンが現れます。
このボタンをツールバー上に貼り付けて、マクロの登録を行う事が可能です。
ボタンはツールバーにしか有りませんから、コピーした後のファイルには痕跡が残りません。
「他の人が使ってもすぐわかるように、できれば簡単にしておきたいのです。」
この辺は、ツールバーのボタンに説明キャプションを付けるなどして対応願います。
操作を行うシートとコピー対象のシートを規定する方法など、他にも方法はありますが・・・・
流石にそこまではご容赦願います。
この回答への補足
回答をありがとうございます。よくわかりました。ただ、VLOOKの件は未解決でして、値のコピーにすれば解決するのかと思い、いろいろ調べたところSelection.PasteSpecial Paste:=xlValues
に行きついたのですが、使い方(また、これでよいのか)がよくわかりませんでした。
値のコピーでなくてもいいのですが、何せリンクが繋がったままで、シートの中身がころころ変わってしまっては困ります。当然わかりそうなことだったのでしょうが、、わからず申し訳ありません。
もし解決策があればどうぞお願いいたします。
No.2
- 回答日時:
ざっとこんな感じ
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などを使用して、ほかのシートとリンクしていたため、この、もとのエクセルをいじるたびに、この保存したシートの中身は変わってしまうようです。
何か防ぐ方法がもしあればどうぞお願いいたします。
できました!それもいとも簡単に、、素人の私でも!びっくりしました。
本当にありがとうございます。カンペキです。
ところでこれは、このシートがアクティブであることが条件、とのことですが、たとえばここにコピーボタン(このマクロ設定)を用意してしまうと、それが保存したシートを閲覧した人に見えてしまいますよね。
それでお尋ねは、他のシートにマクロ設定のボタンを用意して、、、というふうに記載したのですが、他のシートに設定すると、そちらのシートがアクティブになってしまいますよね。
何かもしいい案をお持ちでしたら、ご教授ください。もちろん、マクロ実行、というのを押すのも不便ではないのですが、他の人が使ってもすぐわかるように、できれば簡単にしておきたいのです。
No.1
- 回答日時:
何だか、フォルダとファイル、ブックとシートの区別が付いていないような気がします。
こういう事でしょうか?
アクティブなシートを、シート一枚だけのブックとして、マイドキュメントの「ファイル」と言うフォルダに保存したい。
しかも、ブック名はシートの特定セルの値を使いたい。
それでしたらこんな感じ。
マイドキュメントのパスは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があるため)参照先であるもとのエクセルシートと常につながっていて、参照元をさわるたびに中身が更新されてしまう、というトラブルを予測しておりませんでした。
この場合、シートの保存をする時点で、値のみの保存にしたらよろしいのでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/05/24 08:33
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2022/08/04 13:56
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
- Visual Basic(VBA) エクセルのマクロについて教えてください。 5 2023/06/02 08:44
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/01/12 16:58
- Excel(エクセル) VBA ふたつの同じ様式シートのセルをコピーしたい 2 2023/03/08 15:28
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/03 11:27
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelのマクロで該当処理できな...
-
ExcelのVBAのマクロで他のシー...
-
エクセルで特定のシートのみ自...
-
Excelマクロのエラーを解決した...
-
特定の文字を含むシートだけマ...
-
実行時エラー'1004': WorkSheet...
-
ワークシートを追加したときの...
-
ユーザーフォームに入力したデ...
-
ブック名、シート名を他のモジ...
-
集計シートA列のコードと一致す...
-
実行時エラー1004「Select メソ...
-
VBAで、シート間の転記するコー...
-
エクセルVBA Ifでシート名が合...
-
【VBA】色のついたシート名を取得
-
VBA 検索して一致したセル...
-
シート削除のマクロで「delete...
-
API関数ImmSetConversionStatus...
-
ExcelVBA:複数の特定のグラフ...
-
コード名シートA列と集計シート...
-
エクセルのシート名変更で重複...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定の文字を含むシートだけマ...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
ユーザーフォームに入力したデ...
-
実行時エラー'1004': WorkSheet...
-
XL:BeforeDoubleClickが動かない
-
エクセルVBA Ifでシート名が合...
-
実行時エラー1004「Select メソ...
-
エクセルのシート名変更で重複...
-
【ExcelVBA】全シートのセルの...
-
VBA 存在しないシートを選...
-
ブック名、シート名を他のモジ...
-
Excel チェックボックスにチェ...
-
VBA 検索して一致したセル...
-
エクセルで通し番号を入れてチ...
-
シートが保護されている状態で...
-
【VBA】特定の文字で改行(次の...
-
ExcelのVBAのマクロで他のシー...
-
Worksheet_Changeの内容を標準...
-
EXCELVBAを使ってシートを一定...
おすすめ情報