A列のセルに数字(数字かどうかの判断は無くて良い)が入ったらその隣のセルを青で塗りつぶす、
といったマクロを組んでいます。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Target.Offset(0, 1).Interior.ColorIndex = 5
End if
End sub
以上をシートに直接(←呼び方がわかりません。「標準モジュール」ではない所)書込んだら動作しました。
このコードだと、行を削除した時に、
「アプリケーション定義またはオブジェクト定義のエラーです」というエラーで止まってしまいます。
A列のセルに変更があったけど塗るセルが無いから、とかそれっぽい理由は思いつくのですが、
どのように書けばエラーを回避(セルが無い場合は***、みたいな記述でしょうか)できるでしょうか。
なるべく
On Error Resume Next
は使いたくないです。
(勝手な印象ですが、なんかエラーを無視してるみたいで落ち着かない…)
No.1ベストアンサー
- 回答日時:
> 「アプリケーション定義またはオブジェクト定義のエラーです」という
> エラーで止まってしまいます。
行全体を削除すると、Target は行全体になりますよね。Excel2003 まで
なら 256列分全てです。
その Target を Offset でひとつ横にずらそうとしても、257列目は
存在しないので、エラーになります。
このような場合は、Intersect メソッドを使います。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rTmp As Range
Dim r As Range
' // Target と A列 で重なる部分(Range)を Intersect メソッドで
' // 参照してみます
Set rTmp = Intersect(Target, Columns("A"))
If Not rTmp Is Nothing Then
' // 参照できる部分があった場合
Application.ScreenUpdating = False
' // 複数セルに対応するためには、「セル単位」または「セルの選択
' // ブロック単位」でループ処理させる必要があります
' // 今回は Areas を使って「セルの選択ブロック単位」で処理します
For Each r In rTmp.Areas
r.Offset(0, 1).Interior.ColorIndex = 5
Next
' // オブジェクト変数は使い終わったらクリアします
Set rTmp = Nothing
End If
End Sub
以下は余談です。
> 勝手な印象ですが、なんかエラーを無視してるみたいで落ち着かない…
それで良いと思います。ロジックで対応できるものを安易に On Error
Resume Next していては、エラーをコントロールするプログラム力が
身につきません。On Error Resume Next は「使わざるを得ない」と思う
場所以外では使うべきではありません。私見でした。
回答ありがとうございます。
エラーの原因もわかりました。
(わかってもそのまま解決のコードまで導けはしないですが)
Intersectは以前質問した時にも教えていただきましたが、
いまいち理解できてないようで巧く使えていません。
#3のコードの方がわかりやすくて助かります。
On Error Resume Next は、問答無用で止まらなくなるから、
技術無い今は特に楽なんですけどねぇ。
No.3
- 回答日時:
ごめんなさい。
#1 を試してみたら Excel がフリーズしますね。。こんな感じではどうですか?
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 And Target.Count < Columns.Count Then
Target.Offset(0, 1).Interior.ColorIndex = 5
End If
End Sub
No.2
- 回答日時:
If Target.Columns.Count = 1 Then
If Target.Column = 1 Then
Target.Offset(0, 1).Interior.ColorIndex = 5
End If
End If
でいかがでしょうか?
回答ありがとうございます。
正常に動作しました。
実際に作りたいコードでは判断するのはA列だけではないのですが、
If Target.Columns.Count = 1 Thenを弄ることによって、こちらも動作を確認しました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Changeイベントで複数セルへの貼り付けおよび値削除時に1個目のセルのみエラーになる 3 2022/12/21 09:07
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) Excelにて、シート1の行を削除するとシート2のシート1と同じ番号の行も削除したい 3 2022/05/08 04:24
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) エクセルの自動更新のタイミングについて 1 2022/07/20 16:12
- Excel(エクセル) エクセルのイベントプロシージャーでF列の最終行のセルの入力をトリガーにしたいのですが 1 2022/10/14 09:36
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) エクセル VBAで複数セル選択時エラーになる問題 3 2022/10/04 02:40
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
-
4
エクセルでエラーが出て困っています。
Excel(エクセル)
-
5
VBA:結合されたセルに対する「Target」について
Access(アクセス)
-
6
他のシートの特定のセルが変わると、自動実行されるマクロについて
Excel(エクセル)
-
7
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
8
A1セルに入力したら、入力時間をA2セルに自動挿入
Excel(エクセル)
-
9
ExcelのVBAでフォームが表示されない
Excel(エクセル)
-
10
EXCEL あるセルに数字が入力されれば既存マクロ実行させたい
Excel(エクセル)
-
11
特定セルの内容を更新したら、その更新日を自動的に表示する方法について
Excel(エクセル)
-
12
【VBA】Worksheet_changeイベントで特定のキーが押されたときだけ無効にしたい
Visual Basic(VBA)
-
13
エクセルVBAでシートモジュールでのパブリック変数
Excel(エクセル)
-
14
エクセルVBAのDeleteキーによるエラー
Excel(エクセル)
-
15
型が一致しない というエラー
Excel(エクセル)
-
16
vbaで指定したセルより下の行を指定する方法について vbaの質問です。 例えば、「C6」セルより下
Excel(エクセル)
-
17
データが入力されている隣のセルに当日日付と時刻を入力するExcel VBAプログラム
Visual Basic(VBA)
-
18
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
19
VBA deleteをクリックすると型が一致しないとデバッグになります。
Visual Basic(VBA)
-
20
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで数式内の文字色を一部だ...
-
エクセルで指定したセルのどれ...
-
セルをクリック⇒そのセルに入力...
-
【エクセル】IF関数 Aまたは...
-
エクセル 足して割る
-
貼り付けで複数セルに貼り付けたい
-
対象セル内(複数)が埋まった...
-
エクセルの一つのセルに複数の...
-
エクセルで作成したカレンダー...
-
枠に収まらない文字を非表示に...
-
エクセルで第2、第4土曜日を抽...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
【Excel】 セルの色での判断は...
-
セルの高さ(行高)を求めるには?
-
EXCEL VBA セルに既に入...
-
エクセル オートフィルタで絞...
-
Excel 例A(1+9) のように番地の...
-
エクセルのセルの枠を超えて文...
-
excelのCOUNTIF関数で、『範囲=...
-
Excelでのコメント表示位置
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで指定したセルのどれ...
-
【エクセル】IF関数 Aまたは...
-
貼り付けで複数セルに貼り付けたい
-
対象セル内(複数)が埋まった...
-
Excelで数式内の文字色を一部だ...
-
セルをクリック⇒そのセルに入力...
-
Excelでのコメント表示位置
-
エクセル 足して割る
-
excelのCOUNTIF関数で、『範囲=...
-
EXCEL VBA セルに既に入...
-
エクセル オートフィルタで絞...
-
エクセルのセルの枠を超えて文...
-
(Excel)数字記入セルの数値の後...
-
エクセルの一つのセルに複数の...
-
【Excel】 セルの色での判断は...
-
Excel2003 の『コメント』の編...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
複数のセルのいずれかに数字が...
-
枠に収まらない文字を非表示に...
-
excelの特定のセルの隣のセル指...
おすすめ情報