• ベストアンサー
  • すぐに回答を!

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

共感・応援の気持ちを伝えよう!

  • 回答数5
  • 閲覧数297
  • ありがとう数9

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

  • ベストアンサー
  • 回答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 と変えればよいでしょう。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • マクロの疑問

    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  (ByVal Target As Range)について

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

  • シートのイベント 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する” にはどうすればいいですか?

その他の回答 (4)

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

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

共感・感謝の気持ちを伝えよう!

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

質問者からの補足

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

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

こんにちは。 マクロにおける「シート名!セル番地」の指定の方法が全く間違っています。 また,自動起動マクロについても不適切な使い方です。 方法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 特に,シート,セルの指定方法などはマクロの基本中の基本なので,あまり独学だけでなく,簡単な参考書の最初のページだけでも勉強して頂いた方が良いでしょう。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

質問者からの補足

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • エクセル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 以上のように使ってみましたが、どれも「キャンセルしました」とメッセージは出るものの、直前の操作(入力、シート切替、セル移動)はキャンセルされませんでした。 どこが間違っているのでしょうか?

  • 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 というように追記していったのですが、エラーとなってしまいます。 お詳しい方がおられましたらお願いいたします。

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

    マクロで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でエラートラップがうまくいきません。

    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文のところでエラーがでます。 当方初心者でなぜエラーがでるのかわかりません。 わかりやすくご教授ください。 よろしくお願いします。

  • 複数のセルを選択しているかを取得するプロパティは?

    SelectionChangeイベントで 複数のセルを選択しているかを取得するプロパティってないのでしょうか? 今は、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Len(Target.Address) > 5 Then MsgBox "複数のセルが選択されています" End If End Sub こうしていますが、行数が多くなると文字も多くなってしまうので、このコードでは対応できません。 Rangeオブジェクトに何個セルが入ってるかを知る方法はありますか? ウォッチのTargetのcellsを見ても、どう見ればいいのかわかりません

  • カーソルを動かしたときは発動させたくありません

    エクセルの Worksheet_SelectionChangeイベントで --------------------------------------------------------- Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then MsgBox "$A$1です" End If End Sub --------------------------------------------------------- のコードを標準モジュールに書いて、A1セルをクリックすると、MsgBoxが表示させますが、 B1セルから、キーボードの「→」キーを押してA1に移動してもMsgboxが表示されてしまいます。 クリックした時はマクロを発動させたいのですが、カーソルを動かしたときは発動させたくありません。 そんな事は可能でしょうか?

  • エクセルVBA/イベント発生でコピペ不能はなぜ?

    シートに以下のマクロを設定すると、そのシート内ではコピーしたもののペーストが不能になります。 どうしてでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target.Interior.ColorIndex = 6 End Sub

  • Excel VBA セルの双方向同期のエラーについ

    エラーが発生して理由がわからないので、どなたか助言をお願いします。 以下のVBAにて、目的のセルにデータを入力すると、1回目は必ず添付写真の通りのエラーが出まして、デバッグをすると3行目が黄色でハイライトされます。 記述は以下の通りです。どうぞよろしくお願いします。 シートAへのVBA設定 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Sheets("シートB").Range("$B$1").Value = Sheets("シートA").Range("$A$1").Value End If End Sub シートBへのVBA設定 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$1" Then Sheets("シートA").Range("$A$1").Value = Sheets("シートB").Range("$B$1").Value End If End Sub

  • エクセルのカーソル移動 横スクロールを最後の入力列まで

    エクセルのカーソル移動について エクセルシートのコードはどこから貼り付け出来るのですか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Taget.Column=11 Then ActiveCell.Offset(1,-10).Select 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のところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。