A 回答 (6件)
- 最新から表示
- 回答順に表示
No.6
- 回答日時:
それは、次のコードに誤りがあるからです。
> Dim str As String
> str = rngTarget.Value
> MsgBox str
#4 のコードでは A1、B1 ともに実行が許可されるセルとなってます。
つまり、A1:B1 を選択して Delキーを押せば、rngTarget には A1:B1 の
2つのセルが参照されています。
--> #5 のご回答2.の内容です。
この時、rngTarget.Value は A1 と B1 の2つの値を配列で返してますが、
それを受ける変数 str は、一つの値しか代入できない通常の文字列型変数
なので代入に失敗し、エラーになってます。
次のコードならエラーになりません。Address プロパティーは例え rngTarget
が複数のセルであっても、「アドレスという一つの文字列データ」しか返さ
ないからです。
str = rngTarget.Address
#4 は複数セルの場合に対応させるコードで、Range コレクション という
ものの理解が必須です。ちょっとイキナリ過ぎて、例示としては良くな
かったですね。すみません。
まずは、単純に一つのセルのみで動作するコードを考えてみましょう。
' Sample: A1 セルのときのみ実行する
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
MsgBox Target.Value '<-- A1 単一セルであることが保証されている
End If
End Sub
とてもシンプルです。まずは、この使い方から理解を深めてみて下さい。
今後の話として説明しておきますが、このコードの場合、例えば A1:C10 セルに
対してデータの貼り付け、またはデータの削除などの操作を行った場合、A1 の
値が変化するにも係わらず、MsgBoxが実行されません。それは、Target.Address
が A1:C10 となるので
If Target.Address = "$A$1" Then の論理式が False になる
からですね。これでは困る場合、#4 のようなコードで対応することになります。
No.5
- 回答日時:
「フォーカスが隣に移動する」かどうかは入力後のセル移動設定の問題であり、本質ではありません。
Changeイベントは「隣に移動する」かどうかにかかわりなく、ワークシートのセルが変更されたときに発生します。
Changeイベントの認識する「Target」はあくまで変更されたセルです。移動先ではありません。念のため。
ここで注意すべきは、
1.セルの内容を削除した場合にも発生する。
2.セル範囲に対してコピーしたり削除した場合、セル範囲が「Target」と認識される。
3.Changeイベントのプロシージャ内でセルに変更を加えた場合にもイベントは発生するので、そのような処理をする場合は堂々巡りを回避する必要がある。(普通は一時的に EnableEvents プロパティの値を変更してイベントが発生しないようにする。)
以上。
No.4
- 回答日時:
> フォーカスのセルの内容だけが変更・確定された場合にだけ起きるイベント
> があれば、安全なのだと思いますが‥。
いや、、、だからそのイベントが Worksheet_Change イベントですよ。使い方
の問題です。
#3 のご回答は、プログラムに不慣れな方が扱うにはある意味でその通りだと
思いますが、、
> こんなの自分で使う場合以外の人が使う例では使えないと思います。
そんなことはありません。Change イベントはごく一般的に使われますよ。
Change イベントに致命的欠陥があるわけではありませんし、意図通り動作
しない、エラーが発生するなどの多くの場合はプログラムに問題があるの
であって、それを回避するコードを書くまでです。
#3 のご回答の真意は、「よくよくテストして下さい」だと思いますが、
それはどのようなプログラムであっても共通して言えることですしね。
Change イベント使い方のサンプルを提示しておきます。下記のソースコード
ではセル A1,B:B,C1:D10,E1 以外が変化しても、コードの実行を終了させて
何事もなかったように振舞います。これは、
> フォーカスのセルの内容だけが変更・確定された場合にだけ起きるイベント
と同意の動作ではないですか?
' シート上のセルの値が変化したとき発生
Private Sub Worksheet_Change(ByVal Target As Range)
' 以下のコードの動作を許可するセルのアドレスを
' カンマ区切りの文字列で定義しておきます
Const CELL_ADDRESS = "A1,B:B,C1:D10,E1"
Dim rngTarget As Range
' Target には変化したセルが参照されていますので、
' それを調べて、VBA コード動作させたいセル以外なら
' 終了するようにします
' また余計なセルが処理対象とならないように、
' Set rngTarget = Intersect(Target, Me.Range(CELL_ADDRESS))
' として Target を rngTarget に再定義します
Set rngTarget = Intersect(Target, Me.Range(CELL_ADDRESS))
If rngTarget Is Nothing Then Exit Sub
' CELL_ADDRESS で定義したセルに対して実行させる処理を以下に記述
MsgBox "選択セル中、処理対象となったセルのアドレス:" & rngTarget.Address
End Sub
余談ですが、ワークシート上で Enter イベントに相当するのは、
Selection_Change イベントですね。
遅くなりまして、すみませんでした。
お教えいただきましたコードで実行してみました。
Dim str As String
str = rngTarget.Value
MsgBox str
としてみたのですが、おっしゃる通り、例えばA1とA2を一緒に選択してDeleteすると、
str = rngTarget.Value
のコードのところで、”型が一致しません。”というエラーが出てしまいます。A1セルだけ選択してDeleteしても確かにエラーはでないのですが‥。
No.3
- 回答日時:
Enterイベントがないですね。
Changeイベントしかないが、Changeイベントは怖いですよ。
キャンセルやコピー貼り付けやDelete やよくテストしてください。
こんなの自分で使う場合以外の人が使う例では使えないと思います。
Application.EnableEvents=Falseを入れなければならない場合にも気をつけて。
経験のおありの方のご指導、ありがとうございました。本来は、フォーカスのセルの内容だけが変更・確定された場合にだけ起きるイベントがあれば、安全なのだと思いますが‥。
No.2
- 回答日時:
特定のシートならシートのモジュールに
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox "Changed " & Target.Address
End Sub
ブック全体なら、ThsWorkBook のモジュールに
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
MsgBox "Changed Sheet " & Sh.Name & " " & Target.Address
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで、例えばAのセルの値次第で、Bのセルの値を自動入力する方法を教えてください。 2 2022/08/02 12:10
- Excel(エクセル) エクセルVBA 任意のセルの選択時、指定のセルの値を表示 1 2023/04/21 08:13
- Excel(エクセル) エクセルの計算式について教えて下さい。 sheet1のA1セルの値をsheet2のB1セルに返し、尚 1 2022/05/25 11:32
- Excel(エクセル) エクセルの昇順での数値入力のミスの見つけ方を教えてください。 4 2022/06/26 20:41
- Visual Basic(VBA) Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、 2 2022/09/01 23:57
- Access(アクセス) Access の SetFocus について教えてください 5 2022/08/04 07:32
- 日本語 読解力の質問です(Excel含む) 12 2022/08/02 13:25
- Excel(エクセル) エクセル関数の質問 5 2022/04/20 09:46
- Excel(エクセル) 指定値をマクロで検索&シート移動 2 2022/04/27 23:29
- Excel(エクセル) Excelにの以下の設定方法について教えてください! C列にデータ入力の設定をしています。(出、入を 3 2022/06/22 01:33
このQ&Aを見た人はこんなQ&Aも見ています
-
好きな人を振り向かせるためにしたこと
大好きな人と会話のきっかけを少しでも作りたい、意識してもらいたい…! 振り向かせるためにどんなことをしたことがありますか?
-
ちょっと先の未来クイズ第6問
2025年1月2日と1月3日に行われる、第101回箱根駅伝(東京箱根間往復大学駅伝競走)で、上位3位に入賞するチームはどこでしょう?
-
自分独自の健康法はある?
こうしていると調子がいい!みたいな自分独自の健康法、こだわりはありますか?
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
「これいらなくない?」という慣習、教えてください
現代になって省略されてきたとはいえ、必要性のない慣習や風習、ありませんか?
-
excelで セルの移動時にマクロ実行を設定したい。
Excel(エクセル)
-
値を入力後、自動的にアクティブセルが移動するマクロ
Excel(エクセル)
-
Excel VBA あるセルでENTERを押すと特定のセルへ移動したい
Excel(エクセル)
-
-
4
セルが移動した時に値の代入を行いたい
その他(コンピューター・テクノロジー)
-
5
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
6
Enterキーでマクロを起動さす。
その他(ソフトウェア)
-
7
エクセルのラベルの値(文字列)を垂直方向で中央揃えにするには?
Excel(エクセル)
-
8
Application.Runエラー(1004)
Excel(エクセル)
-
9
ユーザーフォームを表示中にシートの操作をさせるには
Excel(エクセル)
-
10
VBA エンターキーでイベントに入りたい。
PowerPoint(パワーポイント)
-
11
エクセルVBAで、MsgBox やInputBox は、画面の中央以外に表示させたい。
Excel(エクセル)
-
12
VBA ユーザーフォーム ボタンクリック後にセルにフォーカス
Visual Basic(VBA)
-
13
エクセルのエラーメッセージ「400」って?
Visual Basic(VBA)
-
14
プロシージャからイベントをコールする
Visual Basic(VBA)
-
15
エクセルで英数大文字のみの入力制限は可能ですか
Excel(エクセル)
-
16
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
17
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
18
エクセルVBA テキストボックスに3桁ごとにコンマ
Visual Basic(VBA)
-
19
特定のセルがアクティブになったときのイベント?
Excel(エクセル)
-
20
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・【選手権お題その3】この画像で一言【大喜利】
- ・【お題】逆襲の桃太郎
- ・自分独自の健康法はある?
- ・最強の防寒、あったか術を教えてください!
- ・【大喜利】【投稿~1/9】 忍者がやってるYouTubeが炎上してしまった理由
- ・歳とったな〜〜と思ったことは?
- ・ちょっと先の未来クイズ第6問
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの条件付き書式のコピーと...
-
至急お願いいたします 屋上の備...
-
Excel について教えてください。
-
エクセルで、数字の下4桁の0を...
-
Excelの開始ブックを固定したい...
-
エクセルで、数字ではない値(...
-
ファイル名の変更
-
エクセルでセルに入力する前は...
-
Excelで項目の種類ごとに番号を...
-
1.5ヶ月分の費用按分 エクセル関数
-
vba Excelのタブをプログラムか...
-
エクセルシートの作成(関数)...
-
Excelのデータの入力規則の問題...
-
【VBA】使ってたクエリの接続を...
-
45490がどうして
-
【Excel】 1つのセルの日にちを...
-
エクセルで80万行、50列位のデ...
-
エクセルでデータを消して保存...
-
=INDIRECT(RIGHT(CELL("filenam...
-
Excel for MacでFEPが勝手に切...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで、数字ではない値(...
-
Excel いい方法教えてください。
-
納期順に勝手に並べ替えられる...
-
エクセルで作成した書類の印刷...
-
Excel初心者です、Excelの日付...
-
エクセルで作った表が印刷する...
-
実務の処理について。
-
AM8:30から翌朝8:30まで勤務す...
-
Excelのデータの入力規則の問題...
-
Excelの罫線を消す方法
-
桁をセルで区切って計算をした...
-
スプレッドシート(Excelでも良...
-
VLOOKUP関数で複数条件を設定に...
-
Excel初心者です。 Excelでやり...
-
エクセルでAのセルに「家電」と...
-
ファイルとフォルダの移動につ...
-
XMLHTTP60で前日のデータが取れ...
-
ファイルパスについて。
-
エクセルの数式について教えて...
-
スプレッドシートで適切な条件...
おすすめ情報