• ベストアンサー
  • 困ってます

EXCEL2010エラーVBA

下記を実行するとエラーになりEXCEL2010が終了してしまいます。 fDebug:0 offset00009391 がエラーメッセージです。 何が原因でしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim ws As Worksheet Dim rg As Range Dim r As Variant Dim c As Long Dim hanni1 As Range Dim atai As Range Set ws = Worksheets("あああ") Set rg = Worksheets("コード").Range("A1:B10") r = ws.Cells(Rows.Count, 1).End(xlUp).Row Set hanni1 = ws.Range(Cells(2, 2), Cells(r, 3)) Set atai = ws.Range(Cells(2, 3), Cells(r, 3)) atai = Application.VLookup(hanni1, rg, 2, False) End Sub

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数946
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.3

イベントの発生を停止する方法やイベントを判別する方法を解説いたします。 1.イベントの発生を停止する。 以下のようにすれば、ataiを書き換えてもイベントが発生しません。 Application.EnableEvents = False atai = Application.VLookup(hanni1, rg, 2, False) Application.EnableEvents = True 注意点としては、イベント発生を再開する前にエラー等でVBAの実行が停止した場合などApplication.EnableEvents = Falseのままになってしまうと、何らかの方法でApplication.EnableEvents = TrueにしないとExcelを終了して再び起動するまでExcelのすべてのイベントが発生しなくなります。 2.フラグでイベントを判別する プロシージャが終了しても値が消えない変数を確保してイベント判別のフラグとして使用します。 下記の例ではモジュールレベル変数を使用し、初期値がFalseになることを利用しています。 Private AAA_Change As Boolean 'モジュール先頭の宣言部に書く Private Sub Worksheet_Change(ByVal Target As Range) ・・・(変数宣言)・・・ If AAA_Change Then Exit Sub ・・・(コード続き)・・・ AAA_Change = True atai = Application.VLookup(hanni1, rg, 2, False) AAA_Change = False 注意点としては、何らかの原因でAAA_Change = Trueのままになってしまうとこのプロシージャ(のIf AAA_Change Then Exit Subより後の部分)が実行されなくなります。 復帰ですが、ENDの実行、VBAのリセット、コードの変更等で変数が初期化されますので、1.のイベント発生停止よりは復帰が容易です。 3.変更する場所(セル範囲)でイベントを判別する Worksheet_Changeでは、変更のあった場所が変数Targetで渡されますので、その場所を見て処理を行うかどうかを決めるという方法があります。 この方法では、エラー等でataiの書換えが行われなくなることがありませんが、処理を行わない範囲(以下の例ではC列)を書き換えてもataiの書換えは行われないという点で1.や2.とは動作が異なります。 以下の例では簡単のためTargetの(最も左の)列がC列ではない場合に処理を行います。 Private Sub Worksheet_Change(ByVal Target As Range) ・・・(変数宣言)・・・ If Target.Column = 3 Then Exit Sub ・・・(コード続き)・・・ atai = Application.VLookup(hanni1, rg, 2, False) 注意点としては、シートのレイアウト変更を行った場合にセル範囲がずれてうまく動作しなくなることがあります。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 何とか設定できました。

関連するQ&A

  • VBA(エクセル)で教えて下さい。開いていないBOOKの貼り付け

    VBA(エクセル)で教えて下さい。開いていないBOOKのシートを開いているBOOKのシートに貼り付けで、開いているBOOKから開いていないBOOK名を指定したいのですが、 現在開いているエクセルです。 SHEETS(Type)のRANGE(A1)に閉じているBOOK名を入力します。 SHEETS(In)に閉じているBOOKのSHEETSを貼り付けたいのですが、 Ex = Sheets("Type").Range("A1")  が無いと閉じているEx.xlsを貼り付けます。 このExと言うBOOK以外も多々コピーしたいのですが、どのように書けば良いか分からず、 是非、教えて下さい。 Sub a1() Dim wsSrc As Worksheet, WS As Worksheet Dim PasteR As Range Dim x As Long Sheets("In").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select 'If Worksheets(1).Name = "STEP1" Then ' Worksheets(1).Activate ' Cells.ClearContents ' Else 'Worksheets.Add(Before:=Worksheets(1)).Name = "一覧" 'End If   Ex = Sheets("Type").Range("A1")   Set wsSrc = ActiveSheet Workbooks.Open "C:\WINDOWS\デスクトップ\test\Ex.xls" For Each WS In Worksheets x = WS.Range("A1").CurrentRegion.Rows.Count If WS.Index = 1 Then Set PasteR = wsSrc.Range("A1") Else Set PasteR = wsSrc.Range("A65536").End(xlUp).Offset(1) End If WS.Range(WS.Cells(1, 1), WS.Cells(x, 44)).Copy PasteR Set PasteR = Nothing Next ActiveWorkbook.Close False Set wsSrc = Nothing End Sub

  • VBAエクセルにて開いてないエクセルシートを開いてるシートに所得

    お世話になります。 「同じフォルダー内にBOOKが2つ有ります。1つ(AK.xls)を立上げて もう1つの(EX.xls)を立上げずに、EX.xls内のSheet1をコピーして AK.xlsのシート(STEP1)に貼り付けようとしています。」 どうしてもエラーが出てしまいます。 何方か、分かる方教えて下さい。 また記述して戴ければもっと助かります。 エラーは”1004”EX.xlsが見つかりません。と出てしまいます。 Sub ST() Dim wsSrc As Worksheet, WS As Worksheet Dim PasteR As Range Dim x As Long Sheets("STEP1").Select Cells.Select Selection.Delete Shift:=xlUp Range("A1").Select   Set wsSrc = ActiveSheet Workbooks.Open "EX.xls" For Each WS In Worksheets x = WS.Range("A1").CurrentRegion.Rows.Count If WS.Index = 1 Then Set PasteR = wsSrc.Range("A1") Else Set PasteR = wsSrc.Range("A65536").End(xlUp).Offset(1) End If WS.Range(WS.Cells(1, 1), WS.Cells(x, 44)).Copy PasteR Set PasteR = Nothing Next ActiveWorkbook.Close False Set wsSrc = Nothing End Sub デバックでは Workbooks.Open "EX.xls"この部分が黄色になります。 是非、回答を宜しくお願い致します。

  • エクセルVBAで実行時エラー 91 が出ます

    エクセル2000です 各部署の棚卸を纏める為のVBAを作成しているのですが、実行時にエラーになってしまいます エラーメッセージは 「実行時エラー 91   オブジェクト変数またはWithブロック変数が設定されていません」 です ご教授お願いいたします Sub 棚卸() Dim sh1 As Worksheet Dim sh2 As Worksheet Set sh1 = Worksheets("在庫集計票") Set sh2 = Worksheets("棚卸表") x = sh2.Range("A65536").End(xlUp).Row Z = sh1.Range("d2").Value ’部署番号 sh1.Range(Cells(5, Z), Cells(3000, Z)).ClearContents For i = 2 To x y = sh1.Range("A2:A" & Range("A2").End(xlDown).Row). _ Find(sh2.Cells(i, "a")).Row ’ここでエラーが発生します sh1.Cells(y, Z) = sh2.Cells(i, "c") Next i End Sub

その他の回答 (2)

  • 回答No.2

No.1です。 前提を書き忘れました。 質問文中のプロシージャ Worksheet_Change はシート"あああ"にあるとしました。 もしそうでない場合、No.1の回答は成り立ちません。

共感・感謝の気持ちを伝えよう!

  • 回答No.1

Excel2007でやってみました。 エラーの種類は違いますがやはりエラーにはなります。 原因は、 atai = Application.VLookup(hanni1, rg, 2, False) で範囲ataiを書き換えるとワークシートの内容が変更されたと判断されてその場でまたこのプロシージャが呼ばれ、そうするとまた上記のVLookupの行に行き、、、、、、 となり、このプロシージャの呼び出しが無限に続いてしまうということです。 対策ですが、ataiを書き換える前にイベントを一時的に止めてしまうか、手動によるシート内容変更と上記の行によるataiへの書き込みを判別して上記のVLookupの行を実行するかどうかを決めるかすればよいと思います。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答をいただきありがとうございます。 イベントを一時的に止める方法を勉強してみます。

質問者からの補足

>対策ですが、ataiを書き換える前にイベントを一時的に止めてしまうか、手動によるシート内容変更と上記の行によるataiへの書き込みを判別して上記のVLookupの行を実行するかどうかを決めるかすればよいと思います。 上記の点ですが、再計算等調べてみましたが具体的に設定できませんでした。 VBAの勉強を始めたばかりで力不足のためです。 もう少し具体的にアドバイスいただけるとたすかります。

関連するQ&A

  • VBA

    以下の構文では、理想通りに実行できません。10行目までは大丈夫なのですが、そのあとは何が悪いのかわかりません。 on error resume nextを省略するとオブジェクトが必要ですとエラーメッセージが表示されます。 回答宜しくお願い致します。 sub macro1()  dim a as variant  dim h as range  dim r as long  dim w0 as worksheet  set w0 = activesheet  worksheets.add after:=w0  r = 1  range("A1:G1") = array("苗字","名前","住所","TEL","〒","好きなスポーツ","性別")  on error resume next  for each h in w.range("A1:A" & w.range("A65536").end(xlup).row)   if h <> "" then    a = split(application.trim(replace(replace(h, " "," "),":",":")), " ")    r = r + 1    cells(r, "A") = split(a(0), ":")(1)    cells(r, "B") = split(a(1), ":")(1)    cells(r, "C") = split(a(2), ":")(1)    cells(r, "D") = split(a(3), ":")(1)    cells(r, "E") = split(a(4), ":")(1)    cells(r, "F") = a(5)    cells(r, "G") = a(6)   end if  next end sub

  • VBA どうしてなのでしょうか?

    どうしてなのかまったくわかりません… Sub test() Dim TW As Worksheet Set TW = Worksheets("Sheet2") TW.Activate Range("G5").Activate End Sub は良いのに Sub test() Dim TW As Worksheet Set TW = Worksheets("Sheet2") TW.Range("G5").Activate End Sub はエラーがでます… この理由をご存知の方いらっしゃいますか?? よかったら教えていただけませんか?

  • エクセルのVBAの記述について

    VBAの記述についてなのですが、 Sub filter() Dim gyo As Long Dim ws1 As Worksheet Dim ws2 As Worksheet Dim ws3 As Worksheet Set ws1 = Worksheets("データ") Set ws2 = Worksheets("チーム") Application.ScreenUpdating = False ws2.Range("A4:BH30").Clear gyo = ws1.Range("A65536").End(xlUp).Row ws1.Activate With ws1.Range(Cells(4, 1), Cells(gyo, 6)) .AutoFilter Field:=1, Criteria1:="A" .SpecialCells(xlCellTypeVisible).Copy ws2.Range("A4") Selection.AutoFilter End With Application.ScreenUpdating = True End Sub ならプログラムははしるのですが、 14行目を .SpecialCells(xlCellTypeVisible).Copy ws2.Range(Cells(4, 1)) だと 「実行時エラー 1004 Rangeメソッドは失敗しました Worksheet オブジェクト」 とでるのですが、出来ないのでしょうか? Cells(4, 1)の1のところを変数にして変えていきたいのですが、よい方法はありますか。 よろしくお願いいたします。

  • VBA 高速化

    以下のコードを改良して早く処理できるようにしたいです。素因数分解をして、素因数の数を数えるプログラムです。 Sub 素因数を数える() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Dim I As Long, j As Long, cnt As Long, wS As Worksheet, k As Long, Set wS = Worksheets("Sheet2") k = Worksheets("Sheet1").Range("A100010").End(xlUp).Row - 1 For dd = 3 To k Call aaa(Range("A" & dd)) Next dd Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub Private Sub aaa(ByVal Target As Range) Set wS = Worksheets("Sheet2") If Intersect(Target, Range("A:A")) Is Nothing Or Target.Count > 1 Then Exit Sub With Target If Not IsNumeric(.Value) Then Exit Sub If .Value Mod 1 = 0 Then Range("D1") = .Value For I = 1 To wS.Cells(Rows.Count, "A").End(xlUp).Row Do While Cells(Rows.Count, "D").End(xlUp) Mod wS.Cells(I, 1) = 0 cnt = cnt + 1 Cells(Rows.Count, "D").End(xlUp).Offset(1) = Cells(Rows.Count, "D").End(xlUp) / wS.Cells(I, 1) Loop If Cells(Rows.Count, "D").End(xlUp) = 1 Then Exit For Next I End If .Offset(, 1) = cnt End With Range("D:D").Clear End Sub 以前教えていただいたコードを使って書きました。 どういう状況で使っているかといいますと、シート1のA列に自然数を2から順番に並べ、シート2のA列に素数を並べておき、プログラムを実行すると、B列に素数の数が表示されるという具合です。 大変役に立っていたのですが、10萬ほどのデータを扱おうとすると、自分のコンピュータでは時間がかかりすぎます。そこでコードを改良して高速化をしたいのです。 いま考えられる改良点は、 1、D列を使って行っている処理をメモリで行うようにして、セルへのアクセスを省けないか 2、aaaの5行目の、"wS.Cells(Rows.Count, "A").End(xlUp).Row"この処理を簡単な変数の処理で代用できないか ということです。他にも高速化できる方法があれば教えてください。 よろしくお願いします。

  • ExcelVBA Dictionaryオブジェクト

    こんにちは。 Dictionaryオブジェクトについて、ご教示いただきたく質問させていただきます。 あるCSVデータにおいて、A列に入力されている番号で重複をなくし、重複する番号については、B列(売上額)C列(利益額)それぞれの値を合計してSheet2に表示させるコード(test1)を書きました。データの行数が3万5千行ほどあるため、処理が終わるのに3分程かかります。 今後もデータは増えていくので、処理終了までの時間をもう少し短縮したく、自分なりに調べてみたところ、Dictionaryオブジェクトというものを知り、使用例を参考にしながら見よう見まねでコード(test2)を書いて試してみたところ、処理終了まで数秒となり、かなり短縮されました。 エラーも出ることなく処理できるものの、Dictionaryオブジェクトに対する理解がイマイチでして、コードの書き方等、問題ないかを知りたく質問させていただいた次第です。 よろしくお願いいたします。 ------------------------------------------------------------------------------ Sub test1() Dim i As Long Dim lastRow As Long Dim ws As Worksheet Application.ScreenUpdating = False '不要データ削除 Rows("1:3").Select Selection.Delete Shift:=xlUp Range("B:Q,S:W,Y:AF").Select Selection.Delete Shift:=xlToLeft Range("A1").Select 'シート名変更・挿入 ActiveSheet.Name = "CSV" Sheets.Add After:=ActiveSheet ActiveSheet.Name = "売利集計" Set ws = Worksheets("売利集計") wS.Cells.ClearContents ws.Range("B1").Value = Worksheets("CSV").Range("B1") ws.Range("C1").Value = Worksheets("CSV").Range("C1") With Worksheets("CSV") .Range("A:A").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=ws.Range("A1"), unique:=True lastRow = ws.Cells(Rows.Count, "A").End(xlUp).Row With Range(ws.Cells(2, "B"), ws.Cells(lastRow, "B")) .Formula = "=SUMIF(CSV!A:A,A2,CSV!B:B)" .Value = .Value End With With Range(ws.Cells(2, "C"), ws.Cells(lastRow, "C")) .Formula = "=SUMIF(CSV!A:A,A2,CSV!C:C)" .Value = .Value End With End With Application.ScreenUpdating = True Set ws = Nothing MsgBox "売利集計完了しました。" End Sub Sub test2() Dim i As Long Dim lastRow As Long Dim ws As Worksheet Dim c As Range Dim dicS As Object Dim dicP As Object Application.ScreenUpdating = False '不要データ削除 Rows("1:3").Select Selection.Delete Shift:=xlUp Range("B:Q,S:W,Y:AF").Select Selection.Delete Shift:=xlToLeft Range("A1").Select 'シート名変更・挿入 ActiveSheet.Name = "CSV" Sheets.Add After:=ActiveSheet ActiveSheet.Name = "売利集計" '番号別集計 Set ws = Worksheets("売利集計") Set dicS = CreateObject("Scripting.Dictionary") Set dicP = CreateObject("Scripting.Dictionary") With Sheets("CSV") For Each c In .Range("A2", .Range("A" & .Rows.Count).End(xlUp)) dicS(c.Value) = dicS(c.Value) + Val(c.Offset(, 1).Value) dicP(c.Value) = dicP(c.Value) + Val(c.Offset(, 2).Value) Next With Worksheets("売利集計") .Columns("A:C").ClearContents .Range("A1").Resize(, 3).Value = Worksheets("CSV").Range("A1").Resize(, 3).Value .Range("A2").Resize(dicS.Count).Value = WorksheetFunction.Transpose(dicS.keys) .Range("B2").Resize(dicS.Count).Value = WorksheetFunction.Transpose(dicS.Items) .Range("C2").Resize(dicP.Count).Value = WorksheetFunction.Transpose(dicP.Items) End With End With Set dicS = Nothing Set dicP = Nothing MsgBox "売利集計完了しました。" End Sub

  • エクセルVBA,シート間転記でエラー1004

    皆様宜しくお願いします。 以下の記述で 「実行時エラー1004アプリケーション定義 またはオブジェクト定義のエラーです」が 出てきます。 やりたい作業としては「週入力」シートの D5セルから下に入力されている内容を 「転記」シートの同じセル範囲へ転記したいです。 現在、転記先開始位置としてD5セルを決め打ちしています。 D行は固定ですが 列は変更になる可能性があるので ゆくゆく変数で書きたいと思っています。 以前はfor next で1行ずつ転記していてたのですが データが多すぎて時間がかかるので すこしでも時間短縮できればと 思いコードをあれこれ考えています。 どうかよろしくお願いします。 Sheets("週入力").Select Dim aa As Long      'A行の最終取得 aa = Range("A" & Rows.Count).End(xlUp).Row Dim 人数 As Long     '変数「人数」を定義 人数 = aa - 4 Dim wsデータ As Worksheet Dim ws結果 As Worksheet Set wsデータ = ActiveWorkbook.Worksheets("週入力") Set ws結果 = ActiveWorkbook.Worksheets("転記") ws結果..Range(Cells(5, "D"), Cells(人数 + 5 - 1, "D")) =ws結果.Range(Cells(5, "D"), Cells(人数 + 5 - 1, "D")).Value

  • 型が一致しません・・・VBA

    困っています、、 このコードを実行するとなぜか 「型が一致しません」と言われてしまいます しかしF8を使い順番にやっていくとそのまま実行されます Option Explicit Dim wsDetail As Worksheet Dim wsData As Worksheet Dim wsMES As Worksheet Public Sub meisai() Call 基本 Call 職務 Call 時間外 Call 補助 Call その他 Call 通勤 End Sub Private Sub 基本() Set wsDetail = Worksheets("給与明細") Set wsData = Worksheets("データ入力") Set wsMES = Worksheets("MES歩率表") wsDetail.Range("D10") = wsData.Range("C5").Value End Sub Private Sub 職務() Set wsDetail = Worksheets("給与明細") Set wsData = Worksheets("データ入力") Set wsMES = Worksheets("MES歩率表") wsDetail.Range("H10") = wsData.Range("C8").Value * Range("C5").Value End Sub Private Sub 時間外() Set wsDetail = Worksheets("給与明細") Set wsData = Worksheets("データ入力") Set wsMES = Worksheets("MES歩率表") wsDetail.Range("L10") = wsData.Range("C14").Value _ * Range("C16").Value * wsMES.Range("C4").Value End Sub Private Sub 補助() Set wsDetail = Worksheets("給与明細") Set wsData = Worksheets("データ入力") Set wsMES = Worksheets("MES歩率表") wsDetail.Range("P10") = wsData.Range("C19").Value End Sub Private Sub その他() Set wsDetail = Worksheets("給与明細") Set wsData = Worksheets("データ入力") Set wsMES = Worksheets("MES歩率表") wsDetail.Range("AB10") = wsData.Range("C21").Value End Sub Private Sub 通勤() Set wsDetail = Worksheets("給与明細") Set wsData = Worksheets("データ入力") Set wsMES = Worksheets("MES歩率表") wsData.Range("C27") = Application.RoundUp(wsData.Range("C25").Value * 2 * 0.083 * _ Range("C24").Value * Range("C23").Value, 1) wsDetail.Range("D13") = Application.WorksheetFunction.Round _ (wsData.Range("C27").Value * Range("C26").Value * 1.08, 0) End Sub 原因がさっぱりわからないのでどなたかよろしくお願いいたします<m(__)m>

  • VBA 実行時エラーで、"プロパティまたはメソッド

    ・Sheet1(コード) Private Sub CommandButton1_Click() Call aaa End Sub ・Module1(コード) Sub aaa() Dim wb As Workbook Dim ws As Worksheet Workbooks.Open ("c:\test.xls") Set wb = Workbooks("test.xls") Set ws = wb.Worksheets("Sheet1") wb.ws.Range("A2").Value = "CCC" End Sub wb.ws.Range("A2").Value = "CCC"の部分で 以下の実行エラーが出ます。 ------------------------------------------------------------------------ 実行時エラー'438': オブジェクトは、このプロパティまたはメソッドをサポートしていません。 ------------------------------------------------------------------------ Set wb = Workbooks("test.xls") Set ws = wb.Worksheets("Sheet1") の部分で特にエラーも出ないので、オブジェクトの取得は成功していると 思うのですが、WorkSheetオブジェクトのwsからRangeメソッドを呼ぶことが できません。 動かない原因と対策を教えてください!!

  • ExcelにおけるVBAで、データの振り分けをしたい

    Sub a() Dim i As Long Dim s As Long Dim b As Worksheet Dim c As Worksheet Dim maxi As Long Dim maxs As Long Application.ScreenUpdating = False With ThisWorkbook Set b = .Worksheets("bbb") Set c = .Worksheets("ccc") End With maxi = b.Range("A1").CurrentRegion.Rows.Count maxs = c.Range("A1").CurrentRegion.Rows.Count For i = maxi To 2 Step -1 For s = maxs To 2 Step -1 If c.Cells(s, 1) = b.Cells(i, 1) And c.Cells(s, 2) = b.Cells(i, 2) Then c.Cells(s, 14) = b.Cells(i, 3) End If Next s Next i Application.ScreenUpdating = True End Sub ワークシートcとワークシートbの1列目と2列目が一致したときにだけ、cの14列目にbの3列目のデータを代入したく思い、以上のようなコードを書きましたが、重くて終わる様子がありません。 ・そもそもあっているのか、あっていないならどこを修正すればよいか ・早く終わるようにするにはどうしたらいいか アドバイスをよろしくお願いします。

  • エクセル VBA

    VBA内で、そのVBAの実行を制御することは可能でしょうか? 下のようなコードを作ったのですが、 Sub 承認書作成() Dim ws0 As Worksheet, ws1 As Worksheet, r1 As Range Dim i As Long Dim nyuryoku(), chikuseki() Set ws0 = Worksheets("承認書作成") Set ws1 = Worksheets("顧客データ") Set ws2 = Worksheets("業者コード") Set ws3 = Worksheets("承認通知書") Worksheets("顧客データ").Select Range("テーブル1[[#Headers],[NO.]]").Select Selection.End(xlToRight).Select Selection.End(xlDown).Select Selection.ListObject.ListRows.Add AlwaysInsert:=False Range("B7").Select nyuryoku = Array("b5", "d5", "f5", "h5", "j5", "l5", "n5", "p5", "b6", "d6", "f6", "h6", "j6", "l6", "n6", "p6", "b4", "d4") '転記したいセルの位置 chikuseki = Array("0", "1", "5", "6", "8", "9", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "53", "54") '転記先の列のオフセット値  Set r1 = ws1.Range("f" & Rows.Count).End(xlUp).Offset(0) 'データ蓄積セル  For i = 0 To UBound(nyuryoku) r1.Offset(0, chikuseki(i)).Value = ws0.Range(nyuryokui)).Value '入力 Next MsgBox "入力完了" Dim lRowNum As Long '転記先となる行番号を求める lRowNum = ws1.Cells(Rows.Count, "b").End(xlUp).Row '転記 ws3.Cells(6, "d").Value = ws1.Cells(lRowNum, "j").Value ws3.Cells(17, "g").Value = ws1.Cells(lRowNum, "c").Value ws3.Cells(22, "g").Value = ws1.Cells(lRowNum, "l").Value ws3.Cells(22, "ac").Value = ws1.Cells(lRowNum, "ab").Value    Set ws0 = Nothing   Set ws1 = Nothing End Sub ここに、     If call Macro1 then call 承認書作成  '上のマクロです    Else: Msgbox"中止" 「Macro1を実行しないと承認書作成マクロを実行できない」 という コードを組み込みたいのですが、うまくいきません。 VBA内に同じVBAを組み込むことは不可能なのでしょうか?