- ベストアンサー
VBA Changeイベントのエラー
- エクセルで簡単な計算書を作成しています。VBAのChangeイベントでエラーが発生しており、解決方法がわかりません。
- 特定のセルに数値が入力された場合、計算式を入力する処理が正常に動作しません。
- さらに、特定のセルの値をクリアした場合の処理もうまく動作しません。解決方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 私としては、#1の補足の内容は、あまり理解できていません。 >C76をDeleteした場合、D76:K76, C76に"-"を入力し、値が入力された場合はなにもしないというような処理をしたいです。 Me.Range("D76:K76", "C76").Value = "-" というのは、 Range("C76:K76").Value = " -" という意味だと思います。 >If Intersect(Target, Me.Range("H170:K170", "H171:K171","C76")) これ自体も、そのままで理解したら、 If Intersect(Target, Range("C79::K171")) ということだと思います。しかし、どうも違うような気がします。 本来は、ここら辺自体も説明が必要なのです。 もし、エリアが複数に分かれるなら、Range("H170:K170, H171:K171 ,C76") ということです。 もう、ここらは基本的なことですから、あまり細々教えることでもないとは思いますが。 私は、掲示板では、依頼に応じて、何度も作り直すということは、私はしていないのですが、これを見れば分かっていただけると思います。 -------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long Dim j As Long If Target.Count > 1 Then Exit Sub If Intersect(Target, Range("H170:K180, C76")) Is Nothing Then Exit Sub i = Target.Row: j = Target.Column '行と列数を取得 Application.EnableEvents = False If IsNumeric(Target.Value) And Target.Value <> "" And j > 7 Then Cells(i, 13).FormulaLocal = _ "=IF(ISERROR(RC[-5]*RC[-4]*RC[-3]*RC[-2]),"" -"",RC[-5]*RC[-4]*RC[-3]*RC[-2])" '空白の場合 ElseIf Target.Value = "" And j > 7 Then Cells(i, 8).Resize(, 4).Value = " -" 'H:K Cells(i, 13).Value = " -" 'M ElseIf Target.Value = "" And j < 8 Then Range("C76:K76").Value = " -" End If Application.EnableEvents = True End Sub >これを実行すると、"引数の数が一致していません。または不正なプロパティを指定しています。 理由は分かりませんが、別のシートでも、新しいブックでもよいので、貼り付けて試してみてください。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 マクロの修正自体は、 If Intersect(Target, Me.Range("H170:K170", "H171:K171","C76")) Is Nothing Then Exit Sub ↓ If Intersect(Target, Range("H170:K170,H171:K171, C76")) Is Nothing Then Exit Sub 後は、内容が確認できない部分があるので、書けません。(Me キーワードは、シート間をまたぐことはないので、特に必要はないです) >'(A5:C5を選択しDeleteも含みます。) >Range("D76:K76, C76").Value = " - " この部分が良く分かりません。C76 に数値を入力したら、D76;K76 までを、どうするのでしょうか。 それと、ひとつのセルに Delete を行うと「-」が全部に入ってしまうのは、ちょっと過激なような気がします。数式で既にエラー処理されているのですから、数式まで削除して、「-」を入れてしまうのでしょうか?
補足
>'(A5:C5を選択しDeleteも含みます。) すみません無視してください。 >Range("D76:K76, C76").Value = " - " >この部分が良く分かりません。C76 に数値を入力したら、D76;K76 までを、どうするのでしょうか。 C76をDeleteした場合、D76:K76, C76に"-"を入力し、値が入力された場合はなにもしないというような処理をしたいです。 >それと、ひとつのセルに Delete を行うと「-」が全部に入ってしまうのは、ちょっと過激なような気がします。数式で既にエラー処理されているのですから、数式まで削除して、「-」を入れてしまうのでしょうか? 数式が入力されているセルに直接数値を入力する場合もあり、数式が入っている上から直接値を入力するのはあまりしたくないんです。(数式がマクロで挿入されるので問題は無いんですが、見た目上として) 複数の人間が使う事を想定してまして、直接値を入力できるセルには"-"がデフォで入力してあるのが理想なんです。 さらにすみませんが補足です。 これを実行すると、"引数の数が一致していません。または不正なプロパティを指定しています。"とでて、If Intersect(Target,Range ←ここのRangeが反転します。 これって引数は2つまでしか指定できないってことですよね? changeイベントを複数回実行できるように組まないといけないってことはわかって試行錯誤しているんですがどうもうまくいきません・・・
お礼
ありがとうございます。 思ったとおりに動作しています。 基本が理解できていないまま質問してすみませんでした。 この文も調べて理解を深めようと思います。 色々とありがとうございました!