• ベストアンサー

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 よろしくお願いいたします。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.10

No.8, 9、cjです。 大事なことを書き忘れましたが、試す時は それぞれ新しいブックで試すようにしてください。 幾つかの方法が提示されていますが、 ひとつのブックでこれらを併記しながら 機能させることはできませんので。 No.8, 9では  「H5セルでEnterキーを押下げたらC5セルを選択する」 ということをお求めなのだという解釈でお応えしています。 原質問への、もうひとつの解釈として  「H5セルでEnterキーを押下げた時  【値変更を伴う】場合は、C8セルを選択する  【値変更を伴わない】場合は、C5セルを選択する」 ということをお求めの場合の記述を下記、あげておきます。 文字通り、Enterキー押下げが【値変更を伴う】かどうか、であって、 「値が設定されているかどうか」でもなく 「セルが未編集であるかどうか」でもありません。 ここら辺も、はっきり判ればどうとでも直せるような書き方をしたつもりですが 今の処、どれが正しいのか確かめられていません。 また、今回の機能を複数(大量)のシートで適用させたい場合 などでも、多少の修正が必要です。 迷わず書けるような補足があれば、再度レスする用意はあります。 検証が大変かも知れませんが、焦らず頑張ってください。 ' ' ◆ 標準モジュール ◆ ' ' ============================== ' ' 必ず、モジュールの先頭に記入すること。 ※ Option Explicit ' ' Enterキー押下げ時、【値変更を伴って】いたかどうか ' ' を管理するフラグ(整数)。Public スコープの変数。 Public nMode As Integer ' ' Enterキーに、プロシージャ"CmdEntJump"を登録しているかどうか ' ' を管理するフラグ(論理値)。Private スコープの変数。 Private flgC As Boolean ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ' ' Enterキーに、プロシージャ"CmdEntJump"を登録する Private Sub EnterEntJump()   ' ' 現在登録中ならば何もせずに抜ける   If flgC Then Exit Sub   ' ' Enterキーに登録   Application.OnKey "~", "CmdEntJump"   ' ' Enterキー(テンキー)に登録   Application.OnKey "{Enter}", "CmdEntJump"   ' ' 現在登録中という意味のフラグを設定   flgC = True End Sub ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ' ' Enterキーに登録された内容を取り消す Private Sub CancelEntJump()   ' ' 現在登録中でないならば何もせずに抜ける   If Not flgC Then Exit Sub   ' ' Enterキーに登録された内容を取り消す   Application.OnKey "~"   ' ' Enterキー(テンキー)に登録された内容を取り消す   Application.OnKey "{Enter}"   ' ' 現在登録中ではないという意味のフラグを設定   flgC = False End Sub ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ' ' Enterキーで呼び出される(登録する)プロシージャ Private Sub CmdEntJump()   ' ' 実行プロシージャを、Changeイベント後に実行されるように     ' ' 時間差を設けて(順番を後回しにして)呼び出す   Application.OnTime Now, "EntJump" ' ● End Sub ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ' ' 実行プロシージャ、セル選択 Private Sub EntJump()   Select Case nMode   Case 0  ' 【値変更を伴わない】Enterキー押下げ時モード     ' ' アクティブシートのC5セルを選択     Range("C5").Select ' ●   Case 1  ' 【値変更を伴う】Enterキー押下げ時モード     ' ' アクティブシートのC8セルを選択     Range("C8").Select ' ●     ' ' nModeを初期化     nMode = 0   End Select End Sub ' ' ============================== ' ' ◆ 各シートモジュール ◆ ' ' ============================== ' ' 対象シートが アクティブ になった時のイベント処理 Private Sub Worksheet_Activate()   ' ' 『 アクティブセルのアドレスが 』   Select Case ActiveCell.Address   ' ' 『 "$H$5" ならば 』・・・Case "$H$5", "$J$5" のように追加可   Case "$H$5" ' ●     ' ' Enterキーに、"CmdEntJump"を登録するプロシージャを呼び出す     Application.Run "EnterEntJump"   End Select End Sub ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ' ' 対象シートが 非アクティブ になった時のイベント処理 Private Sub Worksheet_Deactivate()   ' ' Enterキーに登録された内容を取り消すプロシージャを呼び出す   Application.Run "CancelEntJump" End Sub ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Private Sub Worksheet_Change(ByVal Target As Range)   ' ' 『 Targetセルのアドレスが 』   Select Case Target.Address   ' ' 『 "$H$5" ならば 』・・・Case "$H$5", "$J$5" のように追加可   Case "$H$5" ' ●     ' ' 【値変更を伴うEnterキー押下げ時】”のモードを設定     nMode = 1   End Select End Sub ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Private Sub Worksheet_SelectionChange(ByVal Target As Range)   ' ' 『 アクティブセルのアドレスが 』   Select Case Target.Address   ' ' 『 "$H$5" ならば 』・・・Case "$H$5", "$J$5" のように追加可   Case "$H$5" ' ●     ' ' Enterキーに、プロシージャ"CmdEntJump"を登録する     Application.Run "EnterEntJump"   ' ' 『 それ以外 の場合 ならば 』   Case Else     ' ' Enterキーに登録された内容を取り消す     Application.Run "CancelEntJump"   End Select End Sub ' ' ============================== ' ' ◆ ThisWorkbookモジュール ◆ ' ' ============================== ' ' ブックをアクティブにした(開いた)時のイベント処理 Private Sub Workbook_WindowActivate(ByVal Wn As Window)   ' ' 『 アクティブシートの名前が 』   Select Case ActiveSheet.Name   ' ' 『 "Sheet1" または "Sheet2" ならば 』・・・適宜指定■■   Case "Sheet1", "Sheet2" ' ■■     ' ' 解説省略     Select Case ActiveCell.Address     Case "$H$5" ' ●       ' ' Enterキーに、"CmdEntJump"を登録するプロシージャを呼び出す       Application.Run "EnterEntJump"     End Select   End Select End Sub ' ' ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)   ' ' Enterキーに登録された内容を取り消すプロシージャを呼び出す   Application.Run "CancelEntJump" End Sub ' ' ==============================

tackty
質問者

お礼

ご回答ありがとうございます。 今回ご丁寧にすごい説明まで 頂いて感謝してます。 私の不手際の悪さからまた 下記のところでエラーがでて 先に進まない状態です。 Application.Run "EnterEntJump" 私自身なにか基本ができてないので、 勉強して理解したいと思います。

その他の回答 (9)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.9

(2/2連投)  ・[マクロの表示]画面から実行されては困るプロシージャを  Private スコープで書きます。  ・シート、ブックの選択変更時、ブックを開いた時、にも、  正しく機能するように書きます。  ・対象以外のシート、ブックで誤作動しないように書きます。   注目して欲しいコメントにアイコン(記号)を付けました  ■■  ・・・  適用シートのシート名を正しく指定。必須!!  ●  ・・・  運用時、適用セルを変更する場合の指定項目  ※  ・・・  注意点  ◆ ~ ◆  ・・・  モジュール名。モジュールの始まり。       ' ' ◆ 標準モジュール ◆ ' ' ============================== ' ' プロシージャ名を変更するなら、すべてのモジュールで統一すること。 ※ ' ' 必ず、標準モジュールの先頭に記すこと。 ※ Option Explicit ' ' Enterキーに、プロシージャ"EnterJump"を登録しているかどうか ' ' を管理するフラグ。Private スコープの変数。 Private flg As Boolean ' ' ――――――――――――――――――――――――――――― ' ' Enterキーに、プロシージャ"EnterJump"を登録する Private Sub SetEnterJump()   ' ' 現在登録中ならば何もせずに抜ける   If flg Then Exit Sub   ' ' Enterキーに登録   Application.OnKey "~", "EnterJump"   ' ' Enterキー(テンキー)に登録   Application.OnKey "{Enter}", "EnterJump"   ' ' 現在登録中という意味のフラグを設定   flg = True End Sub ' ' ――――――――――――――――――――――――――――― ' ' Enterキーに登録された内容をリセットする Private Sub ResetEnterJump()   ' ' 現在登録中でないならば何もせずに抜ける   If Not flg Then Exit Sub   ' ' Enterキーに登録された内容をリセット   Application.OnKey "~"   ' ' Enterキー(テンキー)に登録された内容をリセット   Application.OnKey "{Enter}"   ' ' 現在登録中ではないという意味のフラグを設定   flg = False End Sub ' ' ――――――――――――――――――――――――――――― ' ' Enterキーに登録するプロシージャ Private Sub EnterJump()   ' ' アクティブシートのC5セルを選択   Range("C5").Select ' ● End Sub ' ' ==============================       ' ' ◆ 各シートモジュール ◆ ' ' ============================== '' 対象シートが アクティブ になった時のイベント処理 Private Sub Worksheet_Activate()   ' ' 『 アクティブセルのアドレスが 』   Select Case ActiveCell.Address   ' ' 『 "$H$5" ならば 』・・・Case "$H$5", "$J$5" のように追加可   Case "$H$5" ' ●     ' ' Enterキーに、"EnterJump"を登録するプロシージャを呼び出す     Application.Run "SetEnterJump"   End Select End Sub ' ' ――――――――――――――――――――――――――――― '' 対象シートが 非アクティブ になった時のイベント処理 Private Sub Worksheet_Deactivate()   ' ' Enterキーに登録された内容をリセットするプロシージャを呼び出す   Application.Run "ResetEnterJump" End Sub ' ' ――――――――――――――――――――――――――――― Private Sub Worksheet_SelectionChange(ByVal Target As Range)   ' ' 『 アクティブセルのアドレスが 』   Select Case ActiveCell.Address   ' ' 『 "$H$5" ならば 』・・・Case "$H$5", "$J$5" のように追加可   Case "$H$5" ' ●     ' ' Enterキーに、プロシージャ"EnterJump"を登録する     Application.Run "SetEnterJump"   ' ' 『 それ以外 の場合 ならば 』   Case Else     ' ' Enterキーに登録された内容をリセットする     Application.Run "ResetEnterJump"   End Select End Sub ' ' ==============================       ' ' ◆ ThisWorkbookモジュール ◆ ' ' ============================== ' ' ブックをアクティブにした(開いた)時のイベント処理 Private Sub Workbook_WindowActivate(ByVal Wn As Window)   ' ' 『 アクティブシートの名前が 』   Select Case ActiveSheet.Name   ' ' 『 "Sheet1" または "Sheet2" ならば 』・・・適宜指定■■   Case "Sheet1", "Sheet2" ' ■■     ' ' 解説省略     Select Case ActiveCell.Address     Case "$H$5" ' ●       ' ' Enterキーに、"EnterJump"を登録するプロシージャを呼び出す       Application.Run "SetEnterJump"     End Select   End Select End Sub ' ' ――――――――――――――――――――――――――――― Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)   ' ' Enterキーに登録された内容をリセットするプロシージャを呼び出す   Application.Run "ResetEnterJump" End Sub ' ' ==============================

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.8

(1/2連投) こんにちは。お邪魔します。 誤解があるといけないので断っておきますが、 お求めのような機能は、ExcelやExcel VBAに 標準で備わっているものではありません。 なので、工夫して、自力で実装することになりますので、 初級向きとは言えない内容かも知れません。 ただ、組み合わせが難しい、ということだけで、 ひとつひとつの技術は簡単なもので、 初級の範疇を超えるものは含まれませんので、 VBAのヘルプや教本などで、ひとつひとつ確認しながら ゆっくりでいいので、覚える(確かめる)ようにしてください。 蛇足になりますが、N0.4、No.5、で問題になっている  > "このブックでマクロが使用できないか、またはすべての  > マクロが無効になっている可能性があります。" このエラーについては、 エラーメッセージの内容が不適切な文章なので、 混乱しているということなのだと思います。 kmetu様ご提示のコードは、通常は問題なく機能するものです。 考えられるエラーの(初心者にありがちな)原因として、  No.4 標準モジュールの、Public Sub MoveCells() について  1)プロシージャ名を標準モジュールでのみ変更している場合  2)対象ブックではなく、PERSONAL.XLSBの標準モジュールに記載している場合 などがあり、これらのケースでは上記のメッセージを含む エラーメッセージが表示されます。 もっとも、、、実際には上記のメッセージの前に  「マクロ フルパス+ブック名+プロシージャ名 を実行できません」 を付加した形で表示されていた筈です。 今後の為に、 他人に解決を委ねる時は、正確なエラーメッセージを伝えるようにしましょう。 原因 1)の場合、  プロシージャ名を変更する時は  呼び出す側のプロシージャ名も同時に変更するようにしましょう。  VBE(Visual Basic Editor)の置換機能を使って  【対象】を[カレントプロジェクト]等として一括置換するのが確実です。 原因 2)の場合、  同一ブック(同一プロジェクト)の標準モジュールに記載しましょう。  手順がわからないなら、  VBEのメニューバー[挿入]→[標準モジュール]という手順で  新規の標準モジュールが挿入されます。  通常、特に断りが無く提示されているマクロ(コード)は  対象となるブックの標準モジュールに記載するものです。  そうしないと正しく動きません。  、、、そういう暗黙の了解がある、と、覚えてください。 私が書いたものを(投稿文字数制限に掛かる為)次の投稿であげてみます。 サンプル(パーツの提示)ではなく、実用コードとして、 自分ならこんな風に書くであろう内容です。 さしあたり気が付いた難点に、諸々手当てしていますから、 使い勝手は悪くない、とは思いますけれども。 運用に困るようでしたら、相談してみてください。

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

こんばんは! 一案です。 シートモジュールにもう一つ「SelectionChange」イベントを追加してみてはどうでしょうか? わざわざSelect Case を使わなくてもよいと思うのですが、 何か他のコードとの兼ね合いがあるかもしれませんので、極力お示しのコードを変えないようにしてみました。 Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address Case "$H$5" If Target <> "" Then Range("C8").Select Else Range("C5").Select End If End Select End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Target If .Address(False, False) = "H6" Then If .Offset(-1) = "" Then Range("C5").Select End If End If End With End Sub ※ EnterでH6セルに移動した場合にH5セルが空白の場合はC5セルを選択するようにしていますので、 H6セルに何か入力したい場合、H5セルが空白の場合はH6セルは選択できずにC5セルが選択されてしまいます。 この程度ですが参考になりますかね?m(_ _)m

tackty
質問者

お礼

ご回答ありがとうございます。 やりたいことができました。 助かりました。 ありがとうございます。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.6

今回のコードだけの別の新しいブックを作成して試してみてください。

tackty
質問者

お礼

ご回答ありがとうございます。 私自身なにか基本ができてないようです。 勉強して先に進めるようにがんばります。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.5

> なにか設定しなくてはいけないこととか > ありますでしょうか? こちらを参考にしてください。 http://office.microsoft.com/ja-jp/excel-help/HA010354316.aspx

tackty
質問者

お礼

回答ありがとうございます。 上記を参考に全てマクロを有効に してみたのですが、同じメッセージが でてきます。 H5でエンターはエラーになります。 標準モジュールの実行クリックは C5セルに移動してくれます。 他のマクロは正常に動いてます。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.4

すみません訂正です 標準モジュールのほうは Public Sub MoveCells() Range("C5").Select Application.OnKey "~" Application.OnKey "{Enter}" End Sub にしてください。

tackty
質問者

補足

回答ありがとうございます。 早速試したのですが、セルH5でエンターすると 下記のエラー表示が出てしまいます。 "このブックでマクロが使用できないか、またはすべての マクロが無効になっている可能性があります。" なにか設定しなくてはいけないこととか ありますでしょうか?

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.3

補足です。 単純にするのでしたら Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$H$5" Then Application.OnKey "~", "MoveCells" Application.OnKey "{Enter}", "MoveCells" End If End Sub 標準モジュールを作成し、できたMoudule1に Public Sub MoveCells() Range("C5").Select End Sub とすればいけますが、シート上のどのセルでも選択されるたびにWorksheet_SelectionChangeが実行されるので、あまりお勧めとは言えないかもしれません。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.2

こちらのやりとりが参考になるでしょう http://okwave.jp/qa/q1737730.html

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> 入力なしのエンターでC5セルに移動させるには セルC5へは「どこから」移動ですか? 飛んで欲しくないセルを書き込み禁止しておくとか。

tackty
質問者

補足

H5セルからです。

関連するQ&A

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

    エクセル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

  • エクセルマクロ(VBA)で指定したセルが変化したときに実行するには?

    VBAでsheetの中のworksheet_changeなどでマクロを書くと、そのシー トの中のどのセルを変化させてもマクロが実行されるのですが、これ を、A1とc1とc2が変化したときだけ処理を実行させたいのです。 以下のマクロのどこかを編集すると、そのようなことが出来るのでし ょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) ----実行する内容---- End Sub Private Sub Worksheet_Change(ByVal Target As Range) ----実行する内容---- End Sub

  • 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で入力したものが無い確率の方が高いのです。 この場合は「あ」にセルが移動するようにしたいのですが、どのようにしたらよいのでしょうか。 ご回答よろしくお願いします。

  • エクセルVBAでTargetのセルに設定された「名前の定義」の取得方法は?

    例えば、A1、B2、C3セルに「名前の定義」で、それぞれ入力A、入力B、入力C という名前がつけてあります。 それらのセルに入力があった場合、Select Caseで分岐させ作動するマクロをつくりました。 簡略化すると以下のようなもので、一応正しく作動します。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("入力A,入力B,入力C")) Is Nothing Then Exit Sub Select Case Target.Address(0, 0) Case "A1" MsgBox "A処理します。" Case "B2" MsgBox "B処理します。" Case "C3" MsgBox "C処理します。" End Select End Sub ただ、せっかくセルに名前を定義してあるのに、個々の入力セルの判定をTarget.Addressでしているのが不満です。 ( ̄~ ̄;) 定義された名前を使えないかと以下のようにやってみましたが実行時エラーで「サポートしてません」となってしまいます。 (T.T) Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("入力A,入力B,入力C")) Is Nothing Then Exit Sub Select Case Target.Names.Name 'ここでエラー Case "入力A" MsgBox "A処理します。" Case "入力B" MsgBox "B処理します。" Case "入力C" MsgBox "C処理します。" End Select End Sub どうやったら、Targetに設定されている名前を取得できるのでしょうか? (^∇^`)? 実際の例はもっと対象が多いので、Select Caseを使わない以下の方法は避けたいのです。 If文の羅列(これでも正しく作動はします。) Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("入力A,入力B,入力C")) Is Nothing Then Exit Sub If Not Intersect(Target, Range("入力A")) Is Nothing Then MsgBox "A処理します。" ElseIf Not Intersect(Target, Range("入力B")) Is Nothing Then MsgBox "B処理します。" Else MsgBox "C処理します。" End If End Sub なにとぞよろしくお願いします。 (o。_。)oペコッ

  • エクセルVBAでセル変化したら別のセルへコピーする

    おはようございます。VBAをはじめて浅い初心者です。 あるセルに数字および文字列が入力されたら違うセルへコピーしたいのですがどのようにすればできますか。 Private Sub Worksheet_Change(ByVal Target As Range)とか 使用してつくればいいのですか?教えてください。

  • EXCEL 異なるVBA

    教えて下さい、EXECL以下の異なるVBA (A>,B>)が2つあります、同じシートでそれぞれ動くようにさせたいです1つに合わせる事は出来ないでしょうか? 当方初心者の為わかりません教えて下さい。 A> Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Address(0, 0, xlA1, 0) <> "A1" Then Exit Sub With Range("F9:I9,K17:K36").Borders(xlDiagonalUp) If Left$(Target.Value, 1) = "S" Then .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic Else .LineStyle = xlNone End If End With End Sub B> Private Sub Worksheet_Change(ByVal Target As Range) With Sheet2 Select Case Target.Address Case Is = "$D$1" .Range("A1").Insert Shift:=xlDown .Range("A1").Value = Target.Value Case Is = "$D$2" .Range("B1").Insert Shift:=xlDown .Range("B1").Value = Target.Value End Select End With End Sub

  • VBA Select Caseについて

    エクセルVBAでLike演算子とSelectCase構文を組み合わせたいのですが、以下ではエラーになってしまいます。 どう修正すればいいのでしょうか? ABCを含む文字列、DEFを含む文字列、その他、についての処理の分岐方法です。 Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Value Case Like "*ABC*" `処理A Case Like "*DEF*" `処理B Case Else `処理C End Select End Sub

  • エクセルのマクロ

    セルの値が変わったら動くマクロですが、2つ書くとエラーが出ます。 どのように直したらいいでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address If Intersect(Target, Range("EK22")) Is Nothing Then Exit Sub Else Range("EK24:EM28").Select Selection.ClearContents End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("EK24")) Is Nothing Then Exit Sub Else Range("EK27:EM28").Select Selection.ClearContents End If End Sub

  • Excel VBA イベントプロシージャを2つ記述する(基本です)

    基本的な事なのですが、Excelのイベントプロシージャで2つプログラムを作るにはどうやって記述すればよいのでしょうか? 具体的には、worksheetのchangeイベントで、セルC5の値を変えた時と、セルG7の値を変えた時の2通りのマクロを作成したいのです。 Private Sub Worksheet_Change(ByVal Target As Range) C5を変えた時の処理 End Sub Private Sub Worksheet_Change(ByVal Target As Range) G7を変えた時の処理 End Sub このように書けばよいのでしょうか?そうするとTargetがかぶっておかしくなる気がします。。 お願いします。

  • 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

専門家に質問してみよう