質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

1429閲覧

同じシートに二つのことを実行したいんです。 2個目はC4にすでに2と入力しています。セル(G8)に数字を入力すると、G8-C4の値は2以上ならF13=D13になるようにしたい。

freia

総合スコア4

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/04/08 06:14

シート1に下記のコードをすでに記入してあります。問題なく実行できます。

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 6 And Target.Column <> 14 And Target.Column <> 22 And Target.Column <> 30 Then Exit Sub Dim i As Variant i = Target.Value If Not IsNumeric(i) Or IsEmpty(i) Then Exit Sub Dim j As Variant j = Target.Offset(, -2).Value If Not IsNumeric(j) Or IsEmpty(j) Then Exit Sub Application.EnableEvents = False Target.Value = j * i Application.EnableEvents = True End Sub

同じシートに下記のことを追加して実行したいんです。
C4にすでに2と入力しています。セル(G8)に数字を入力すると、G8-C4の値は2以上ならF13=D13になるようにしたい。
また、K4にすでに3と入力しています。セル(O8)に数字を入力すると、O8-K4の値は2以上ならN13=L13になるようにしたい。
下記のコードを書きました。エラーができました。
コンパイル エラー 名前が適切ではありません
直し方を教えていただけますでしょうか?どうかよろしくお願いいたします。

Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 6 And Target.Column <> 14 And Target.Column <> 22 And Target.Column <> 30 Then Exit Sub Dim i As Variant i = Target.Value If Not IsNumeric(i) Or IsEmpty(i) Then Exit Sub Dim j As Variant j = Target.Offset(, -2).Value If Not IsNumeric(j) Or IsEmpty(j) Then Exit Sub Application.EnableEvents = False Target.Value = j * i Application.EnableEvents = True End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) <> "G" & 8 And Target.Address(0, 0) <> "N" & 8 Then Exit Sub Dim T As Variant Dim T1 As Variant T1 = Target.Value If Not IsNumeric(T1) Or IsEmpty(T1) Then Exit Sub Dim T2 As Variant T2 = Target.Offset(4, -4).Value If Not IsNumeric(T2) Or IsEmpty(T2) Then Exit Sub Application.EnableEvents = False T = T1 - T2 If T > 2 Then Target.Offset(5, -1) = Target.Offset(5, -3) Application.EnableEvents = True End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

モジュール内に同じ名前のプロシージャを記述するとことはできません。

一つのWorksheet_Changeにまとめましょう。

アウトラインとしては下記のような記述になります。

vba

1Private Sub Worksheet_Change(ByVal Target As Range) 2 3 If Target.Column = 6 Or Target.Column = 14 Or Target.Column = 22 Or Target.Column = 30 Then 4 'F列、N列、V列、AD列に入力されたときに実行する処理 5 6 7 ElseIf Target.Address(0, 0) = "G8" Or Target.Address(0, 0) <> "O8" Then 8 9 'G8、N8に入力されたときに実行する処理 10 11 End If 12End Sub

投稿2021/04/08 06:36

hatena19

総合スコア34075

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

freia

2021/04/08 06:53

こんにちは。 先日からいろいろお世話になっております。 コードを次のように変えました。Ifの次の動きは大丈夫です。 ElseIfの次の動作がしないんです。 どこがまちがっているんでしょうか? 教えていただけますでしょうか?どうかよろしくお願いいたします。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 6 Or Target.Column = 14 Or Target.Column = 22 Or Target.Column = 30 Then Dim i As Variant i = Target.Value If Not IsNumeric(i) Or IsEmpty(i) Then Exit Sub Dim j As Variant j = Target.Offset(, -2).Value If Not IsNumeric(j) Or IsEmpty(j) Then Exit Sub Application.EnableEvents = False Target.Value = j * i Application.EnableEvents = True ElseIf Target.Address(0, 0) = "G" & 8 Or Target.Address(0, 0) = "O" & 8 Then Dim T As Variant Dim T1 As Variant T1 = Target.Value If Not IsNumeric(T1) Or IsEmpty(T1) Then Exit Sub Dim T2 As Variant T2 = Target.Offset(4, -4).Value If Not IsNumeric(T2) Or IsEmpty(T2) Then Exit Sub Application.EnableEvents = False T = T1 - T2 If T > 2 Then Target.Offset(5, -1) = Target.Offset(5, -3) Application.EnableEvents = True End If End Sub
hatena19

2021/04/08 07:08

G8-C4 ということなら、 T2 = Target.Offset(4, -4).Value は、下記になると思います。 T2 = Target.Offset(-4, -4).Value
freia

2021/04/09 01:11

hatena19さん、おはようございます。 修正しまして、その通り動作しました。 どうもありがとうございました。 実は、後ちょっとの修正が必要になりますが、自分で調べてまた質問させていただきますね。 では、よいお週末(^^♪
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問