
No.4ベストアンサー
- 回答日時:
No.2 のmatsu_junです。
作業用シートを作ることになってもよろしければ以下参照ください。1) まずは新しいシートを作成してください。シート名は基本的には「DataBase」としていますが
既存シートのシート名とかぶる場合はお好きな名前を付けていただいて結構です。
2) 下の図(図がずれていたらごめんなさい)のように、A列、C列にシート名、B列、D列にセル名を
記入していってください。B列、D列のセル名は、やはり絶対参照($付き)で記入してください。
同じ行同士で値の相互リンクをします。(Sheet1のA1セルと、Sheet2のA2セル・・・)
どれだけ下に追加していってもらってもOKです。
┃ A ┃ B ┃ C ┃ D ┃
━━━╋━━━╋━━━╋━━━╋━━━╋━
1 ┃Sheet1│$A$1 │Sheet2│$A$2 │
━━━╋───┼───┼───┼───┼─
2 ┃Sheet3│$D$5 │Sheet2│$C$1 │
━━━╋───┼───┼───┼───┼─
3 ┃Sheet2│$B$4 │Sheet3│$D$7 │
━━━╋───┼───┼───┼───┼─
4 ┃Sheet1│$E$1 │Sheet3│$E$8 │
━━━╋───┼───┼───┼───┼─
5 ┃ │ │ │ │
━━━╋───┼───┼───┼───┼─
3) 作業用シートが表示されるのを嫌うのであれば、メニューから、
「書式(O)」-「シート(H)」-「表示しない(H)」を選択し、非表示にしてください。
4) 以下を前回と同じ場所に上書きします。(前のものは消してください)
なお、1)で任意のシート名をつけた場合は、下の
「ここを自由に変更できます」というところを変更してください。
'ここから------------------------------------------------------------------------
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
'ここを自由に変更できます-----------------------------------------------
データ格納シート名$ = "DataBase"
'ここまで自由に変更できます---------------------------------------------
Application.EnableEvents = False
On Error GoTo ERREND
If Sh.Name = データ格納シート名 Then GoTo ERREND
ERow# = Worksheets(データ格納シート名).Cells(65536, 1).End(xlUp).Row
With Worksheets(データ格納シート名).Range("A1:D" & CStr(ERow))
Set x = .Find(Target.Address, LookAt:=xlWhole, MatchCase:=False)
If Not x Is Nothing Then
ATmp = x.Address
If x.Offset(0, -1).Value <> Sh.Name Then
Do
Set x = .FindNext(x)
If x.Address = ATmp Then GoTo ERREND
Loop While (x.Offset(0, -1).Value <> Sh.Name)
End If
End If
Set y = x.Offset(0, (x.Column / 2 - 1.5) * -4)
Worksheets(y.Offset(0, -1).Value).Range(y.Value).Value = _
Worksheets(x.Offset(0, -1).Value).Range(x.Value).Value
End With
ERREND:
Application.EnableEvents = True
End Sub
'ここまで------------------------------------------------------------------------
5) 以上で完成です。相互リンクを追加したい場合は最初に作ったデータベースシートに
追記すればOKです。追記した後にどちらかのセルの値を変更したら、相互リンク先の
セルの値も同期するようになります。
No.3
- 回答日時:
皆さんがマクロを使ったハイレベルな回答を寄せて
いらっしゃるので
ご質問者のお考えとは異なる気がするのですが、
「循環参照」を利用した低レベルな方法を書いておきます。
EXCELのメニューから
[ツール] メニューの [オプション] をクリックし、[計算方法] タブをクリック。
[反復計算] チェック ボックスをオンに。
[最大反復回数]にデフォルトで「100」などと入力されていれば
そのまま変更せず。
[変化の最大値] にデフォルトで「0.001」などと入力されていれば
そのまま変更せず。
OKをクリックして閉じる。
リンクさせべきsheet1のA1とsheet2のB2にそれぞれ
以下のように記述
Sheet1のA1には
=Sheet2!B2
と記述する。すると「0」が表示される。
Sheet2のB1には
=Sheet1!A1
と記述する。すると、こちらも「0」が表示される。
オートフィルを利用するなどして、それぞれのSheet
の対応位置に同様に記述しておく。
このsheetを名前を付けて保存しておく。
この状態でSheet1のA1に数値を入力すると
Sheet2のB2にその値が反映されますし、
Sheet2のB2に数値を入力すると
Sheet1のA1にその値が反映されます。
ただし、このリンクは
Sheet1から
Shett2から
のいずれか1回のみ有効です。
従ってご質問者のケースでSheet1のA1に数値を入力して、
Sheet2のB2に反映された後にB2に新たな数値を入力しても
Sheet1のA1には反映されません。
このためこのSheetを一度使って上書き保存してしまうと効果が
なくなってしまいます。
必ず異なる名前で保存し、再利用するときは最初に保存した
オリジナルなSheetを呼び出して使用する必要があります。
No.2
- 回答日時:
マクロを使えば簡単ですが、試してみてください。
'ここから------------------------------------------------------------------------
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Application.EnableEvents = False
On Error GoTo ERREND
'ここを自由に変更してください----------------------------------------------------
ShNam1$ = "Sheet1"
ShNam2$ = "Sheet2"
CellNam1$ = "$A$1"
CellNam2$ = "$B$2"
'ここまで変更可能----------------------------------------------------------------
If Sh.Name = ShNam1 And Target.Address = CellNam1 Then
Worksheets(ShNam2).Range(CellNam2).Value = Target.Value
ElseIf Sh.Name = ShNam2 And Target.Address = CellNam2 Then
Worksheets(ShNam1).Range(CellNam1).Value = Target.Value
End If
ERREND:
Application.EnableEvents = True
End Sub
'ここまで------------------------------------------------------------------------
貼り付け方が分からない場合は以下を参照してください
1) 目的のブックを開いたら、Altキーを押しながらF11キーを押し、Microsoft Visual Basicを開く
(他のブック(Excelファイル)は開いていない方が分かりやすいです)
2) 開いたMicrosoft Visual Basicの左側に、「プロジェクト-VBAProject」と書かれた
一見エクスプローラ風のウィンドウがあります。
3) VBAProject (ブック名) の、「Microsoft Excel Object」の、「ThisWorkbook」を
ダブルクリックすると、ウィンドウの右側がグレーから白くなります。
4) 白くなった部分に、上の「ここから」から「ここまで」を貼り付けます。
おまけ
2つのシート名、セル名は自由に変更できます。
ソース中の、「ここを自由に変更してください」と書かれた部分の下4行、
""に囲まれた部分を変更してください。ただし、セル名は$付きのものにしてください。
ありがとうございます。前に教えてくださった方にも質問をしてしまっているのですが、実際はリンクさせたいセルがひとつのシートに複数あります。その場合はどのようにしたら良いかを教えてください。
No.1
- 回答日時:
マクロ(VBA)を利用します。
(他の方法が思いつかないので...)
Bisual Basic Editor を開いて、Sheet1のコードウィンドウに下記のコードをコピペします。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 1 Then
Worksheets("Sheet2").Cells(2, 2) = Worksheets("Sheet1").Cells(1, 1).Value
End If
End Sub
同様に、Sheet2のコードウィンドウに下記のコードをコピペします。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 2 And Target.Column = 2 Then
Worksheets("Sheet1").Cells(1, 1).Value = Worksheets("Sheet2").Cells(2, 2).Value
End If
End Sub
・マクロは自動的に実行されるので、自分での実行は不要です。
・Worksheets("xxx")のxxxには実際のシート見出し名を入力してください。
・Row=xは実際の行番号を指定してください。
・Column=xは列番号を整数で指定します。(C列なら、3)
・Cells(x,x)は、Cells(行番号、列番号)です。
実際に環境に合わせて、シート見出しの名前や行番号・列番号を変更してお使い下さい。
ありがとうございます。リンクしました。ただ、実際はリンクさせたい箇所が複数個あります。その場合はどのようにしたら良いか、よろしければ教えてください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Excel(エクセル) エクセルで 例えばA1のセルに1+1 と入力すると B1のセルに2 と答えが出る関数があったと思いま 8 2022/12/16 20:57
- 日本語 読解力の質問です(Excel含む) 12 2022/08/02 13:25
- Excel(エクセル) エクセル関数の質問 5 2022/04/20 09:46
- Excel(エクセル) エクセル VBA セルの結合 2 2022/09/07 11:48
- Excel(エクセル) エクセルでセルに何らかの文字が入力されたらそれを任意の数値として認識させる方法がしりたいです。 3 2023/03/16 20:19
- Excel(エクセル) エクセルで、特定のセルの内容を更新すると、別の特定セルに 更新日付が自動的に表示させる方法はあります 1 2022/11/14 21:03
- Excel(エクセル) エクセルで、例えばAのセルの値次第で、Bのセルの値を自動入力する方法を教えてください。 2 2022/08/02 12:10
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) エクセル・セルに数式を入力してセル指定計算 2 2023/04/21 12:46
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
9月17日でサービス終了らし...
-
エクセル ドロップダウンリスト...
-
特定のセルだけ結果がおかしい...
-
エクセルのdatedif関数を使って...
-
エクセルの循環参照、?
-
【関数】同じ関数なのに、エラ...
-
【マクロ】列を折りたたみ非表...
-
【マクロ】【配列】3つのシー...
-
【マクロ】アクティブセルの時...
-
iPhoneのExcelアプリで、別のシ...
-
【マクロ】EXCELで読込したCSV...
-
【条件付き書式】シートの中で...
-
【マクロ】3行に上から下に並...
-
【マクロ】オートフィルターの...
-
【マクロ】A列にある、日付(本...
-
vba テキストボックスとリフト...
-
エクセル
-
【エクセル】期限アラートについて
-
Excel 複数のセルが一致すると...
-
【マクロ】WEBシステムから保存...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelファイルを開くと私だけVA...
-
エクセルについてどう関数を使...
-
マクロ・VBAで、当該ファイルの...
-
エクセルのセルに画像は埋め込...
-
エクセルで、一部のセルだけ固...
-
【マクロ、画像あり】A表かB表...
-
エクセルでカウントする
-
【マクロ】コードを少しでも、...
-
VBA_日時のソート
-
エクセルで教えてください。 例...
-
エクセル 月間シフト表で曜日ご...
-
セルの左に余白を付ける
-
エクセル
-
エクセルについて教えてください
-
2枚のエクセル表で数字をマッチ...
-
ExcelのIF関数との組み合わせの...
-
エクセルのファイルのコピーを...
-
エクセルで二つのブックの違い...
-
空白処理を空白に
-
Excelのチェックボックスについ...
おすすめ情報