• 締切済み

VBAの修正 Enterを押した後のセル移動について

以前、下記でお世話になった者です。 その節はありがとうございました。 「質問:ExcelでEnterを押したあとの移動先について06-03-07 23:03」 http://oshiete1.goo.ne.jp/qa2014068.html 「質問:No.2014068のつづきです。VBAで困ってます。06/03/09 22:06」 http://oshiete1.goo.ne.jp/qa2018448.html 当時のもので快調に使用できていましたが、社内システムの入れ替えでデータが増えたため、VBA(または関数)の修正をして使い勝手をよくしたいのです。 データシート名:[データ]に下記のコードが入っています。 シートのデータ範囲はA4:J65536で、I列に製品コードが入っています。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 11 Then Cells(ActiveCell.Row, 1).Select End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$2" Then Range("A65536").End(xlUp).Offset(, 0).Select End If End Sub このコードのおかげで「B2でEnterを押すとA列の「あ」が入っているセルに移動」できました。 これを「B2で製品コードを入力してEnterを押すと、データ範囲のI列を検索して該当レコードの行頭にセルが移動する」に変えたいのです。 ただし、I列の製品コードは1レコードにつき1コード(一品一様)ではありますが、現時点ですべてのコードづけが終わっていないためにB2で入力したものが無い確率の方が高いのです。 この場合は「あ」にセルが移動するようにしたいのですが、どのようにしたらよいのでしょうか。 ご回答よろしくお願いします。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.17

こんばんは。Wendy02です。 最初に、そろそろ、お礼側に書いてください。補足側に書くと、ついつい、そのままになってしまいます。お礼側に書いたほうが反応しやすいです。 >結果、結果、どのセルでEnterを押しても、This Workbook JumpingMacro が見つかりませんというメッセージが出ます。 しかし、「JumpingMacro が見つかりませんというメッセージが出ます。」というのは、前のマクロが残っているということを意味しています。Visual Basic Editor画面で、編集-検索で、「ThisWorkbook.JumpingMacro」という名前を検索して、その部分を削除してください。もし、無ければ、そのブックを一旦終了して、再度オープンすれば、消えているはずです。 新しいマクロ名は、"newJumpMacro" です。 '標準モジュール Sub Auto_Open  Application.OnKey "{Enter}", "newJumpMacro"  Application.OnKey "{~}", "newJumpMacro End Sub も、 Sub newJumpMacro()  ~ End Sub も、どちらも標準モジュールに入れてください。 >コントロールツールボタンの件ですが、作ったことがないのでよくわかりません。 >コントロールツールボックスのボタンアイコンをクリックしてボタンを作りましたが(見た目が凸型)、ボタンをクリックするごとに待機セルの位置が一行ずつ下がるだけで、本当はどう動作するとコード通りなのか(どうつくるものなのか)わかりませんでした…。 この件は、 http://oshiete1.goo.ne.jp/kotaeru.php3?qid=2876435 この#3 に書いた方法は、コントロールツールのリストボックスへのマクロの取り付け方です。貼り付けた後、ダブルクリックすると、Visual Basic Editor 画面に切り替わります。そして、#15 で書かれてある以下のマクロを使います。入れるのは、一行だけ  Call newJumpMacro でよいです。 'データSheet モジュールへ '----------------------------- Private Sub CommandButton1_Click()  Call newJumpMacro End Sub '----------------------------- なお、これは、[Enter] キーで起動するマクロと、共有しても、ぶつかることはありません。

situmon10hanako
質問者

お礼

Wendy02さん、こんばんは。 お返事が遅くなり申し訳ありません。 >最初に、そろそろ、お礼側に書いてください。 そうですね。 私も、Wendy02さんのアドバイスのおかげで解決しました、とお礼のお返事でしめくくりたくて操作しているのですが、うまくいかず、手間取らせていると感じています。 Wendy02さんのアドバイスは的確なのだろうと思います。 受けいれる側の私がうまくいかないのだと思います。 煮詰まると小さな違いにも気づかなくなります。 まだ解決はしていませんが、再度、時間が取れる週末に#1から読み直してみます。 そのあと締め切ります。

situmon10hanako
質問者

補足

Wendy02さん、こんばんは。 一度お礼に書いてしまったため、書く場所がここしかなかったので、こちらで失礼します。 メッセージはすべて削除して新しく書き込んでも同じ結果になりました。 最初に望んだ解決には至りませんでしたが、Wendy02さんには長い間お力添えをいただきました。 ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.16

補足: もし、動くのでしたら、#15 を標準モジュールにおいて、次に、 '標準モジュール Sub Auto_Open  Application.OnKey "{Enter}", "newJumpMacro"  Application.OnKey "{~}", "newJumpMacro End Sub を設定して、Auto_Open マクロを実行してみてください。 なお、今まで、登録していたものは、すべて、削除するか、コメントアウトにしてください。

situmon10hanako
質問者

補足

Wendy02さん、こんばんは。 ご回答ありがとうございます。 こちらもExcel2003を使用しています。 昨日からいろいろ切り貼りしていますが、うまくいかないのです。 ●This Workbookはすべて削除した状態で、1)と2)のように貼り付けてみました。 1)データsheetのコードと標準モジュールに貼り付け。 ・データsheetに#15のコード(「'コマンドボタン用 ~~~ 入れ替え版のまえの EndLine: End Sub まで」) ・標準モジュールに#16のコード 結果、結果、どのセルでEnterを押しても、This Workbook JumpingMacro が見つかりませんというメッセージが出ます。 2)標準モジュールに貼り付け。 ・#15のコード(「'コマンドボタン用 ~~~ 入れ替え版のまえの EndLine: End Sub まで」) ・#16のコード 結果、結果、どのセルでEnterを押しても、This Workbook JumpingMacro が見つかりませんというメッセージが出ます。 ●Auto_Open マクロの実行の件ですが、ツールでマクロを実行しましたが何がおこなわれているかよくわかりませんでした。おこなわれていないのかもしれません。 上記の貼り付けがちゃんとできていないからだと思います。 ●コントロールツールボタンの件ですが、作ったことがないのでよくわかりません。 コントロールツールボックスのボタンアイコンをクリックしてボタンを作りましたが(見た目が凸型)、ボタンをクリックするごとに待機セルの位置が一行ずつ下がるだけで、本当はどう動作するとコード通りなのか(どうつくるものなのか)わかりませんでした…。 せっかく#15と#16でご回答いただいたのに、どうしていいのかわからないのです。 こちらとWendy02さんとで、コードを貼り付りつけている場所など大いに違うのでは?と思えるのですが、いかがでしょう…。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.15

こんにちは。Wendy02です。 大変遅くになって、申し訳ありません。 Win XP の環境では、 Application.OnKey "{Enter}", "newJumpMacro" Application.OnKey "{~}", "newJumpMacro" これが働きません。 >※B2=AAAのときEnterでA4に移動するVBA いくらやっても、Enterキーで飛ぶマクロは、今の環境では、抜け落ちが生じて、Win XP 上では、Excel2003 でやっても、Excel2000 でやっても解決しないことが判明しました。 さまざまな要因を取り除いたExcelのセーフモードでやっても、同じ現象が出ますので、今の開発環境では、不可能だという結論に達しました。はっきりした原因は不明です。 もう少し、早く発見できればよかったのですが、ご迷惑を掛けてすみません。 >コントロールツールというものを使うと物事がうまく流れるのですね。 それは確かなのですが、今更なのですが、コントロールツールのコマンドボタンで考えてみることにしました。コマンドボタンで作ってみました。これは、ショートカットでも可能です。ご希望のものとは、まったく違うものですが、こういうものしか作れませんでした。  A    B      C ロット 製品コード 顧客コード LotData 「111」   「AAA」 □ ←コマンド・ボタン B2 のみで、顧客コードを探す場合は、'** ~ '*** を、このコードの下に掲げてあるものに入れ替えてください。 'コマンドボタン用 '-------------------------------------------- 'データSheet モジュールへ Private Sub CommandButton1_Click()  Call newJumpMacro End Sub '-------------------------------------------- '標準モジュール Private Const SHNAME = "データSheet" 'シート名 Private LastRow As Long Sub newJumpMacro()   Dim i As Long '検索後の行   Dim myRange As Variant '配列データ   Dim myData As String '配列検索値   If ActiveSheet.Name <> SHNAME Then ActiveCell.Offset(1).Select: Exit Sub   On Error GoTo EndLine      '最終のEnter の起動を、C2 にする   'データの最初を4行目とする   Const FROW As Integer = 4      With Worksheets(SHNAME)       If .Range("B2").Value = "" And .Range("C2").Value = "" Then         '両方とも空の場合は、A列の最後のセルにジャンプ         .Cells(65536, 1).End(xlUp).Offset(1).Select         Exit Sub       End If       LastRow = .Range("A65536").End(xlUp).Row       myRange = .Range("A1").Resize(LastRow).Address & "&" & _       .Range("B1").Resize(LastRow).Address              On Error Resume Next       i = 0             '**       '顧客コードを入れていない場合       If .Range("C2").Value = "" Then         i = WorksheetFunction.Match(Cells("B2").Value, .Columns(1), 0)       '製品コードを入れていない場合       ElseIf .Range("C2") <> "" And .Range("B2").Value = "" Then                i = WorksheetFunction.Match(Cells("C2").Value, .Columns(2), 0)       ElseIf .Range("C2") <> "" And .Range("B2").Value <> "" Then         myData = .Range("B2").Address & "&" & .Range("C2").Address         i = Evaluate("Match(" & myData & "," & myRange & ", 0)")       End If                   If i = 0 Then         i = WorksheetFunction.Match(.Range("C2").Value, _         .Range("B4").Resize(LastRow), 0) '顧客コードを検索         i = i + FROW - 1         Application.Goto .Cells(i, 1)       Else         Application.Goto .Cells(i, 1)       End If       '***      End With EndLine: End Sub 入れ替え版       '**       'B2にて、顧客名を検索       If .Range("B2").Value <> "" Then         i = WorksheetFunction.Match(Cells("B2").Value, .Columns(2), 0)       End If              If i = 0 Then         i = WorksheetFunction.Match(.Range("B2").Value, _         .Range("B4").Resize(LastRow), 0) '顧客名を検索         i = i + FROW - 1         Application.Goto .Cells(i, 1)       Else         Application.Goto .Cells(i, 1)       End If       '***

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.14

追伸です。 こちらは、Excel2003で開発していますが、たぶんバグなのだと思いますが、OnKey メソッドが、値を代入してEnter をすると、時々、動かなくなってしまいます。今しばらく、テストはしてみますが、他の手段てして、コントロールツールのテキストボックスだったら、確実だと思うのですが、それを置くことは出来ませんか?イベントの種類が豊富で、ShiftやCtrl など他のキーを加えることが可能です。

situmon10hanako
質問者

補足

Wendy02さん、こんばんは。 ご回答ありがとうございます。 いつも遅い時間まで考えてくださるようで恐縮しています。 >他の手段てして、コントロールツールのテキストボックスだったら、確実だと思うのですが、それを置くことは出来ませんか? コントロールツールというものを使うと物事がうまく流れるのですね。 「裏の仕組みを作ってくださるWendy02さんのやりやすい方法でお願いします」と、今回もそう言って再び丸投げしたいのですがこれは引っこめます。 日々ことが大きくなっている気がして、Wendy02さんの負担になっている気がしています。 また、当初すこしの修正で解決するのかと思い、時間がありますと書いた私がいけないのですが、月末ごろには他の人にこのファイルを使ってもらうので渡さなければなりません。 間に合わなかったら改良前の(もとの)を渡すつもりでいましたが、それの確率が高くなってきたので、Wendy02さんにこれからもっと考えていただくのは申し訳ないです。(これまででも十分考えていただきました。すみません。) 確実に動くということで、(B2,C2)で検索するのをやめて、検索語をB2(C2から左にシフトしました)の顧客名ひとつにして、もう一度作っていただけないでしょうか。 勝手ばかりですみません。 ※B2=AAAのときEnterでA4に移動するVBA 1 ロット    顧客名 2      「     」 3 顧客名 品名 ・・・ 4  AAA 5  AAA 6  BBB 7  FFF 8  FFF : : 100 333    LLL よろしくお願いします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.13

こんばんは。 アップロードする予定でしたが、統合化は、失敗しました。 今は、何が原因で、きちんと動かないのか、良く分からなくなりました。統合する場合は、その二つは、相矛盾した設定ですから、片方を動かないようにしなければなりません。そこまでは出来たつもりでしたが、今度は、B2 エンターで、動かなくなってしまいました。 少し、無理があるかもしれませんね。横に動くマクロ、最下行に行くマクロ自体は生かしていますから。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.12

こんばんは。 ふたつだけ回答しておきます。 >Enterだけで検索にコードを作り直していただくのは、大変手間のかかることでしょうか。 Enter だけの方が統合してよいと思います。私自身も、見えていなかった部分で、気になっていた内容ですから。次回、土曜日か日曜日までには、掲示する予定です。 >>通常、この種のものでは、検索は、コマンド・ボタンで行うのが一般的です。 もうひとつ。今のスタイルは、3年前の私では出来なかったけれども、この問題の解決では、別の方法を示していたと思います。それは、フィルタ・オプション(アドバンスド・フィルタ)です。 今の方法は、1~2年で覚えた、特殊なワザです。いつも、基本とか言っている私が、ちょっと、裏技過ぎているようで、後ろめたいのです。

situmon10hanako
質問者

補足

Wendy02さん、こんばんは。 ご回答ありがとうございます。 お待ちしています。 よろしくお願いします。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.11

#10 の訂正 最後の行 >エラーを疲労と、飛ばなくなることがあります。 エラーを拾うと、・・・・

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.10

こんばんは。 >C2で再度FFFと入力しないとA8に移動しないのですね…。 それは、かなり問題で、気になってはいたのですが、Enter だけで検索するようにするためには、すべて、JumpMacro 側に移すことになります。 F2 + Enter で移動するようになっています。 結局、振り出しに戻ってしまいましたね。 二つのうち、ひとつというわけではありませんが、仕様とか設定は、ある程度、統一していかないといけないようです。通常、この種のものでは、検索は、コマンド・ボタンで行うのが一般的です。 また、JumpMacro を直せば、ご希望どおりになります。 シートイベント式は、とかく、エラーを疲労と、飛ばなくなることがあります。なお、コマンドボタンは、フローティング(固定していない)にするか、固定式にするかとは、選択の余地はあります。

situmon10hanako
質問者

補足

Wendy02さん、こんばんは。 ご回答ありがとうございます。 >それは、かなり問題で、気になってはいたのですが、Enter だけで検索するようにするためには、すべて、JumpMacro 側に移すことになります。 Enterだけで検索にコードを作り直していただくのは、大変手間のかかることでしょうか。 Enterだけにしても不都合が発覚するかもしれませんが、もしお願いできるのならF2なしでもF2をしたと同じ結果になる動作のコードを教えていただきたいです。 難しいことになるのでしたら、もう(B2,C2)で検索するのをやめて、顧客名だけに絞ろうと思っています。 >通常、この種のものでは、検索は、コマンド・ボタンで行うのが一般的です。 そうなのです…。 どこまでも手間を省こうと、都度、検索コマンドをひっぱりだして入力する手間を省こうとして、かえって話をややこしくして自分の手にも負えなくなって…人様が背負い込んでしまったのです。 すみません。 ここでも振り出しです。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.9

こんばんは。Wendy02です。 >C2で編集をせずにEnterを押すと最終行のA列に移動するようですが、もとからそういう仕組みになっていますでしょうか? 確認しました。 ThisWorkbook モジュールの中の >Private Sub JumpingMacro() > If Not Intersect(ActiveCell, Range("$B$2")) Is Nothing Then > Cells(65536, 1).End(xlUp).Offset(1).Select B2 にEnter を入れたら、最後まで飛ぶように設定が残されています。 どういう設計が良かったのでしょうか? 当面とめるのでしたら、 Private Sub JumpingMacro() Exit Sub '←と入れれば働きません。 ・ ・ ・

situmon10hanako
質問者

補足

Wendy02さん、こんばんは。 私がよくわかっていなかったのですね。 #8の補足。C2=FFFのとき 【1】(B2,C2)=(111,FFF)=111FFFは A7 だから当然 【2】(B2,C2)=(444,FFF)=444FFFは A8 と思っていたのです。 FFF社がつづくときのC2は、【1】で一度FFFと入力しているため【2】では再入力が省けると思っていたのですが、C2で再度FFFと入力しないとA8に移動しないのですね…。 素人目には入っている数字は同じなのになぜ?と思えるのです。 コードは動作に反応している?のでしょうか。 B2とC2を入れ替えて(コードの部分も)もみましたが、同じ反応になるわけですよね…。 せっかくこんなに考えていただいたのに、このあとどうするか考えてご連絡します。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.8

こんばんは。Wendy02です。 遅くなってすみません。今週は、ちょっと、ややこしい仕事があって、集中することが出来ませんでした。 どこが違うか分かりました。最初に、そういうようには作られていなかったのです。 [顧客コード]があると思ったからで、[顧客名]では検索しておりませんでした。 以下を上書きしてください。これで、様子をみてください。 ------------------------------------------------------------------------ Private LastRow As Long Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long '検索後の行 Dim myRange As Variant '配列データ Dim myData As String '配列検索値  On Error GoTo EventRegain  '最終のEnter の起動を、C2 にする  'データの最初を4行目とする  Const FROW As Integer = 4  If Target.Address <> "$C$2" And Target.Address <> "$B$2" Then Exit Sub    If LastRow = 0 Then    LastRow = Cells(Rows.Count, 1).End(xlUp).Row - FROW + 1  End If  If Cells(2, 2).Value = "" And Target.Value = "" Then Exit Sub  myRange = Range("A1").Resize(LastRow).Address & " & " & Range("B1").Resize(LastRow).Address    On Error Resume Next  i = 0  If Range("C2").Value = "" Then   '顧客コードを入れていない場合   i = WorksheetFunction.Match(Target.Value, Columns(1), 0)  Else   myData = Range("B2").Address & "&" & Range("C2").Address   i = Evaluate("Match(" & myData & "," & myRange & ", 0)")   If i = 0 Then   i = WorksheetFunction.Match(Range("C2").Value, Range("B4").Resize(LastRow), 0) '顧客コードを検索   i = i + FROW - 1   End If  End If  On Error GoTo 0    If i > 4 Then     'スクロールを伴う場合     'Application.Goto Cells(i - 2, 1), True     Cells(i, 1).Select    End If EventRegain:   Application.EnableEvents = True End Sub

situmon10hanako
質問者

補足

Wendy02さん、こんばんは。 お忙しいところ、忘れずにいてくださりありがとうございます。 #7の補足で、C2は顧客「名」だったところを顧客「コード」と入力ミスをして混乱させてしまいました。 すみません。 #8のご回答を上書きしました。 せっかく時間を割いて作っていただいた作品に、私はまた躓いてしまいました…。 下記について動作確認をお願いしたいのです。 同じ顧客がつづくときC2を新たに編集せずにEnterを押します。 このとき、最終行A列に移動してしまうので、戻るためのスクロールが難儀です…。 (例)C2=FFFがつづくとき B2=111 C2=FFF入力後Enter → 印刷マクロにて印刷後A2に移動 B2=444 C2=何もせずEnter → A100に移動で× 1 ロット   製品コード   顧客名 2      「     」 「     」 3 製品コード 顧客名 品名 ・・・ 4  111    AAA 5  222    AAA 6  111    BBB 7  111    FFF 8  444    FFF : : 100 333    LLL 入れる値に関係なく、C2で編集をせずにEnterを押すと最終行のA列に移動するようですが、もとからそういう仕組みになっていますでしょうか? B2とC2の入力順番(配置のしかた)を入れ替えてもみたのですが、思ったようにはなりませんでした。 ご回答よろしくお願いします。

関連するQ&A

  • VBA入力なしのエンターでのセル移動

    VBA初心者です。 エクセル2010使用してるのですが チェンジイベントで入力時エンターで以下のように動きますが 入力なしのエンターでC5セルに移動させるには どのような方法があるのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$H$5" Range("C8").Select End Select End Sub よろしくお願いいたします。

  • エクセル2003 VBAでセル移動

    いつもお世話になります。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Row > 9 Then If Target.Column = 3 Then Cells(Target.Row, 4).Select ElseIf Target.Column > 5 Then Cells(Target.Row + 1, 1).Select End If End If End Sub これで、B列からC列を飛ばしてD列にセル移動して取りあえずの目的は達成しているのですが、 D列からB列には方向キー移動してくれません。Target.Columnが3になるんで当たり前なんですが・・・ B列の入力ミスがあるときマウスで移動させるか、A列まで戻ってから方向キーで上に上がるかです。 何かいい方法ありませんでしょうか。D列から方向キーで戻るときも、出来ればC列を飛ばしてほしいです。 よろしくお願いします。

  • 変化するセルが変更されたら実行、というVBAを組みたい

    たとえば、このセルが変更されたら実行、というのは Private Sub WorkSheet_change (Byval Target As Range) If(Target.Address = "$D$3") Then call *** End If End Sub のようにしますよね? この場合、指定したセルは「D3」ですが、たとえば、 A列、B列、C列、D列のアクティブの行のセルが変更されたらコード実行、 というようにするにはどうしたらいいのでしょうか?

  • エクセルで指定したセルへカーソルを移動させる

    エクセル2007で セル”I1”に文字を入力してエンターを押したら、“B11”へセルを移動させたく、 以下のように作ってみたのですが、 反応してくれません。 このVBAもインターネット上にあったものを参考にしただけなので、 何が悪いのかさっぱりわかりません。どこを修正したらよいのか教えてください。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Select Case Target.Address(0, 0) Case "i2" [b11].Select End Select End Sub

  • 空白状態でEnterを押したら指定のセルに飛びたい

    例えばF5セルで何も入力せずEnterを押したらC9に入力セルを飛ばしたくて 自分の力で調べた限りでは下のコードで可能なのですが Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Range("F5,C9") If Not Intersect(Target(1), .Cells) Is Nothing Then Application.EnableEvents = False .Select Target(1).Activate Application.EnableEvents = True End If End With End Sub 上記コードはF5セルを選ぶと、次に飛ぼうとするC9セルが見えてしまいます。 これが見えずにできる他の方法があるか色々調べても見つかりませんでした; 何か可能な策はありますでしょうか・・?

  • 任意のセルの移動をENTERキーでしたい

    現在、エクセルで入力フォームを作成してます が、任意のセルへENTERキーで移動したい のです。 たとえば、B4にデータ入力後、ENTERで B6に移動する場合、下記のマクロを作ったの ですが、うまく移動しません。 どうしてでしょうか? ENTERキーがエクセルのフォームしか使用 できないのですか? Sub B4からB6へのセル移動() If keyascii = vbKeyReturn Then Worksheets("受付入力").Range("B6").Select End If End Sub

  • ExcelVBAで直ぐに繁栄しないPrivate

    ExcelVBAで直ぐに繁栄しないPrivate Sub Worksheet_Change(ByVal Target As Range) If Target = Range("A1") Then   Range("B1").Value=fncMojiHenkan(Range("A1").Value End If End Sub セルA1に文字列を入力したり、他から文字列をコピペしてEnterキーを押しても、セルB1に直ぐに繁栄されません。 もう一度Enterキーを押すか矢印キーでセル移動しないとセットした値がB1に表示されません。 値をセットして直ぐに表示させるにはどうしたらいいでしょうか?

  • 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

  • VBA:結合されたセルに対する「Target」について

    Private Sub Worksheet_Change(ByVal Target As Range)   If Target = "" Then     MsgBox "空欄です"   End If End Sub 上記コードで、セルにカーソルを合わせてDeleteキーを押すと正常にメッセージが表示されます。 ただし、カーソルを合わせたセルが結合されていた場合、 「型が一致しません」というエラーで停止してしまいます。 結合されているセルに対しても同じ処理をするには、   If Target = "" Then の部分をどのように指定すればよいでしょうか。

  • 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

専門家に質問してみよう