- ベストアンサー
再再再質問:エクセルでマクロを使ってイコールで同じものを表示できますがどっち入力してもどちらにも反映する事は出来ますか?
http://okwave.jp/qa2600703.html で質問したのですが同じシートに何種類か入れると 名前を確認してくださいとエラーが出ます。 どうしたらいいでしょうか>< 宜しくお願い致します0^^0
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
benitier59さん、はようございます。merlionXXです。 うまくいかなかったようですね。 具体的にどううまくいかなかったのでしょう? エラーになる 無反応 わたしはあなたのそばにいて一緒にそうさしているのではないので、そういった情報をもらえないと何がどうなったのかわからないんです。 で、今もう一度昨日のコードを見直したところ、まずい点がありましたので修正します。ためしにまったく新しいエクセルのファイルを作成して、以下の手順で貼り付けて見てください。 1.シートのタブを右クリックし、「コードの表示」を選択。 2.出てきたVisualBasicEditor(白い部分)に下記のコードをコピペ。 '*****ここから下をコピペ***** Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address(False, False) Case "A1" C_NAME = "C1" Case "C1" C_NAME = "A1" Case "A2" C_NAME = "C2" Case "C2" C_NAME = "A2" Case "A3" C_NAME = "C3" Case "C3" C_NAME = "A3" Case Else Exit Sub End Select Application.EnableEvents = False Range(C_NAME) = Target.Value Application.EnableEvents = True End Sub '*****ここより上までをコピペ***** 3.Alt+F11キーでワークシートへもどります。 それから、http://odn.okwave.jp/qa2600765.html は解決したら締め切ってくださいね。
その他の回答 (5)
- merlionXX
- ベストアンサー率48% (1930/4007)
merlionXXです。 実はこれから飲み会で出かけなければいけないので、例を書いておきます。 数が多いなら#2さんのやり方の方がいいので、#2さんのをお借りします。 A1とC1,A2とC2,A3とC3の場合です。 なお、いちいち絶対参照で$A$1とか書くのがめんどうなのでAddressは相対参照にかえました。(False, False) Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address(False, False) Case "A1" C_NAME = "C1" Case "C1" C_NAME = "A1" Case "A2" C_NAME = "C2" Case "C2" C_NAME = "A2" Case "A3" C_NAME = "C3" Case "C3" C_NAME = "A3" End Select Application.EnableEvents = False Range(C_NAME) = Target.Value Application.EnableEvents = True End Sub 'ヾ(=^▽^=)ノふぁいと~v
補足
度々ご返答本当に有難うございます。 飲み会楽しんでくださいね0^^0 そのままコピーしたのですが やはり使えません。。。。 もうわけがわからないです>< 何か根本的な設定ができていないのでしょうか?
- merlionXX
- ベストアンサー率48% (1930/4007)
merlionXXです。 > #2さんのものをそのままコピーしてA1とC1が出来るか > 試したのですが出来ませんでした。 > やり方が悪いのでしょうか?>< どんなやりかたをしたのか、こちらではわかりませんよ~ Σ( ̄ロ ̄lll) お書きになったものをコピペするか、あるいは#1にも書きましたが、具体的にどのセルとどのセルをそうしたいのか書いてくれないと、これ以上答えられないですよ。
補足
ご返答有難うございます。 教えていただいた下記のものをそのままコピーしました。 これでA1とC1がどちらで入力しても反映されるのですよね?? 後はxとyに入れていけばと思ったのですが間違っていますか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$A$1" C_NAME = "C1" Case "$C$1" C_NAME = "A1" : : : Case "$X$n" C_NAME ="Ym" Case "$Y$m" C_NAME ="Xn" : : : Case Else End Select Application.EnableEvents = False Range(C_NAME) = Target.Value Application.EnableEvents = True End Sub
- merlionXX
- ベストアンサー率48% (1930/4007)
#1のmerlionXXです。 > コピーしてやったのですが > 出来ないんですがなぜでしょうか?><; ということは、 Private Sub Worksheet_Change(ByVal Target As Range) ~略~ End Sub というマクロコードを一つのSheetモジュールに複数書いたということですね? それならば、以前の質問でも 「先日のマクロとは同じシートで使わないで下さいね、競合してしまいますから。」と言っておいたように、競合してしまったのです。 Private Sub Worksheet_Changeって、そのSheetの値に変化があった場合に作動するマクロです。同じ名前のマクロを同一のモジュールには書けません。 その場合、数が少なければ、Ifで分岐させることもできますし、数が多ければ、#2さんが書かれたようなSelectCase構文で対処も出来ます。
補足
#2さんのものをそのままコピーしてA1とC1が出来るか 試したのですが出来ませんでした。 やり方が悪いのでしょうか?><
- FEX2053
- ベストアンサー率37% (7991/21371)
様子を見ていたんですが、やっぱりそこで引っかかりましたか。 あのマクロをいくつもコピーしたら、そういったエラーが出るのは ある意味当然です。あのプログラムは、シートの内容が変ったことを キックに動きますから、同じプログラムを複数書くと、どっちが動くか 分からなくなってエラーになるんです。 複数箇所でデータをコピーするなら、それ相応の対応が必要ですよ。 ということで。 Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$A$1" C_NAME = "C1" Case "$C$1" C_NAME = "A1" : : : Case "$X$n" C_NAME ="Ym" Case "$Y$m" C_NAME ="Xn" : : : Case Else End Select Application.EnableEvents = False Range(C_NAME) = Target.Value Application.EnableEvents = True End Sub 具体的にプログラムを説明すると、書き出す先のセル名を、書き込んだ セル名から指定して、最後でマクロの参照を止めておいて、書き出す という処理なんですね。 ですので、A1/C1の組と同様にXn/Ymの組を必要な分「Case」以下に追記 していけばオッケーです。
補足
度々お返事有難うございます^^ コピーしてやったのですが 出来ないんですがなぜでしょうか?><;
- merlionXX
- ベストアンサー率48% (1930/4007)
benitier59さんこんにちは。またお会いしましたね。(^o^)/ > 同じシートに何種類か入れると では、同じものを表示させたいのは、どのセルとどのセル、どのセルとどのセルというふうに、具体的にいってくれませんか?
お礼
完璧です!!!!≧▽≦ これでかなりいい表がつくれます!?0^^0 本当に有難うございました☆ ちなみに違う質問で出しているのですが 文字以外に画像はできるのでしょうか?