『セルを変えた時に実行するVBA』(ツバサ) セルE4を変えた時に実行する下記のようなVBAがあります。 (自分で考えたVBAでないしVBAをあまり知らないので理解できていません) セルE2に変えた時に実行するVBAも一緒に同シート内で作れますか? 教えて下さい! Option Explicit '[E4のセルを変えた時に実行するVBA]************************************************************** Private Sub Worksheet_Change(ByVal Target As Range) Sheets("検索用").Select Range("E4:G5").Select If Target.Count > 1 Then Exit Sub If Target.Address(5, 4) <> "E4" Then Exit Sub Application.EnableEvents = False Range("E2:G5").Select Selection.ClearContents Range("J2:J3").Select Selection.ClearContents Range("C8:E10").Select Selection.ClearContents Range("G8:G9,H10:J10").Select Range("H10").Activate Selection.ClearContents Range("L8:L10,N8:N9").Select Range("N8").Activate Selection.ClearContents Range("C13:D17,F13:G13,I13:J17,M13:N16").Select Range("M13").Activate Selection.ClearContents Range("B20:G29,I20:N29").Select Range("I20").Activate Selection.ClearContents Range("C8").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,1,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,3,FALSE)))" Range("C9").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,2,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,4,FALSE)))" Range("C10").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,3,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,5,FALSE)))" Range("G8").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,21,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,23,FALSE)))" Range("G9").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,23,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,25,FALSE)))" Range("H10").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C28,26,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C28,28,FALSE)))" Range("L8").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,4,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,6,FALSE)))" Range("L9").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,5,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,7,FALSE)))" Range("L10").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,6,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,8,FALSE)))" Range("N8").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,8,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,10,FALSE)))" Range("N9").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,21,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,23,FALSE)))" Range("C13").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,29,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,31,FALSE)))" Range("C14").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,30,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,32,FALSE)))" Range("C15").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,31,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,33,FALSE)))" Range("C16").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,32,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,34,FALSE)))" Range("C17").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,33,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,35,FALSE)))" Range("F13").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,28,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,30,FALSE)))" Range("I13").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,38,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,40,FALSE)))" Range("I14").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,39,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,41,FALSE)))" Range("I15").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,40,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,42,FALSE)))" Range("I16").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,41,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,43,FALSE)))" Range("I17").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,42,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,44,FALSE)))" Range("M13").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,45,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,47,FALSE)))" Range("M14").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,46,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,48,FALSE)))" Range("M15").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,47,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,49,FALSE)))" Range("M16").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,48,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,50,FALSE)))" Range("B20").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,10,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,12,FALSE)))" Range("B21").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,11,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,13,FALSE)))" Range("B22").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,12,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,14,FALSE)))" Range("B23").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,13,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,15,FALSE)))" Range("B24").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,14,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,16,FALSE)))" Range("B25").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,15,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,17,FALSE)))" Range("B26").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,16,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,18,FALSE)))" Range("B27").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,17,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,19,FALSE)))" Range("B28").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,18,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,20,FALSE)))" Range("B29").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C25,19,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C25,21,FALSE)))" Range("I20").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,50,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,52,FALSE)))" Range("I21").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,51,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,53,FALSE)))" Range("I22").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,52,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,54,FALSE)))" Range("I23").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,53,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,55,FALSE)))" Range("I24").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,54,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,56,FALSE)))" Range("I25").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,55,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,57,FALSE)))" Range("I26").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,56,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,58,FALSE)))" Range("I27").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,57,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,59,FALSE)))" Range("I28").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,58,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,60,FALSE)))" Range("I29").Select ActiveCell.FormulaR1C1 = _ "=IF(R4C5="""","""",IF(R2C10="""",VLOOKUP(R4C5,リスト一覧!C3:C61,59,FALSE),VLOOKUP(R4C5&R2C10,リスト一覧!C1:C61,61,FALSE)))" Range("E4").Select End Sub ※XP EXCEL2000 (ツバサ) ---- このコードは思ったとおりに機能していますか? 1) Address(5,4) の意味がわかりません。 2) Sheets("検索用")とは、このコードが書かれているシートではないのですか? 3) Range("C8:E8").Select から以下の行はActiveCellだから最初のセルだけに に適用されていると思いますが? とにかく、このように長いコードを何の説明もなく提示するよりも、きちんと 何をどうしたいのかを説明した方がレスを付けやすいですよ? (seiya) ---- 1)は多分 Cells(5, 4).Address(0, 0) の意味かと。。。 3)は多分、Mergeされているものと。。。 (ROUGE) ---- Cells(5,4).Address(0,0)<> "E5" だと常にFalseになりますよね? さっぱりわからない... (seiya) ---- 本体部分の延々と続くコードの中身は見てませんが、 > セルE4を変えた時に実行する下記のようなVBAがあります。 > セルE2に変えた時に実行するVBAも一緒に同シート内で作れますか? ここだけ If Target.Address(5, 4) <> "E4" Then Exit Sub が If Target.Address(0, 0) <> "E4" Then Exit Sub だとして、ここを If Target.Address(0, 0) <> "E4" AND Target.Address(0, 0) <> "E2" Then Exit Sub とすればよさそうです。けれど、 > (自分で考えたVBAでないしVBAをあまり知らないので理解できていません) の状況では後がうまくいくか心配です。 ---- そのほかに、VLOOKUPの検索値として用いられている部分にTarget.Addressを入れ込む必要がありますね。 でも、せっかくチェンジイベントを使うのであれば、数式を代入するのではなく、もっと良い方法があるような気がします。。。 (ROUGE) ---- seiyaさん ROUGEさん コメントすみません。 1) Address(5,4) → Address(0,0) でした。  2) Sheets("検索用") → 消しました。 3) 理解できませんでした。 VBAを組んだ内容 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Target.Address(0, 0) <> "E4" Then Exit Sub Application.EnableEvents = False というVBAがあったので、行ないたい処理(Rengeのクリアーと関数)を マクロで登録して貼り付けて完成させました。 実際に行ないたい処理は、E2に文字を入力したときにRengeのクリアーと関数の入力、 E4に文字を入力したときはRengeのクリアーと違う関数の入力です。 E2とE4で関数を変えたいのです。 ROUGEさんのおっしゃる通り、違う良いやり方があるのでしょうね。 ズラズラと長い文でうまく問いかけできなくてすみません。 できれば続けてご説明お願い致します。 (ツバサ) ---- 数式の入る範囲は「結合」されているのですか? (seiya) ---- seiyaさん E2とE4は結合していますが、数式の入るセルは結合していません。 (ツバサ) ---- えっ? E2/E4はどのように結合されているのですか? >E2とE4に文字を入力したとき.... 「文字」とはどのような文字ですか? (seiya) ---- ごめんなさい。E2はE2:G3 E4はE4:G5 と別々で結合しています。 文字は下記のようなものです。 [例] 英数10桁のもの Z111111A11 ZZZ2222A22 ZZZZ333A33 英数11桁のもの ZZZ4444A444 ZZZZ555A555 全て半角の英数です。 (ツバサ) ---- それ以外(10−11桁の文字以外)の時は無視ですか? 数式を入力する範囲が C8:E8 になっていて、ActiveCell にだけ数式を 挿入していますが C8にだけ数式を挿入するということですか? とにかく、提示されたコードから推測するのはとても無理です。 詳しく(範囲を含めて)説明した方がわかりやすいです。 (seiya) ---- (1) 10−11桁以外のときは無視でよいです。 (2) C8にだけ数式を挿入するということです。 (3) 範囲を見直しました。 最初の式はE4に文字を入力した場合に指定したセルのクリアー、関数設定を するように考えたのですが、 本当はE2に入力したときには、この関数・・・ E4に入力した場合は、この関数・・・ と、2通りのことを実行したいのです。 説明下手ですみません。宜しくお願い致します。 (ツバサ) ---- Priavte Sub Worksheet_Change(ByVal Target As Range) With Target.Cells(1,1) If ((.Address(0,0) = "E2") + (.Address(0,0) = "E4")) * ((Len(.Value) = 10) + (Len(.Value) = 11)) Then Application.EnableEvents = False 'ここに範囲をクリアするコード If .Address(0,0) = "E2" Then 'ここに E2 に変化があった場合のコード ElseIf .Address = "E4" Then 'ここに E4 に変化があった場合のコード EndIf Application.EnableEvents = True End If End With こんな感じになると思います。 (seiya) ---- seiyaさん 早急に回答ありがとうございます。 早速試してみます。少し時間がかかると思いますが・・・結果報告します。 (ツバサ) ---- 実行してみました。 実行時エラー424 オブジェクトが必要です。とエラメッセージが出て 4行目の Applicatiion.EnableEvents = False で止まります。 なぜでしょうか?(ツバサ) ---- タイプミスです i が一つ多いですね Application.EnableEvents = False です。 (seiya) ---- 下記の式をつくりテストランしてみました。 E2に入力したときはF9とF11はクリアされG9に「猿」G11に「猫」が入力されましたが、 E4に入力したときは、F9とF11のクリアはされましたが、G9に「サル」、G11に「ネコ」は 入力されませんでした。 何がいけないのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) With Target.Cells(1, 1) If ((.Address(0, 0) = "E2") + (.Address(0, 0) = "E4")) * ((Len(.Value) = 10) + (Len(.Value) = 11)) Then Application.EnableEvents = False 'ここに範囲をクリアするコード Range("F9,F11").Select Range("F11").Activate Selection.ClearContents If .Address(0, 0) = "E2" Then 'ここに E2 に変化があった場合のコード Range("G9").Select ActiveCell.FormulaR1C1 = "猿" ActiveCell.Characters(1, 1).PhoneticCharacters = "サル" Range("G11").Select ActiveCell.FormulaR1C1 = "猫" ActiveCell.Characters(1, 1).PhoneticCharacters = "ネコ" Range("G12").Select ElseIf .Address = "E4" Then 'ここに E4 に変化があった場合のコード Range("G9").Select ActiveCell.FormulaR1C1 = "サル" Range("G11").Select ActiveCell.FormulaR1C1 = "ネコ" Range("G12").Select End If Application.EnableEvents = True End If End With End Sub (ツバサ) ---- "サル" "ネコ" を表示させたいのですか? "猿", "猫" を表示させたいのですか? "猿", "猫" に振り仮名をつけて表示させたいのですか? (seiya) ---- 文字列での比較をしているので Address と Address(0,0) は意味が異なりますよ。 (Mook) ---- おっと、見逃していました。 Mookさんのご指摘どおりですね。 ElseIf .Address(0,0) = "E4" Then ですね (seiya) ---- あっと、失礼。 全体の流れを見ていませんでしたので、ツバサ さんのコードかと思って発言しましたが、 元は seiya さんのサンプルコードでしたか。 釈迦に説法でした。 (Mook) ---- いえいえ、このようなヘマは私の専売特許のようなものですので... いつも皆さんにお手数おかけしてます。 (seiya) ---- seiyaさん Mookさん コメントありがとうございます。サンプルでOKでした。 実際のデータで試してみます。  (ツバサ) ---- 実際のデータでテストランしました。 バッチリできました。ありがとうございます。 でも・・・今更ですみません・・・今気付いたのですが、実際のデータで条件が違うのがありました。 E2は数字のみ5桁でした。E4は10桁と11桁です。式修正で対応できますか? 今になって本当にすみません。 (ツバサ) ---- 現在使用中のコードを提示してください。 (seiya) ---- コード下記します。 Private Sub Worksheet_Change(ByVal Target As Range) With Target.Cells(1, 1) If ((.Address(0, 0) = "E2") * ((Len(.Value) = 10) + (Len(.Value) = 11))) + _ ((.Address(0,0) = "E4") * (IsNumeric(.Value)) * Len(CStr(.Value))=5)Then Application.EnableEvents = False 'ここに範囲をクリアするコード If .Address(0, 0) = "E2" Then 'ここに E2 に変化があった場合のコード Range("E4:G5,J2:J3").ClearContents Range("C8").FormulaR1C1 = _ "=IF(R2C5="""","""",VLOOKUP(R2C5,直材マスターデータ!C5:C27,23,FALSE))" 〜〜〜省略〜〜〜 ElseIf .Address(0, 0) = "E4" Then 'ここに E4 に変化があった場合のコード Range("E2:G3,J2:J3").ClearContents Range("C8").FormulaR1C1 = "=IF(R4C5="""","""",R4C5)" 〜〜〜省略〜〜〜 End If Application.EnableEvents = True End If End With End Sub (ツバサ) ---- 勝手にコードを書き換えてしまいましたが、どうでしょう? (seiya) ---- コンパイルエラー 構文エラーと表示されます。 If ((.Address(0, 0) = "E2") * ((Len(.Value) = 10) + (Len(.Value) = 11))) + _ ((.Address(0,0) = "E4") * (IsNumeric(.Value)) * Len(CStr(.Value))=5))Then この2行がすべて赤文字です。 (ツバサ) ---- ")" が一つ余計だったかも... コード変更しましたので、確認してください。 (seiya) ---- 了解しました チョット会議なので離れます。  (ツバサ) ---- 週またぎですみません。 seiyaさん コード変更で望みどおりのVBAが完成できました。 長々とお付き合いありがとうございました。 深く感謝致します。今回はこれで失礼致します。 (ツバサ)