Excel VBA 他のシートに演算結果を入れたい

このQ&Aのポイント
  • A~Dのどのシートでもo1に入力したら、Z!p1にp1の値を放り込みたいのです。
  • 結果としてセルの移動を認識していないのか、まったく無反応です。
  • 違うシートには代入できない… ってことでしょうか?
回答を見る
  • ベストアンサー

Excel VBA 他のシートに演算結果を入れたい

例えば、A~Dというシートのいずれかのo1セルに数値を入力すると、演算結果がp1に入る場合。 A~Dのどのシートでもo1に入力したら、Z!p1にp1の値を放り込みたいのです。 で、以下のようなコードを書いたのですが、上手くいきません。 因みに、セルの移動方向はオプションで「右方向」に設定してあります。 ※結果としてセルの移動を認識していないのか、まったく無反応です。 ※Range("Z!$P$1") =… の行にブレークポイントを設定しても、引っかかりません。 何が悪いのかお教え頂ければ幸甚です。 >違うシートには代入できない… ってことでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$P$1" Then Range("Z!$P$1") = Range("$P$1") End If End Sub ※なお、出典元のSubは以下の様なもので、正常に動作していました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then Range("B1") = Range("B1")+1 End If End Sub

  • doxob
  • お礼率36% (14/38)

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

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

#1の回答者です。 >Target.Address = "$O$1"→Target.Address = "$P$1" とすると >今度はp1から抜けないと転送できませんでした。 あくまでも、O1に入力したら、の条件ですが、 前:Worksheets("Z").Range("P1").Value = Target.Value      ↓ Worksheets("Z").Range("P1").Value = Range("P1").Value と変えればよいでしょう。

doxob
質問者

お礼

返答が遅くなりました。 午後から色々やってみたのですが… あっ、本来の質問の件はクリアになりました。皆さん有難うございました。 ただ動作が不安定…と言うか、起動時は正常なんですが、"P1"を"Q1"に変更したりすると反応しなくなります。 この件はもう少し検証した後、別スレッドで質問します。 色々有難うございました。

その他の回答 (4)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.3です。 間違いがありました。 > 今のSheet名!P1 の部分は >=今のシート名!P1 です。 「=」を入れないと数式になりません。m(_ _)m

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんにちは! >Range("Z!$P$1") = Range("$P$1") の行を > Worksheets("Z").Range("P1") = Range("P1") とか >Worksheets("Z").Range("P1").Formula = "今のSheet名!P1" (「今のSheet名」はコード記載しているシート名です。) ではどうでしょうか?m(_ _)m

doxob
質問者

お礼

回答有難うございました。 残念ながら上手くいきませんでした(-_-;)

doxob
質問者

補足

WindFallerさん,keithinさん,tom04さん いろいろアドバイス有難う御座いました。 ひとつ気になる事があるのですが… 動作を確認するためにブレークポイントを設定すると、その後「継続」(F5)を押しても、ちゃんと動いていない様なのです。 ブックを閉じ再度開くと基本的に1回目は良いのですが、連続して作動しません。 なぜなんでしょうかねぇ(>_<)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

こんにちは。 マクロにおける「シート名!セル番地」の指定の方法が全く間違っています。 また,自動起動マクロについても不適切な使い方です。 方法1: シートAのシート名タブを右クリックしてコードの表示を選ぶ 今記入しているマクロを全て綺麗に削除し,改めて下記をコピー貼り付ける private sub Worksheet_Change(byval Target as excel.range)  if application.intersect(target, range("O1")) is nothing then exit sub  worksheets("Z").range("P1").value = range("P1").value end sub 同様に,シートB,C,Dそれぞれのシートモジュールにも,同じマクロを記入しておく 方法2: 方法1で記入したシートモジュールのマクロは全て綺麗に消去する VBE画面でプロジェクトエクスプローラを確認し,当該ブックのVBAProjectに含まれているThisWorkbookシートをWクリックして開く 現れたシートに下記をコピー貼り付ける private sub Workbook_SheetChange(byval Sh as object, byval Target as range)  if sh.name = "A" or sh.name = "B" or sh.name = "C" or sh.name = "D" then  if not application.intersect(target, sh.range("O1")) is nothing then   worksheets("Z").range("P1").value = sh.range("P1").value  end if  end if end sub 特に,シート,セルの指定方法などはマクロの基本中の基本なので,あまり独学だけでなく,簡単な参考書の最初のページだけでも勉強して頂いた方が良いでしょう。

doxob
質問者

お礼

早速のご回答ありがとうございました。 出来ました(*^^)v worksheets("Z")という表現があったんですね。 

doxob
質問者

補足

worksheets(~~)の後dotに続けて記述できるものはどんなものがあるのでしょう? 参考書を見てもその辺が曖昧でよく理解していません。

回答No.1

こんにちは。 ThisWorkbook モジュールに貼り付けてください。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)  If Sh.Name Like "[ABCD]" Then 'A-D   If Target.Address = "$O$1" Then    Application.EnableEvents = False    Worksheets("Z").Range("P1").Value = Target.Value    Application.EnableEvents = True   End If  End If End Sub

doxob
質問者

お礼

早速のご回答ありがとうございました。 これですと、o1からカーソルが移動した時にo1を転送してしまいました。 Target.Address = "$O$1"→Target.Address = "$P$1" とすると 今度はp1から抜けないと転送できませんでした。

関連するQ&A

  • シートのイベント VBA

    シートをクリックしたらシートをクリアしたいのですが クリックするセルがA1の場合は、マクロを実行させたくないのですが 下記のコードだとエラーになってしまいます。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Target.Range = Range("a1") Then Cells.Clear End If End Sub ”Range("a1")でなければ、Cells.Clearする” にはどうすればいいですか?

  • マクロの疑問

    Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address <> "A2" Then Range("A2").Select End If End Sub とすると、どのセルを選んでもA2に飛ぶのに、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "A3" Then Range("A2").Select End If End Sub とすると、A3を選んでも全く移動しないのはなぜでしょうか。 なにか落とし穴がありそうで。。。 よろしくお願いします。

  • エクセルVBAで Cancel=Trueの使い方

    Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_Deactivate() Cancel = True MsgBox "キャンセルしました" End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) Cancel = True MsgBox "キャンセルしました" End Sub 以上のように使ってみましたが、どれも「キャンセルしました」とメッセージは出るものの、直前の操作(入力、シート切替、セル移動)はキャンセルされませんでした。 どこが間違っているのでしょうか?

  • エクセルvba  (ByVal Target As Range)について

    シートのイベントプロシージャーが Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub となりますが (ByVal Target As Range)部分は何なのでしょうか? 何のためにあるのかわかりません。 Private Sub Worksheet_SelectionChange() End Sub としたらエラーが返ってきました。 理由を教えてください。 よろしくお願いします。

  • EXCELマクロでのシート間のデータ同期方法

    質問させていただきます。 EXCELにて、"シート1"のA1~C3と"シート2"のD4~F6を 同期化したく考えております。 ・いわゆる一方のシートが「読み取り専用」になってしまうリンク貼り付けではなく、シート1、シート2相互が書き換え可能の同期化です。 ・A1とD4、B3とE6、のように互いに照合箇所のセル同士を同期反映させたいと考えております。 なお、他の質問を参照したところ、 シート1のA1とシート2のD4の単一セルを同期かする方法は確認できました。(以下参照) ***************************************************************** シート1のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Worksheets("シート2").Range("D4") = Target End If End Sub シート2のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$4" Then Worksheets("シート1").Range("A1") = Target End If End Sub *************************************************************** これを参考にVBAの シート1のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$2" Then Worksheets("シート2").Range("D5") = Target End If End Sub シート2のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$5" Then Worksheets("シート2").Range("A2") = Target End If End Sub というように追記していったのですが、エラーとなってしまいます。 お詳しい方がおられましたらお願いいたします。

  • VBAでエラートラップがうまくいきません。

    VBAで次のようなプロシージャを実行してみました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   If Target.Value = " " Then          ~コード~   END IF END SUB すると複数のセルが選択されるとエラーがでます。そこで次のようにしてみました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   On Error GoTo エラー処理   If Target.Value = " " Then     On Error GoTo 0           ~コード~   END IF   EXIT SUB エラー処理:   EXIT SUB END SUB ところがこれでもやっぱりIF文のところでエラーがでます。 当方初心者でなぜエラーがでるのかわかりません。 わかりやすくご教授ください。 よろしくお願いします。

  • エクセル マクロを利用して繰り返して入力する方法

    マクロでA1B1C1D1E1F1セルに入力しF1入力後A2B2C2D2E2F2と 下方向へ繰り返し800行くらいまで入力し、それとB列はスキップしたいのですが下記の方法で別々のシートでは うまくいくのですが同じシ-ト内ではエラ-になってしまいます 次の行への移動 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 7 Then Cells(Target.Row + 1, 1).Select End If End Sub B列のスキップ Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Range("G1") <> "" Then If Target.Column = 2 Then Target.Offset(0, 1).Select End If End If End Sub どなたかご存じの方教えて下さい

  • データ更新時の処理について(エクセルVBA)

    セルA2に数字の66が入っているとして、セルA2を67に更新した瞬間に67-66という処理をさせたいのですが、下記の???の部分が分かりません。どなたか、教えてください。お願いします。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$2" Then  ??? End If End Sub

  • どこが間違ってますか? (エクセルVBAです)

    質問をご覧くださりありがとうございます。 どなたか助けていただけないでしょうか。 以下のコードの場合、B2セルをダブルクリックすればシート(1)が開くと思っていたのですが、B2以外のセルをダブルクリックしてもシート(1)が開いてしまいます。 どこが悪いのでしょうか。 詳しい方がいらっしゃいましたら、どうか教えてください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, cancel As Boolean) If Target = Range("B2") Then cancel = True Worksheets("シート(1)").Activate End If End Sub どうか、宜しくお願いいたします。

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

専門家に質問してみよう