![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
エクセルで簡単な計算書を作成しています。(マクロ初心者)
ちなみにこのコードは自分で作成したものではなく、人から聞いていじってみました。
Private Sub Worksheet_Change(ByVal Target As Range)
'一度に複数セルの値が変更された場合は終了
'(A5:C5を選択しDeleteも含みます。)
If Target.Count > 1 Then Exit Sub
If Intersect(Target, Me.Range("H170:K170", "H171:K171","C76")) Is Nothing Then Exit Sub
Application.EnableEvents = False
'数値かつ空白以外の場合
If IsNumeric(Target.Value) And Target.Value <> "" Then
Me.Range("M170").Formula = "=if(iserror(H170*I170*J170*K170),""-"",H170*I170*J170*K170)"
'空白の場合
ElseIf Target.Value = "" Then
Me.Range("H170:K170,M170").Value = "-"
End If
Application.EnableEvents = True
Application.EnableEvents = False
'数値かつ空白以外の場合
If IsNumeric(Target.Value) And Target.Value <> "" Then
Me.Range("M171").Formula = "=if(iserror(H171*I171*J171*K171),""-"",H171*I171*J171*K171)"
'空白の場合
ElseIf Target.Value = "" Then
Me.Range("H171:K171,M171").Value = "-"
End If
Application.EnableEvents = True
Application.EnableEvents = False
'空白の場合
If Target.Value = "" Then
Me.Range("D76:K76","C76").Value = "-"
End If
Application.EnableEvents = True
End Sub
H170、I170、J170、K170のどれかに数値の入力があった場合、M170に計算式を入力。
H170、I170、J170、K170のどれかの値をDELETEキーでクリアした場合、H170、I170、J170、K170、M170に"-"を入力。
その他に似たような処理がたくさん出てくるので、H171の処理とC76をDELETEキーでクリアした場合の処理を自分で考えて作ってみたのですが、うまく実行されません。H171~の処理はうまくいったので単純にコードをどんどん追加していけば動くと思ったんですが、いろいろ調べてもどうも方法がわからず進みません・・・
解決してもらえるでしょうか・・
No.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
>これを実行すると、"引数の数が一致していません。または不正なプロパティを指定しています。
理由は分かりませんが、別のシートでも、新しいブックでもよいので、貼り付けて試してみてください。
ありがとうございます。
思ったとおりに動作しています。
基本が理解できていないまま質問してすみませんでした。
この文も調べて理解を深めようと思います。
色々とありがとうございました!
No.1
- 回答日時:
こんにちは。
マクロの修正自体は、
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イベントを複数回実行できるように組まないといけないってことはわかって試行錯誤しているんですがどうもうまくいきません・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【再々投稿】VBAのプログラムで動作しなくて困っています 8 2022/10/14 09:06
- Visual Basic(VBA) 【再投稿】VBAで動作しなくて困っています 2 2022/10/11 11:05
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) VBAのトグルボタンでのマクロについて質問です 3 2022/10/10 17:23
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Visual Basic(VBA) エクセル VBAで複数セル選択時エラーになる問題 3 2022/10/04 02:40
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
勃起する時って痛いんですか? ...
-
彼女のことが好きすぎて彼女の...
-
白血球が多いとどんな心配があ...
-
検便についてです。 便は取れた...
-
精子が黄色?
-
風俗店へ行く前のご飯
-
これって喉仏ですか? 私は女性...
-
中出しをするとお腹が痛い・・・。
-
甲状腺が腫れているが血液検査...
-
エクセル指定した範囲からラン...
-
精子に血が・・・
-
【Excelで「正弦波」のグラフを...
-
腕を見たら黄色くなってる部分...
-
口の中に黒い血の塊
-
筋トレするとチンコが縮んじゃ...
-
旦那のピンサロ好きについてで...
-
詳しい方、至急返答お願いいた...
-
納豆食べた後の尿の納豆臭は何故?
-
おへその少し上が痛いのですが…
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
白血球が多いとどんな心配があ...
-
検便についてです。 便は取れた...
-
勃起する時って痛いんですか? ...
-
彼女のことが好きすぎて彼女の...
-
腕を見たら黄色くなってる部分...
-
精子が黄色?
-
EXCELで条件付き書式で空白セル...
-
至急!尿検査前日にオナニーし...
-
これって喉仏ですか? 私は女性...
-
中出しをするとお腹が痛い・・・。
-
甲状腺が腫れているが血液検査...
-
2つの数値のうち、数値が小さい...
-
尿検査前日に自慰行為した時の...
-
EXCELで式からグラフを描くには?
-
小数点以下を繰り上げたものを...
-
ある範囲のセルから任意の値を...
-
口の中に黒い血の塊
-
【Excelで「正弦波」のグラフを...
-
エクセル指定した範囲からラン...
おすすめ情報