• ベストアンサー

実行時エラーの原因がつかめない(ExcelVBA)

下記コードで実行時エラーの原因がつかめません。どなたか助けて ください。Sheet5のA,B列のデータを Sheet6 のA,B列に 一定の範囲で逆順にコピーする操作です。 Dim Dn As Integer, Zn As Integer Dn = Sheets("sheet1").Range("E37").Value / 8 + 0.5 Zn = Round(Dn) ‘ Sheets("Sheet6").Range("A1:A65536").ClearContents Xn2 = Sheets("Sheet3").Range("D65536").End(xlUp).Row - 5  Xn1 = Sheets("Sheet5").Range("A65536").End(xlUp).Row I = 0 Do Ix = I + 1 Iz = Xn1 - I Sheets("Sheet6").Range("A" & Ix & " : B" & Ix).Value _ Sheets("Sheet5").Range("A" & Iz & " : B" & Iz).Value I = I + 1 Loop Until I = Xn2 * Zn + 1

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

よくわかりませんが、あきらかに変なのは Sheets("Sheet6").Range("A" & Ix & " : B" & Ix).Value _ Sheets("Sheet5").Range("A" & Iz & " : B" & Iz).Value ですね。 もし、Sheets("Sheet5").Range("A" & Iz & " : B" & Iz)の値をSheets("Sheet6").Range("A" & Ix & " : B" & Ix)にもってきたいなら、 Sheets("Sheet6").Range("A" & Ix & " : B" & Ix).Value _ = Sheets("Sheet5").Range("A" & Iz & " : B" & Iz).Value ではないでしょうか?(=が抜けてます。)

catshoes01
質問者

お礼

ありがとうございます

その他の回答 (1)

  • popesyu
  • ベストアンサー率36% (1782/4883)
回答No.2

ステップインで実行した時に、具体的にどのタイミングでどういった内容のエラーが出るのでしょうか。 とりあえず「=」がなくてもエラーは出ませんのでもっと別のレベルでの問題かと思います。コード的にはおかしいですが。

関連するQ&A

  • なぜかデータがコピーされない(ExcelVBA)

    お願いします。 Sheets("sheet6").Range("A1:IV65536").ClearContents Xn1 = Sheets("sheet3").Range("B65536").End(xlUp).Row Sheets("sheet6").Range("A1:B" & (Xn1 - 2)).Value = Sheets("sheet3").Range("B3:C" & Xn1).Value このコードでシート6に何もコピーされないのはなぜでしょうか。 シート3のB,C列には数値が並んでいます。 Xn1はカウントされています。(xn=1631)

  • 実行時エラー 1004について 【超初心者です】

    マクロ超初心者です。 WindowsXP Excel 2003です。 データ入力用にマクロを作成してみましたが、 「実行時エラー 1004 アプリケーション定義・・・・」というメッセージが出てきます。 シート1「入力」を入力用画面として、 シート2「データ」にシート1で入力した内容が反映されるものです。 シート1「入力」の入力用画面はセルの結合が多く、 入力するセル以外はシートの保護をかけています。 下記のようなマクロです。 Sub 登録() ActiveSheet.Unprotect Password:="×××" 最終行 = Sheets("データ").Range("A" & Rows.Count).End(xlUp).Row + 1 Sheets("データ").Range("A" & 最終行).Value = 最終行 Sheets("データ").Range("B" & 最終行).Value = Range("C2:D2").Value Sheets("データ").Range("C" & 最終行).Value = Range("C3").Value Sheets("データ").Range("D" & 最終行).Value = Range("E3").Value          Sheets("データ").Range("C2:D2").ClearContents Sheets("データ").Range("C3, E3").ClearContents MsgBox "登録しました" ActiveSheet.Protect Password:="×××", DrawingObjects:=True, contents:=True, UserInterfaceOnly:=True End Sub   超初心者で、何をどうしたらいいのかまったくわかりません。   なるべく専門用語がないように   ご指導いただくとありがたいです。   非常に困っておりますので、よろしくお願いします。   

  • Next,End Withのエラー

    Sub 入力() If Sheets("入力").Range("D3").Value = "" Then MsgBox "客先名を入力して下さい" Else Dim K最終行 As Long Dim T最終行 As Long Dim i As Integer With Sheets("入力") For i = 3 To 12 If .Cells(i, "H").Value <> "" Then U最終行 = Sheets("注文書").Range("G65536").End(xlUp).Row + 1 If U最終行 = 461 Then MsgBox "注文書がいっぱいです" Exit Sub Else End If E最終行 = Sheets("営業確認").Range("G65536").End(xlUp).Row + 1 Sheets("営業確認").Range("k" & E最終行).Value = .Cells(i, "b").Value Sheets("営業確認").Range("b" & E最終行).Value = .Cells(i, "c").Value Sheets("営業確認").Range("c" & E最終行).Value = .Cells(i, "d").Value Sheets("営業確認").Range("d" & E最終行).Value = .Cells(i, "e").Value Sheets("営業確認").Range("g" & E最終行).Value = .Cells(i, "h").Value Sheets("営業確認").Range("f" & E最終行).Value = .Cells(i, "i").Value Sheets("営業確認").Range("i" & E最終行).Value = .Cells(i, "m").Value Sheets("営業確認").Range("h" & E最終行).Value = .Cells(i, "p").Value Else End If Select Case .Cells(i, "o").Value Case "北" K最終行 = Sheets("北").Range("h65536").End(xlUp).Row + 1 Sheets("北").Range("B" & K最終行).Value = .Cells(3, "C").Value Sheets("北").Range("c" & K最終行).Value = .Cells(3, "b").Value Case "中" T最終行 = Sheets("中").Range("H65536").End(xlUp).Row + 1 Sheets("中").Range("b" & T最終行).Value = .Cells(3, "c").Value Sheets("中").Range("c" & T最終行).Value = .Cells(3, "b").Value End Select Exit Sub Dim Dummy As Worksheet Dim SheetName As String Dim OTA As Long Dim GEN As Long Dim SheetName2 As String With Sheets("入力") '3行目~22行目まで For j = 3 To 22 SheetName = Sheets("入力").Range("D3").Value On Error Resume Next Set Dummy = Sheets(SheetName) SheetName2 = .Cells(i, 14).Value 'もしシートがあれば・・・ If Err.Number = 0 Then 'SheetName2は入力シートのN行 SheetName2 = .Cells(i, 14).Value OTA = Sheets(SheetName2).Range("B65536").End(xlUp).Row + 1 Sheets(SheetName2).Range("A7").Value = .Cells(3, "D").Value Sheets(SheetName2).Range("C3").Value = .Cells(3, "C").Value Sheets(SheetName2).Range("B" & OTA).Value = .Cells(i, "H").Value Sheets(SheetName2).Range("I" & OTA).Value = .Cells(i, "I").Value Sheets(SheetName2).Range("F" & OTA).Value = .Cells(i, "K").Value Sheets(SheetName2).Range("H" & OTA).Value = .Cells(i, "L").Value Sheets(SheetName2).Range("J" & OTA).Value = .Cells(i, "M").Value 'シートが無ければ・・・ Else GEN = Sheets("原紙").Range("B65536").End(xlUp).Row + 1 Sheets("原紙").Range("A7").Value = .Cells(3, "D").Value Sheets("原紙").Range("C3").Value = .Cells(3, "C").Value Sheets("原紙").Range("B" & GEN).Value = .Cells(i, "H").Value Sheets("原紙").Range("I" & GEN).Value = .Cells(i, "I").Value Sheets("原紙").Range("F" & GEN).Value = .Cells(i, "K").Value Sheets("原紙").Range("H" & GEN).Value = .Cells(i, "L").Value Sheets("原紙").Range("J" & GEN).Value = .Cells(i, "M").Value '原紙をコピーする Sheets("原紙").Copy BEFORE:=Sheets(1) 'シートの名前を市場コードにする Sheets(1).Name = SheetName Next End With Exit Sub On Error GoTo 0 Sheets("原紙").Select Range("C3:E3,A7,B16:B35,F16:F35,H16:J35").Select Range("H35").Activate Selection.ClearContents Sheets("入力").Select Sheets("入力").Range("D3,G3:J12,L3:M12").Value = "" Sheets("入力").Range("D3").Select Range("B3").Formula = "=IF(D3="""","""",VLOOKUP(D3,'\\Seika-sv01\支店共有\マーケティング用\[担当者リスト.xls]リスト形式'!$B:$D,3,FALSE))" MsgBox "入力が完了しました" End If End Sub 上記のようにマクロを組みましたがエラーが出てしまいます。

  • 実行時エラー1004発生する

    office2016 下記でsample1は実行されますが、条件の中身を変数にしたsample2は、実行時エラー1004になります。 Sub sample1() Dim BUSHO As String Sheets("Sheet2").Select BUSHO = Worksheets("MASTER").Range("AI2") '判定 Range("F1:F" & Range("B" & Rows.Count).End(xlUp).row).Value = "=IF(AND(RC[-2]<>""mecha"",RC[-1]<>""mecha""),""削除"","""")" End Sub sample1で動作するのを確認してsample2の変数版を作成しています。 なのでsample1ではBUSHO不使用です。 Sub sample2() Dim BUSHO As String Sheets("Sheet2").Select BUSHO = Worksheets("MASTER").Range("AI2") '判定 Range("F1:F" & Range("B" & Rows.Count).End(xlUp).row).Value = "=IF(AND(RC[-2]<>" & BUSHO & ",RC[-1]<>" & BUSHO & "),""削除"","""")" End Sub デバッグモードでBUSHOは”mecha"と表示されるのですが、何がおかしいのでしょう?

  • Excel VBA 実行時エラー'1004':

     どちらの処理がより高速であるのかを調べるため、以下の2つのVBAを試作致しました。 Sub Macroコピペ乱数() 'コピペ乱数 Sheets("Sheet4").Select Range("A1:A99999").Formula = "=RAND()" Columns("A").Value = Columns("A").Value Range("B1").Select End Sub 及び Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range("A" & i).Value = Rnd Next i Range("B1").Select End Sub  処が、これらのVBAを実際に動作させ様としますと、どちらの場合においても「Microsoft Visual Basic」ダイアログボックスが開いて 「実行時エラー'1004': 'Range'メソッドは失敗しました:'_Global'オブジェクト」 と表示されてしまいます。  さりとて、 Sub Macroコピペ乱数() 'コピペ乱数 Sheets("Sheet4").Select ActiveSheet.Range("A1:A99999").Formula = "=RAND()" Columns("A").Value = Columns("A").Value Range("B1").Select End Sub 及び Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range("A" & i).Value = Rnd Next i Range("B1").Select End Sub 或いは Sub Macro繰り返し乱数() '繰り返し乱数 Dim i As Long Randomize Sheets("Sheet4").Select For i = 1 To 99999 Range(Cells(i, 1)).Value = Rnd Next i Range("B1").Select End Sub 等としましても、今度は 「実行時エラー'1004': アプリケーション定義またはオブジェクト定義のエラーです。」 となってしまいます。  どの部分がどの様に悪いのでしょうか?  そして、どの様に修正すれば良いのでしょうか?  尚、使用しておりますExcelのバージョンはExcel2010です。

  • ExcelVBA データのコピー範囲について

    あけましておめでとうございます。今年もよろしくお願いします。 Sub Test() Dim myTarget As Range, r As Range, f Set myTarget = Sheets("Sheet1"). _    Range("B2", Sheets("Sheet1").Range("B65536").End(xlUp)) For Each r In myTarget  Set f = Sheets("Sheet2").Columns(1). _    Find(r.Value, Sheets("Sheet2").Range("A1"), Lookat:=xlWhole)  If Not f Is Nothing Then    If r.Offset(0, 3).Value <> f.Offset(0, 3).Value Then      f.Resize(1, 4).Copy Destination:= _      Sheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0)    End If  End If Next r End Sub 前回の質問で教えていただいたコードなのですが、現時点では、B列のデータを元にして二つのSheetのデータを比較して別Sheetへコピーしているのですが、そのときに、B列以降の(たとえば、B列からX列まで)データはコピーできますが、A列もコピーしたい時はどうすればよいのかで、悩んでいます。どの様に変更すればよいのでしょうか?

  • アプリケーションまたはオブジェクト定義のエラーです

    データを入力するシート「input]、データを格納するシート 「data」とがあり、 新規のレコードを追加入力するために 新規入力ボタン(CommandButton2)を作成しましたが、 実行しようとすると、表記のエラーが出てしまします。 コードの確認、とそして、どこがいけないのかをご指摘いただけないでしょうか?どうかよろしくお願いいたします。 以下コードです。 Private Sub CommandButton2_Click() '新規入力 Dim row As Integer row = Sheets("data").Cells(Rows.Count, 2).End(xlUp).Offset(1) Sheets("data").Cells(row, 2).Value = Sheets("data").Cells(row - 1, 2).Value Range("AL1") = Sheets("data").Cells(row, 2).Value End Sub

  • Range コピーの エラーについて

    極めて基本的な質問で恐縮します。 下記コードの箇所でコードが黄色になってエラーメッセージ がだされました。 Sheets("Sheet12").Range("A1:B" & (Zn2 * Xn2 - Zn1 * Xn2)) _ = Sheets("Sheet9").Range("B" & (Zn1 * Xn2) & ":C " & (Zn2 * Xn2)) 単純にシート9のレンジ範囲を読み取ってシート12にコピーする コードです。デバッグを走らせて Zn2=18 Xn2=56 Zn1=12 各変数が上記式が黄色になっているときにマウスをあてて読み取った 数値です。この変数が読み取れるということは、エラーがこの構文 にあることを示しているのですが、原因がわかりません。 ちなみにエラーコードは実行時エラー1004です。 Sheet12 はシート全体が空白のまま。 Sheet9 はB,C列に数値が3行目から始まって1772行目まで数値が 格納されています。 どなたかご指摘お願いします

  • 実行時エラーの原因がわかりません!

    全ての内容は多すぎるので記載することはできないのですが、例えば以下のようなことをしたとき Dim A as Variant,B as Variant   B = Range(Sheets(2).Cells(1, 1), Sheets(2).Cells(1000, 255)) A = Range(Cells(1, 1), Cells(1000, 255)) For i = 1 To 1000 A(i, 2) = A(i, 2) + B(i - 1, 2) * 3 - A(i, 1) If A(i, 2) <=0.2 * B(i - 1, 2) * 3 Then Call 再計算 End If B(i, 2) = B(i, 2) + B(i - 1, 2) + B(i, 1) Next Range(Cells(1, 2), Cells(1000, 2)) = Application.Index(A, 0, 2) 最後のApplication.Index(A, 0, 2)の部分で"実行時エラー13:型が一致しません"というものですが、原因がよくわかりません。Aのバリアント型がおかしなことになっているのでしょうか?原因として考えられることがあればどなたかアドバイスお願いします!

  • Excel VBAで毎回新しく入力したキーワードに指定のキーワードを置換できますか?

    仮ファイルに、シートA・B・Cがあります。 シートAのセルB3は、キーワードが入っています。 シートBにはA・B・F・G・H列の3行目から、データが入っています。 シートCには、まだ何も入っていません。 今、シートB内にあるの“○○”というキーワードだけを、シートAのセルB3で指定しているキーワードに置換させたいと思っています。 そのキーワードは毎回変わるので、シートBの中ではなく、別シートにしています。 この置換は、ただ“○○”というキーワードの入っているシートBにそのまま結果を出力するのではなく、別シートのシートCに置換されたデータに出力したいのです。 それで、以下のようなコードを書きましたが、作動しません。 A・B・F・G・H列のデータは配列に入れましたが、それが失敗なのでしょうか…? どこがおかしいか教えて頂けないでしょうか? よろしくお願いします。 Public ovtA As Long Public ovtB As Long Public gglF As Long Public gglG As Long Public gglH As Long Public i As Integer Public j As Integer Public k As Integer Public l As Integer Public m As Integer Public TD1 As Worksheet Public TD2 As Worksheet Sub Test() Workbooks("仮.xls").Activate Set TD1 = Worksheets("シートB") Set TD2 = Worksheets("シートC") ovtA = TD1.Range("A65536").End(xlUp).Row ovtB = TD1.Range("B65536").End(xlUp).Row gglF = TD1.Range("F65536").End(xlUp).Row gglG = TD1.Range("G65536").End(xlUp).Row gglH = TD1.Range("H65536").End(xlUp).Row For i = 3 To ovtA - 1 For j = 3 To ovtB - 1 For k = 3 To gglF - 1 For l = 3 To gglG - 1 For m = 3 To gglH - 1 If TD2.Range("A3") = "" Then TD1.Activate Selection.Replace what:="○○", Replacement:=Worksheets("シートA").Range("B3") TD1.Range(A).Copy Sheets("完成原稿").Cells(1, 1) TD1.Range(B).Copy Sheets("完成原稿").Cells(1, 2) TD1.Range(F).Copy Sheets("完成原稿").Cells(1, 6) TD1.Range(G).Copy Sheets("完成原稿").Cells(1, 7) TD1.Range(H).Copy Sheets("完成原稿").Cells(1, 8) Exit For End If Next Next Next Next Next End Sub

専門家に質問してみよう