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も見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
Excel VBAでのWorksheet_Changeが動作しない原因
Excel(エクセル)
-
Changeイベントでの複数セルのクリアの処理について
Visual Basic(VBA)
-
エクセル イベントマクロ Changeイベントを複数作りたい
Access(アクセス)
-
-
4
【VBA】Worksheet_changeイベントで特定のキーが押されたときだけ無効にしたい
Visual Basic(VBA)
-
5
型が一致しない というエラー
Excel(エクセル)
-
6
エクセルでエラーが出て困っています。
Excel(エクセル)
-
7
VBA:結合されたセルに対する「Target」について
Access(アクセス)
-
8
VBA deleteをクリックすると型が一致しないとデバッグになります。
Visual Basic(VBA)
-
9
A1セルに入力したら、入力時間をA2セルに自動挿入
Excel(エクセル)
-
10
ExcelのVBAでフォームが表示されない
Excel(エクセル)
-
11
ExeclVBAユーザーフォームから右クリックでショートカットメニューで困っています。
Visual Basic(VBA)
-
12
エクセルVBAでシートモジュールでのパブリック変数
Excel(エクセル)
-
13
特定セルの内容を更新したら、その更新日を自動的に表示する方法について
Excel(エクセル)
-
14
エクセルVBAのDeleteキーによるエラー
Excel(エクセル)
-
15
Application.ScreenUpdating = Falseが効きません
Visual Basic(VBA)
-
16
データが入力されている隣のセルに当日日付と時刻を入力するExcel VBAプログラム
Visual Basic(VBA)
-
17
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
18
ExcelのVBAでエラー13が出てしまいます。(泣き)
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで指定したセルのどれ...
-
貼り付けで複数セルに貼り付けたい
-
【Excel】 セルの色での判断は...
-
Excelで数式内の文字色を一部だ...
-
(Excel)数字記入セルの数値の後...
-
セルをクリック⇒そのセルに入力...
-
【エクセル】IF関数 Aまたは...
-
EXCEL VBA セルに既に入...
-
対象セル内(複数)が埋まった...
-
エクセル オートフィルタで絞...
-
セルに特定の色が付いていたら...
-
エクセル 足して割る
-
エクセルのセルの枠を超えて文...
-
【Excel】特定の文字から文字ま...
-
Excelでのコメント表示位置
-
Excel2003 の『コメント』の編...
-
複数のセルのいずれかに数字が...
-
エクセル セルの中に縦線が入っ...
-
EXCELで一番安い金額と名前を抜...
-
文字列として"(ダブルコーテー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル 足して割る
-
【エクセル】IF関数 Aまたは...
-
エクセルで指定したセルのどれ...
-
Excelで数式内の文字色を一部だ...
-
Excelでのコメント表示位置
-
貼り付けで複数セルに貼り付けたい
-
対象セル内(複数)が埋まった...
-
セルをクリック⇒そのセルに入力...
-
【Excel】 セルの色での判断は...
-
エクセルの一つのセルに複数の...
-
EXCEL VBA セルに既に入...
-
エクセル “13ヶ月”を“1年1ヶ月...
-
エクセル オートフィルタで絞...
-
エクセルのセルの枠を超えて文...
-
excelのCOUNTIF関数で、『範囲=...
-
(Excel)数字記入セルの数値の後...
-
枠に収まらない文字を非表示に...
-
Excel2003 の『コメント』の編...
-
Excel 例A(1+9) のように番地の...
-
複数のセルのいずれかに数字が...
おすすめ情報