人に聞けない痔の悩み、これでスッキリ >>

表題のとおりですが、
例えばsheet1,sheet2,sheet3とあり、ファイルを閉じるときにsheet3のみ強制的に上書き保存をして終了させたいのです。閉じるときに「変更を保存しますか?」というメッセージが出てきて、保存しないをクリックしてもsheet3だけは保存されているような設定は可能でしょうか?
なぜこのような設定がしたいのかと言うと、作業しているsheet上で誤った入力などがなかったか記録したいのです。この記録するプログラムはネット上で見つけたのですが(下記に示します)、記録されていくシートだけを上書き保存したいと思っています。単純に上書き保存すれば残る話しですが、作業しているシートはフォームが決まっているので変更(上書き保存)を許したくありません。
それか、この記録したシートだけを別のファイルで保存していく方法でも構いません。但し、あくまで自動上書き保存が前提です。どうか宜しくお願い致します。

Private Sub Worksheet_Change(ByVal Target As Range)
Dim X As Integer, Y As Integer
Dim LastRow As Long
X = Target.Column
Y = Target.Row
If Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row = Rows.Count Then
Exit Sub
End If
LastRow = Worksheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row + 1
Worksheets("Sheet2").Range("A" & LastRow) = DateValue(Now())
Worksheets("Sheet2").Range("B" & LastRow) = Target.Address(Y, X)
Worksheets("Sheet2").Range("C" & LastRow) = Cells(Y, X)
End Sub

質問者からの補足コメント

  • ご回答有り難う御座います。まさにこの形を理想としていました。
    あと2点質問させて下さい。
    1.エクセルを終了させた時にシートは閉じられるのですが、エクセル自体は残ってしまうのでエクセルごと終了させることはできるのでしょうか?
    2.Sheet3の記録が別ファイルにコピーされる設定のまま、Sheet3も上書きしないことはできるのでしょうか?(記録がどんどん溜まってしまうので)
    宜しくお願い致します。

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/01/14 11:42

A 回答 (1件)

誤解しているかもしれませんが、シート1やシート2、シート3に入力したり、修正した作業を、そのシート名とアドレス、最終的な内容をすべてシート3に一覧になるように記録し、BOOKを閉じるときに、シート3だけを保存するということでしょうか。


そうだとすると、
シート毎に次のコードを入れておく
《Sheet1》の場合
Private Sub Worksheet_Change(ByVal Target As Range)
Dim LastRow As Long
Application.EnableEvents = False
LastRow = Worksheets("Sheet3").Range("A50000").End(xlUp).Row + 1
Worksheets("Sheet3").Range("A" & LastRow) = Time
Worksheets("Sheet3").Range("B" & LastRow) = Target.Address(xlA1)
Worksheets("Sheet3").Range("C" & LastRow) = Target.Value
Worksheets("Sheet3").Range("D" & LastRow) = "Sheet1"  
’(シート2の場合は"Sheet1" シート3の場合は"Sheet3")
Application.EnableEvents = True
End Sub

ThisBOOKに次のコードを入れておく
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.Calculation = xlCalculationManual
Dim myname As String
myname = ThisWorkbook.Name
Dim xSheet As Worksheet
Set xSheet = ThisWorkbook.Worksheets("Sheet3")
mejirusi = Format(Now(), "ddhhnnssss")
xSheet.Range("C1") = mejirusi
myFileName = "sheet_copy_" & mejirusi & ".xlsx"
xSheet.Copy
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & myFileName
MsgBox "Sheet3を " & "sheet_copy_" & mejirusi & ".xlsx と保存しました"
If ActiveWorkbook.Name = myFileName Then
ActiveWorkbook.Close SaveChanges:=False
End If
Application.DisplayAlerts = False
Workbooks(myname).Close SaveChanges:=False
End Sub

そうすると、このブックを保存してあったフォルダに、(このブックを閉じると)Sheet3だけが、保存されます。
「エクセルで特定のシートのみ自動上書き保存」の回答画像1
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございました。追記事項も自己解決しました。

お礼日時:2016/01/15 10:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルの特定のシートのみを保存するマクロ

を作成できればと思っています。
このブック内にはたくさんのシートがあります。
毎日データ更新するのですが、そのうち1シートのみ、他の人に送信する必要があるので、たとえば(理想は)編集が済んだ時点で、あるシートに設けたコマンドボタンのようなものをクリックしたときに、その必要な1シートがコピーされて、別のエクセルファイルとして保存されるのが理想です。

マイドキュメント内の、「ファイル」という名前のファイルに保存をしたいと思っています。

今は、必要なシートのシート名をクリックして、コピーを選び、新しいシートを作成して、、、という作業をしています。これを端折ることができないか、と考えております。
なお、このシートを保存するとき、そのシート名は、ある特定のセルの入力値になることが理想です。
というのも、そのマクロが起動するたびに、全く同じ名前で上書き保存されていくのは困りますので、、、

どなたかお詳しい方がいらっしゃいましたらどうぞお願いいたします。

Aベストアンサー

ANo.1です。

> この場合、シートの保存をする時点で、値のみの保存にしたらよろしいのでしょうか。

保存の前に値のみの状態にすれば良いと思います。
私のコードの場合、保存(ActiveWorkbook.SaveAs ……)の前に以下の4行を追加してみてください。

  Cells.Select
  Selection.Copy
  Selection.PasteSpecial Paste:=xlPasteValues
  Application.CutCopyMode = False

Qエクセルで打ち込んだ数字を自動で別シートに表示したい

エクセルでセルに打ち込んだ数字を自動で別シートに表示できる方法があれば、教えてください。

例えば、シート1のC1に5を打ち込んだら、シート2のD2にシート1で打ち込んだ5が自動で表示される。

また1列すべてを自動で表示させる場合、一つのセルの時と違いがありましたら教えてください。よろしくお願いします。

Aベストアンサー

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コピー&リンク貼り付けを使うと便利です。

例)例)シート1のC1~C5に何かを入力したら、
  シート2のD2~D7にシート1で打ち込んだものが自動で表示される

  シート1にあるコピー元のセルを範囲選択して、
  シート2のD2の上で「右クリック」⇒「形式を選択して貼り付け」
  をクリックします。

  そして出てきた小さな画面の左下にある「リンク貼り付け」という
  ボタンをクリックすると完成です。
  試してみてください。。

  念のためにリンク貼り付けを図解しているURLを載せておきます。
  参考にしてみてくださいね。。
  http://www.geocities.jp/office_inoue/excel/eq21.htm

こんばんは。
入力したセルの値を合計とかでなくて、
純粋に別のシートに自動的に表示したいのであれば、
以下の方法があります。

1.1つのセルだけの場合
例)シート1のC1に5を打ち込んだら、
  シート2のD2にシート1で打ち込んだ5が自動で表示される

⇒シート2のD2のセルをアクティブにして「=」を入力
 した後、シート1のC1をクリックする。
 そうするとD2のセルに「=Sheet1!C1」と表示され、値が自動的に
 表示されるようになります。

2.1列全てコピーしたい場合。
  コ...続きを読む

Qエクセルのワークシート上書き保存について

エクセル2007で使用しています。ワークシートの上書き保存の範囲の付いてお願いいたします

保存が出来ている時と出来ていない時が有る様な気がするので確認をしたいのです

開く時 スタート=>Microsoft Office Excel 2007=>Officeボタン=>開く

=>ローカルディスクC=>ファイルを選択する=>ファイルホルダからたとえば請求書を選択

=>ワークシートの中から23年度請求書を選択

=>ワークシートの下のタブに請求先の会社名を入れA社 B社 C社 ・・・・・・と会社別に分けています

お聞きしたいのはここからです

A B D F社 と続けて追加記入や変更などをして終了した時

たとえばF社のシートで上書き保存をします 

この時上のフロッピーのマークのようなのをクリックして保存する場合と
Officeボタンから保存する事がありますが 同じ物として使っています

この時互換性チエックが出てくる場合続行(別PCの2003でデーターを使う場合もあるので)
で終了させていますが、

F社で保存してもA B D も通常上書きされているようですが時々 A社が上書きされていない様なのです

次に開く時には日時が経っているので記憶が薄く 記入漏れか上書きされていないのかの確認の為お願いいたします。

最後に使ったタブでの上書きでシート全部が上書き出来るのか/各タブで上書きしないといけないのかお願いいたします。

エクセル2007で使用しています。ワークシートの上書き保存の範囲の付いてお願いいたします

保存が出来ている時と出来ていない時が有る様な気がするので確認をしたいのです

開く時 スタート=>Microsoft Office Excel 2007=>Officeボタン=>開く

=>ローカルディスクC=>ファイルを選択する=>ファイルホルダからたとえば請求書を選択

=>ワークシートの中から23年度請求書を選択

=>ワークシートの下のタブに請求先の会社名を入れA社 B社 C社 ・・・・・・...続きを読む

Aベストアンサー

F社で保存してもA B D も通常上書きされているようですが時々 A社が上書きされていない様なのです

保存方法としてははどちらも同じです、
ファイル名はシート全部の集合つまりブックについており、保存はブックで行われますので、
各シートごとには保存必要はありません。

上書きできていないのは、おそらく保存時互換性チエックを続行したとき、
2003にない項目があったのではないでしょうか。

参考に、開くときは直接ファイル名をダブルクリックしても開きます。
同じ目的達成にいろんな方法があります、やりやすい方法を見つけましょう。

奥が深い!

QEXCELで入力したものが違うシートにコピーされるようにするには・・

EXCELで、あるシートで入力した数値や文字が違うシートにそっくりコピーされるようにしたいのですが・・・
違うシートに同じ数値や文字をいちいち入力するのがめんどうだったので・・・(あと、入力間違えをすることもあると思ったので)
どなたか教えてください。宜しくお願い致します。

Aベストアンサー

同じブック間でも違うブック間でも、
リンク貼り付けという方法があります。

多分ご質問では、最初のページに「2006年」と入力したら
次からのページの同じ場所に「2006年」と表示させたい、と、こんな感じではないでしょうか?

あるシート(貼り付け元)の範囲を選択し、コピーします。
違うシート(貼り付け先)の1セルを右クリックし、形式を選択して貼り付けで出た窓の下に
「リンク貼り付け」ボタンがありますから、それを押して下さい。

あるシートに入力した文字が違うシートに表示されます。
ただし書式は、違うシートのセルの書式の通り表示されます。
また、あるシートのセルに何も入力されていなければ、
違うシートの該当セルには「0」と表示されます。
この「0を表示しない方法もありますので、
具体的にどのシートのセル番地からどのシートのセル番地、という風に書いてください。
1つのセルのみ貼り付ける場合と、2つ以上の範囲を貼り付ける場合で
貼り付けられ方が微妙に違います。

さて、上手に貼り付けられたら、違うシートに貼り付けられたそのセルを、
また別なシートに次々にコピーしていきます。
1回リンク貼り付けをしたら、このように使いまわすことができます。

あまりにも情報が少ない中回答させていただいたのですが、
上記の中で当てはまる部分があったでしょうか?

実際貼り付けてみて、その後を報告してください。

同じブック間でも違うブック間でも、
リンク貼り付けという方法があります。

多分ご質問では、最初のページに「2006年」と入力したら
次からのページの同じ場所に「2006年」と表示させたい、と、こんな感じではないでしょうか?

あるシート(貼り付け元)の範囲を選択し、コピーします。
違うシート(貼り付け先)の1セルを右クリックし、形式を選択して貼り付けで出た窓の下に
「リンク貼り付け」ボタンがありますから、それを押して下さい。

あるシートに入力した文字が違うシートに表示されます。...続きを読む

QEXCELマクロで上書きメッセージ無しで保存する方法

EXCELマクロで上書きメッセージ無しで保存する方法をお願いします
ActiveWorkbook.SaveAs "C:\Documents andSettings\Nakatani\MyDocuments\Book1.xls"
の様にするとすでにファイルがある場合上書きメッセージが出ます
メッセージを出さずに上書きするプログラミングを教えて下さい
宜しくお願いします

Aベストアンサー

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs "C:\Documents andSettings\Nakatani\MyDocuments\Book1.xls"
Application.DisplayAlerts = True

Q「コンパイルエラー 変数が定義されていません」

キーワード検索ボックスを作ろうとしていますが、途中マクロを実行すると、「コンパイルエラー 変数が定義されていません」と出て、
Sub 品名検索()の部分が黄色くなり、そのすぐ下のans =が青くなっています。
どうすればよいのでしょうか?
作ったコードは以下です。

Sub 品名検索()
ans = InputBox("文字列を入力してください")
ans = StrConv(ans, vbNarrow) '全角入力を半角に変換
With ActiveSheet
If .AutoFilterMode Then 'オートフィルタモードがオンなら
.AutoFilterMode = False 'リセットする
End If
.Range("A4:IV4").AutoFilter 'オートフィルタモードをセット
.Range("A4:IV4").AutoFilter Field:=5, Criteria1:="=*" & ans & "*" '5つ目のフィルターに検索文字
End With
End Sub

これでE4セルをダブルクリックすると、表示が出てとまってしまいました。

キーワード検索ボックスを作ろうとしていますが、途中マクロを実行すると、「コンパイルエラー 変数が定義されていません」と出て、
Sub 品名検索()の部分が黄色くなり、そのすぐ下のans =が青くなっています。
どうすればよいのでしょうか?
作ったコードは以下です。

Sub 品名検索()
ans = InputBox("文字列を入力してください")
ans = StrConv(ans, vbNarrow) '全角入力を半角に変換
With ActiveSheet
If .AutoFilterMode Then 'オートフィルタモードがオンなら
.AutoFilterMode = False 'リセットする
End I...続きを読む

Aベストアンサー

こんにちは。

使用している変数ansが定義されていないのではないでしょうか?

ソースの上の一番上に"Option Explicit"と書いてあると、使用する変数は必ず宣言が必要となります。(これはエディタのツール→オプションで宣言を強制するかを設定できます。)

回避策としては、Sub 品名検索()・・・の下に、

Dim ans as String

と追加してみてください。

Dim 変数名 as 型

で変数を宣言するということになります。

Q(Excel)あるセルに文字を入力しただけで、同じブック内のほかのワークシートにも、同じ文字が自動的に入るようにするには?

こんにちは。
質問内容はタイトルのとおりです。

あるワークシートのあるセルに文字を入力すると、ほかのワークシートのセルにも同じ文字が自動的に書き込まれる方法を知りたいです(ブックは同じ)。複数のワークシートを制御するには、やはりマクロを使うのでしょうか?

よろしくお願いします。

Aベストアンサー

clam_chowderさん、こんにちは。

Sheet1のA1にたとえば「100」と入力しますね。
Sheet2のA1に、これと同じ数値を表示するには、
 =Sheet1!A1
でOKです。

数式をいれるのが苦手なら、
Sheet2のA1セルで「=」を入力すると、数式入力状態に入りますから、
ここでSheet1のシートタブをクリックし、
リンクしたいA1セルをクリックしてEnterすると、
自動的にさきほどと同じ式が入ります。

QエクセルVBA 別シートの複数のセルの値をコピーする方法

いつもお世話になります。

Dim sh1, sh2 As Worksheet
Set sh1 = Worksheets("sheet1")
Set sh2 = Worksheets("sheet2")

sh1.Range("C6").Value = sh2.Range("F5").Value
として、1つのセルの値ならコピーできるのですが、
sh1.Range("C6:C10").Value = sh2.Range("F5;F9").Value
としても、セルの値を持ってくることができません。
どのように書けば良いのでしょうか?

ちなみに今は、
sh2.Range("F5:F9").Copy
sh1.Range("C5:C9").PasteSpecial Paste:=xlValues
としているのですが、上記だとセルを範囲指定してしまって作業が見えるのでカッコ悪いのです。

Aベストアンサー

7-samuraiの質問ですみません。
No5のimogasiさん、いつもお世話様です。

Sub test01()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("sheet2")
Set sh2 = Worksheets("sheet1")
sh1.Range("c1:c5").Value = sh2.Range("A1:A5").Value
End Sub

で、うまくいきますよ。
複数セルの場合Valueは省略できないようです。

QEXCELのVBAでシートコピーをしたとき元のマクロを削除するには?

VBAのマクロでシートのコピーをしたいのですが、元のシートにはVBAのコードが含まれています。コピーするのはデータだけのコピーが必要で、マクロ自体は必要ないのですが、それを削除するコードはどのように書いたらいいのでしょうか?
どうしてもコピーしたファイルを開くと「マクロが含まれています」という確認メッセージが出てしまうのですが、それもなくしたいのです。
シートにフォームのボタンが配置されている場合も同様に、そのボタン自体をなくした状態でコピーを行いたいのですが・・・。プログラムで行うのは不可能なのでしょうか?

Aベストアンサー

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け
Sheets("Sheet1").Name = "コピー"
Application.CutCopyMode = False
Application.SheetsInNewWorkbook = sc
ActiveWorkbook.Close
ThisWorkbook.Activate
End Sub

No2です。
サンプルコードを書いてみました。
「オリジナル」という名前のシートを別ブックとしてコピペ保存します。

Sub サンプル()
Dim sc As Integer
sc = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1
ThisWorkbook.Sheets("オリジナル").Cells.Copy 'コピー
Workbooks.Add 'ブック追加
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlValues '値貼り付け
Sheets("Sheet1").Range("A1").PasteSpecial Paste:=xlFormats '書式貼り付け...続きを読む

QExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。

以下のようなプログラムをVBAで作成したいと考えています。

A1のセルに値があれば、その値をB1に返す。
次にA2のセルに値があれば、その値をB2に返す。
A行に値がある一番下のセルまで同じようなことをさせたいと考えています。

VBAは初心者です。
どなかた宜しくお願い致します。

Aベストアンサー

#2さんと似たものですが・・・・参考にしてください。

Sub test001()
Dim i As Long
i = 1
Do While Cells(i, 1) <> ""
Cells(i, 2) = Cells(i, 1)
i = i + 1
Loop
End Sub


人気Q&Aランキング