• ベストアンサー

マクロをつかうしかないですか?

シート1のA1、シート2のA1、シート3のA1を同じ数字(文字)を入れたいのです。  たとえばシート1のA1(以下略します)を変更した場合シート2、シート3を自動的に変更  シート2を変更した場合はシート1、シート3を変更  シート3を変更した場合はシート1、シート2を変更 ちなみにエクセル2003です。 管理用のシートを作成し、そのシートのA1とシート1~シート3を参照させ、管理用のシートのA1を変更するマクロを作るしかないのでしょうか? またアクセスでしなさいという意見は申し訳ありませんが、却下とします。

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

  • ベストアンサー
  • jindon
  • ベストアンサー率43% (50/116)
回答No.5

参考になりますか? >3つではないのでコレからかんがります 下記コードをThisWorkbookのモジュールに貼り付けます。 Sub 変更() Dim i As Integer, ws As Worksheet For Each ws In Worksheets Application.EnableEvents = False If ws.Name <> "管理" Then ws.Range("A1").Value = ActiveSheet.Range("A1").Value End If Next Application.EnableEvents = True End Sub 意味: ブック中のシートで 管理 と名前の付いたシート以外のシートの A1 の値を A1 を変更したシートの値にします。 コード中の If ws.Name <> "管理" の部分で変更したくないシート名を指定していますので、""内を適当に変えてやればそれ以外のシートを変更します。 又、変更したくないシートが複数の場合は、 If ws.Name <> "管理" And ws.Name <> "シート名" And ws.Name <> "シート名" then という具合に And で続けていきます。 各シートのモジュールには、 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 1 And Target.Column = 1 Then ThisWorkbook.変更 End If End Sub としておけば、何か修正が必要になった場合はSub 変更 の内容を変えれば良いので、後が楽になりますね。

lucky_123
質問者

お礼

皆様 ご回答・アドバイス等ありがとうございます。

その他の回答 (4)

  • sydneyh
  • ベストアンサー率34% (664/1947)
回答No.4

シート1~3を作業グループとし、全てのシートのA1を一括変更するやり方はどうでしょう。

lucky_123
質問者

補足

毎回、グループ化するのなら、意味がない(毎回、管理用のsheetに移動し、戻るのが面倒だからマクロでやろうかなと思ったのですから)ですよね・・・。(たぶん) 回答・アドバイス等ありがとうございます。

  • jindon
  • ベストアンサー率43% (50/116)
回答No.3

VBA以外では無理だと思います。 各シートのモジュールに Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Row <> 1) + (Target.Column <> 1) Then Exit Sub Application.EnableEvents = False Sheets("Sheet1").Cells(1, 1).Value = Target.Value Sheets("Sheet2").Cells(1, 1).Value = Target.Value Sheets("Sheet3").Cells(1, 1).Value = Target.Value Application.EnableEvents = True End Sub を貼り付ける。 シートのどれかのA1が変更された場合、Sheet1からSheet3迄のA1の値は最後に変更された値になります。

lucky_123
質問者

お礼

なんとかできましたが、3つではないのでコレからかんがります。w ご回答・アドバイス等ありがとうございます。

  • jindon
  • ベストアンサー率43% (50/116)
回答No.2

VBA以外では無理だと思います。 各シートのモジュールに Private Sub Worksheet_Change(ByVal Target As Range) If (Target.Row <> 1) + (Target.Column <> 1) Then Exit Sub Application.EnableEvents = False Sheets("Sheet1").Cells(1, 1).Value = Target.Value Sheets("Sheet2").Cells(1, 1).Value = Target.Value Sheets("Sheet3").Cells(1, 1).Value = Target.Value Application.EnableEvents = True End Sub を貼り付ける。 シートのどれかのA1が変更された場合、Sheet1からSheet3迄のA1の値は最後に変更された値になります。

lucky_123
質問者

お礼

なんとかできましたが、3つではないのでコレからかんがります。w ご回答・アドバイス等ありがとうございます。 ※50%の確率で、お礼が消されるので、両方にお礼かいときます。w

  • OMP
  • ベストアンサー率23% (132/553)
回答No.1

Sheet1,Sheet2,Sheet3という名前と仮定します。 Sheet2のA1とSheet3のA1に以下の関数を入れてください =Sheet1!A1 これで出来ます。

lucky_123
質問者

お礼

何をしたいのかよく分からない気もしますので、少し具体的に書きます。 シート4にデータが含まれているとします。 シート1~シート3はシート4のデータを参照して、表を作成します。主キー(?)によっては表が1枚になったり2枚になったりします。 コレを管理するのがエクセルで管理するのは少々面倒だと思います。のでシート1には1枚目、シート2には2枚目(表が完全にNULLの場合あり)を表示しょうとおもっているのです。 (しつこいですがアクセスで表や計算をさせるのは少し大変なので嫌です。) でシート1でもシート2でも自由に主キーを変更し、関連するシート(シート1ならシート2、シート2ならシート1)も同時に変更をしたいのです。

lucky_123
質問者

補足

それだとシート1のA1を変えても、シート2のA1、シート3のA1はかわりませんよね? ほかのシートに同じようにすると循環エラーになるかと思います。  ご回答・アドバイス等ありがとうございます。

関連するQ&A

専門家に質問してみよう