• ベストアンサー

エクセル:ファイルを開いただけでどこか変更されてしまう

マクロを色々書き込んだエクセルファイルがあります。 このファイルを開き、何もせずに「×」を押して閉じようとしたのですが、 「****への変更を保存しますか?」と表示されてしまいます。 起動した瞬間に何か変更されているようなのですが、 そのような状態になるマクロの書き方というか、 原因に心当たりがありましたら、教えて頂きたいです。 常に保存を確認するような設定でもあるのでしょうか? シートに書き込んでいるマクロは全て、 Private Sub Worksheet_Change(ByVal Target As Range)  AAA Target  'Targetを持ってAAAプロシージャへ飛ぶ End Sub のように書いており、 セルに何か書き込んだ場合に別プロシージャへ飛ぶ機能しかありません。 標準モジュールは10個くらい作成してあり、 これらも、セルに何か書き込んだ際に飛んで来る先として用意しているので、 ファイルを開いた時に何かするようには思えません。 ThisWorkBookには何も書いていません。 ほぼノーヒントみたいなものですが、 何かわかる方いましたらよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

マクロなどなくても、 たとえばあるセルに =today() とあっただけでも同様のことになります。 参考になりますでしょうか?

tktk1228
質問者

お礼

回答ありがとうございます。 まさにソレでした。 人様の作成したシートを流用していたのですが、 =YEAR(NOW())&"/"&MONTH(NOW())&"/"&DAY(NOW()) と書かれていました。 元々のファイルは「保存しますか?」が出なかったのですが、 これは、変更があってもそのメッセージを出さない、というマクロを組んでいたようです。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • mshr1962
  • ベストアンサー率39% (7418/18948)
回答No.4

確認1 TODAY関数,NOW関数,RAND関数などを使っている。 確認2 標準モジュールのAuto_Openサブルーチンでシートやセルの移動を行なっている。 確認3 手動でシートを移動している。

tktk1228
質問者

お礼

回答ありがとうございます。 日付を取得する関数を使っていたためでした。 マクロでもAuto_Openなる自動的に何かするような記述ができるんですね。

全文を見る
すると、全ての回答が全文表示されます。
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.3

エクセルのブックは「開いた瞬間」に、開いたパソコンに繋がってる「通常使うプリンタ」の設定を元に「自動改ページ」が自動挿入されるので「起動して開いた瞬間にブックは変更済み」になります。 また「現在のカーソル位置」も記憶する為「上書き保存して変更済みの状態から保存済みの状態になっても、カーソルを隣のセルに動かしただけ」で「変更済み」になります。 なので「何も入力してない、まっさらのブック」であっても「×」で閉じると、必ず「変更を保存するか?」と聞かれます。これを回避する方法はありません。

tktk1228
質問者

お礼

回答ありがとうございます。 どうやらマクロで「保存しますか?」を表示させないことが可能みたいなので、 (具体的なコードはわかりませんが、日付取得関数を使いながら保存の確認メッセージが出ないファイルがあるので) それを探してみようと思います。 これは「常に出さない」なので、それはそれで不便でもありますが…。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

マクロを使用しても変更を確認するような事はないのですが、 マクロ以外に関数を使っていませんか? Excelの関数の中には、ブックを開くと同時に自分自身を再計算するものがあります。 NOW関数で例を挙げると、 NOW関数は常に現在の日付と時刻を返す関数ですが、 ワークシート上にNOW関数を記述しておくと、 そのブックを開くと同時に関数の結果が更新されます。 関数を入力したセルの内容が変化するので、 ワークシートを編集したのと同じ結果になります。 そして、ブックを閉じるときに「変更を保存しますか?」 と確認されることになります。 ブックを開くと同時に再計算が行われる関数は、 NOW関数のほかにINDEX関数、AREAS関数、CELL関数、COLUMNS関数、 INDIRECT関数、OFFSET関数、ROWS関数、RAND関数、TODAY関数などがあります。 ブックの中でこられらの関数を使っていると、 自動的に再計算が行われ、「変更を保存しますか」と聞いてくることになります。 また、関数だけでなく、ワークシート上にリンクされた画像が含まれていると、 やはり自動的に再計算がされることもあります。 この場合も同様に、開いただけで「保存しますか?」と聞いてきます。

tktk1228
質問者

お礼

回答ありがとうございます。 あるセルに、今日の日付を表示するような関数を使っていました。 これは消したくないので、 諦めるかメッセージを表示しないマクロを使うかしようと思います。 他にも色々と詳しくありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • セルの値をファイル名にするには

    現在下記のマクロを入力しています。 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$10" Then Target.Offset(-6, 2).Value = Date End If End Sub この時 ファイル名を SHEET1のA1 セルの値を利用してファイル名にするために下記の内容を入れてブックを保存したいと考えています。 上記のマクロが入っていないときは上手く行くのですが下記を追加するにはどうすればいいかご指導いただけませんでしょうか。 宜しく御願いします。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 1 And Target.Column = 1 Then ActiveSheet.Name = Target.Value ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Target.Value End If End Sub

  • Excel VBA イベントプロシージャを2つ記述する(基本です)

    基本的な事なのですが、Excelのイベントプロシージャで2つプログラムを作るにはどうやって記述すればよいのでしょうか? 具体的には、worksheetのchangeイベントで、セルC5の値を変えた時と、セルG7の値を変えた時の2通りのマクロを作成したいのです。 Private Sub Worksheet_Change(ByVal Target As Range) C5を変えた時の処理 End Sub Private Sub Worksheet_Change(ByVal Target As Range) G7を変えた時の処理 End Sub このように書けばよいのでしょうか?そうするとTargetがかぶっておかしくなる気がします。。 お願いします。

  • EXCELで保存済みにしたい

    EXCELのマクロである処理をするプログラムを作っています。 その中でVBAでListBoxに項目を動的に追加しています。 ListBoxに項目を追加すると終了時、 「ListBox.xlsへの変更を保存しますか?」の確認ダイアログが出ています。 このメッセージを出したくないのですがどうしたらよいですか? 以下がそのソースです。 '------------------------------------------------------ Option Explicit 'ListBox1に項目を追加 Private Sub CommandButton1_Click() ListBox1.AddItem ("りんご") ListBox1.AddItem ("みかん") ThisWorkbook.Saved = True End Sub '保存済みの確認 Private Sub CommandButton2_Click() MsgBox ThisWorkbook.Saved End Sub 'セルを変更しても保存済みにする Private Sub Worksheet_Change(ByVal Target As Range) ThisWorkbook.Saved = True End Sub '--------------------------------------------------------- セルの変更はWorksheet_Changeイベントで  ThisWorkbook.Saved = True で確認ダイアログが出ないようにしています。 よろしくお願いします。

  • エクセルVBAに関して

    VBAの知識があまりないので教えて頂きたいのですが、セルの内容が変更されたら マクロが実行される Private Sub Worksheet_Change(ByVal Target As Range) というのがあるかと思います。 セルに書かれた関数によって、セルの内容が変化したときにマクロが実行されるVBA関数はあるのでしょうか?

  • Excel  関数をまたいだTargetの使用

    excel2013 OS はwindows8を使用しています。 Excelのマクロで、以下のコードについて質問です。(コード内の・・・は省略の意) Private Sub Worksheet_Change(ByVal Target As Range) Dim ・・・・・・・      ・      ・  If Target.Value = ・・・・・    Call myfunction End If End Sub Sub myfunction() If 条件 Then Target.Offset(0,1).Value = "aaa" End If End Sub このマクロのPrivate Sub Worksheet_Change(ByVal Target As Range)を実行するとエラーが 出ます。エラーの内容は「オブジェクト変数またはwithブロック変数が設定されていません」 となり、 Target.Offset(,1).Value = "aaa" の行が黄色く表示されます。 myfuncton内で使用しているTargetが何なのかがわからないというエラーだと理解しています。 そこで私は以下の2つを試しました。 1つめはうまくいかず、2つめは何か2度手間のような感じがするのですが、正常動作する ようです。 そこで質問なのですが、Targetをプロシージャをまたいで利用したい場合に一般的に用いら れている手法などがあれば教えて頂きたいです。 1つめ・・Targetをプロシージャをまたいで使えるようにコードの一番上の部分 、つまり、Private Sub Worksheet_Change(ByVal Target As Range)の一行上の 部分にDim Target As Range と宣言してみました。が、これはうまくいきませんでした。 2つめ・・適当な(この場合e)変数を宣言し、プロシージャをまたいで使用する。 Dim e As Range Private Sub Worksheet_Change(ByVal Target As Range) Dim ・・・・・・・      ・      ・  If Target.Value = ・・・・・ Set e = Target    Call myfunction End If End Sub Sub myfunction() If 条件 Then e.Offset(0,1).Value = "aaa" End If End Sub 以上何か良い方法があれば教えて頂きたいです。また不明な点があれば ご質問ください     

  • エクセルでセルをクリアされたら、自動的にセルの色を変更したい

    エクセルで、セルの値がDeleteキーなどでクリアされた場合に、 自動的にセルの色がかわるようにしたいのですが、 何かよい方法はないでしょうか? セルの内容が変更された場合のフォントの色を変えるために、 Private Sub Worksheet_Change(ByVal Target As Range) Target.Font.ColorIndex = 3 End Sub というマクロは設定しています。 これだとクリアされた場合、わからないので。。。 よろしくお願いします。

  • VBA マクロを動かさない

    (1)ある行のセルを変更したら動くマクロがあります。  Private Sub Worksheet_Change(ByVal Target As Range) (2)ある行のセルに数値を入れるマクロがあります。  Private Sub CommandButton_Click() (2)のマクロが動くと(1)がその後に発動して上書きをしてしまうようです。 これを発動させないようにスキップするにはどうしたらいいのでしょうか?

  • エクセルマクロ(VBA)で指定したセルが変化したときに実行するには?

    VBAでsheetの中のworksheet_changeなどでマクロを書くと、そのシー トの中のどのセルを変化させてもマクロが実行されるのですが、これ を、A1とc1とc2が変化したときだけ処理を実行させたいのです。 以下のマクロのどこかを編集すると、そのようなことが出来るのでし ょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ----実行する内容---- End Sub Private Sub Worksheet_Change(ByVal Target As Range) ----実行する内容---- End Sub

  • 2つのマクロを挿入すると動作せず

    現在、C10に値が入力されるとG4に発行日が表示される 下記のマクロを入力しています。 1 発行日の日付 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$C$10" Then Target.Offset(-6, 2).Value = Date End If End Sub この上のマクロのみは上手く作動しています。 ファイル名を自動で保存するために下記のマクロをしたいので追加しました。 2 ファイル名の自動保存   Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 1 And Target.Column = 1 Then ActiveSheet.Name = Target.Value ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Target.Value End If End Sub 3  上記の1+2で下記の如くし、いろいろトライをしていますが 上手くゆきません。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 1 And Target.Column = 1 Then ActiveSheet.Name = Target.Value ThisWorkbook.SaveAs ThisWorkbook.Path & "\" & Target.Value End If If Target.Address = "$C$10" Then Target.Offset(-6, 2).Value = Date End If End Sub ブック内は次のようなファイルです。 Sheet1(納品請求書1)~Sheet3(納品請求書3) Sheet4(月請求書) Sheet5(顧客登録) Sheet6(設定) Sheet7(領収書) Sheet8(file)  ここのA1に保存したいファイル名を入れています。 上手く表示されません。 困っています。 ここでご教授いただきたいのは 2のみのマクロだと問題なく「ファイル名とシート名」が自動的に表示され保存ができます。 私のやり方に何か問題があると思います。 上記の1(発行日の日付け)+2(ファイル名の自動保存)したときにはうまくいかず何かいい方法がないでしょうか。 お知恵をお貸し下さい。

  • エクセル95のマクロ

    エクセル95で Private Sub Worksheet_Change(ByVal Target As Range)  というのは使えるんでしょうか? リターン押したときに移るセルを操作したいので 代わりになるものでもあれば教えて頂きたいです。 よろしくお願いします。

専門家に質問してみよう