- ベストアンサー
VBA シート間の同期(列、行、選択範囲)
- VBAを使用して、Excelのシート間でセルの同期をする方法について質問です。
- シート間の同期でセルの同期は他の質問を参照してできましたが、行や列での同期/相互参照は、どのように書けばいいのでしょうか。
- また、範囲の同期についても質問があります。sheet1のA列とsheet2のB列、またはsheet1のA1:C3とsheet2のD4:F6などの範囲を同期する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
シート1: private sub Worksheet_Change(byval Target as excel.range) dim h as range on error resume next application.enableevents = false for each h in application.intersect(target, range("A:A")) worksheets("Sheet2").cells(h.row, "B").value = h.value next application.enableevents = true end sub シート2: private sub Worksheet_Change(byval Target as excel.range) dim h as range on error resume next application.enableevents = false for each h in application.intersect(target, range("B:B")) worksheets("Sheet1").cells(h.row, "A").value = h.value next application.enableevents = true end sub #補足 次の観点で作成します ○A列やB列の複数セルに同時に編集したような場合もエラーを起こさずに反応する事 ○A列をB列に(同逆)反映するその操作が不要なイベントの引き金にさせない事
その他の回答 (1)
- Nouble
- ベストアンサー率18% (330/1783)
既に回答は出ているようなので、横から少し解説を ネットで読んだのですが、 動きをトレースすると 「此、どうなの?」 と、いう点についてよく解ります。 操作する人が シート1の当該セルを書き換えます するとシート1のイベントがサブルーティンコールのように発生して 以前の何物をもが終わる前にシート2の当該セルと書き換えます。 するとシート2のイベントがサブルーティンコールのように発生して 以前の何物をもが終わる前にシート1の当該セルを書き換えます。 するとシート1のイベントがサブルーティンコールのように発生して 以前の何物をもが終わる前にシート2の当該セルと書き換えます。 するとシート2のイベントがサブルーティンコールのように発生して 以前の何物をもが終わる前にシート1の当該セルを書き換えます。 するとシート1のイベントがサブルーティンコールのように発生して 以前の何物をもが終わる前にシート2の当該セルと書き換えます。 するとシート2のイベントがサブルーティンコールのように発生して 以前の何物をもが終わる前にシート1の当該セルを書き換えます。 するとシート1のイベントがサブルーティンコールのように発生して 以前の何物をもが終わる前にシート2の当該セルと書き換えます。 するとシート2のイベントがサブルーティンコールのように発生して 以前の何物をもが終わる前にシート1の当該セルを書き換えます。 するとシート1のイベントがサブルーティンコールのように発生して 以前の何物をもが終わる前にシート2の当該セルと書き換えます。 するとシート2のイベントがサブルーティンコールのように発生して 以前の何物をもが終わる前にシート1の当該セルを書き換えます。 … このように 全て何もENDを迎えずに ルーティーンが延々積み重なっていきます。 正に… ですね。 あごが床を突き抜けます。 一切終わりゃしないですよね? なので此を避けるために イベント発生を抑制してやる必要があるわけです。 へ? 抑制中の他のイベント発生は… て? 済みません、知ったこっちゃありません 滝汗(^_^;) 少なくとも私の今の能力では対処不能ですね、 如何でしょうか? お役に立てていたならば幸いです。
お礼
先ほど”お礼入力”を入れた後に気づきましたが、 ”お礼入力”に加えて”補足”という欄にコメントを残さなければ一般に公開されず外からは、貴殿の回答をスルーしてるように見えるのですね。。 しかも”解決済み”にしたら、 質問のステータスも戻せないのですね。。。 お気を悪くされましたら、 大変申し訳ございませんでした。
お礼
ありがとうございます。 当方の要求する動作を確認しました。 回答:No.2様の回答を見まして、 補足事項が重要な部分であると認識しています。 上記codeを基に色々と拡張しながら勉強しています。 複数の列と任意のセルを同期させるのに1枚のシート上に 纏めて書き方などは成功しましたが、 sheet1の”A1:C3”とsheet2の”D4:F6”はどう書くのでしょうか。 色々と試行錯誤しましたが、 どうもうまくいきません。。 お手すきの時に併せてご教授いただければ幸甚です。 OKwaveもVBAも2日目で、、、 どうも後手後手に回っています。。。