VBAマクロ実行時エラーの原因と対策方法

このQ&Aのポイント
  • 下記コードを実行すると、myCell.Selectのところで実行時エラー’91’オブジェクト変数またはWithブロック変数が設定されていません。
  • エラーの原因は、myCell変数がセットされていないためです。
  • 対策として、myCell変数をセットする必要があります。具体的には、Range("A1").CurrentRegionに対してmyCellを設定することでエラーを解消することができます。
回答を見る
  • ベストアンサー

VBA マクロ実行にてエラーが出ますが、原因を教えてください

下記コードを実行すると、myCell.Selectのところで 実行時エラー’91’ オブジェクト変数またはWithブロック変数が設定されていません。 というエラーが出るのですが、どうすれば対策出来るのでしょうか? Sub test() Dim i As Long Dim myCell As Range With Range("A1").CurrentRegion For i = 2 To .Rows.Count Step 2 If i = 2 Then Set myCell = .Rows(i) Else Set myCell = Application.Union(myCell, .Rows(i)) End If Next i End With myCell.Select End Sub

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

  • ベストアンサー
  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.1

お早うございます。 以下のように変更してみてください。 Sub test() Dim i As Long Dim myCell As Range With Range("A1").CurrentRegion   For i = 2 To .Rows.Count Step 2     If i = 2 Then       Set myCell = .Rows(i)     Else       Set myCell = Application.Union(myCell, .Rows(i))     End If   Next i End With If Not myCell Is Nothing Then   myCell.Select End If End Sub

VitaminBB
質問者

お礼

回答ありがとうございます。 データが入力されていなかったので、 オリジナルのコードではエラーが出るのですね。 ようやく分かりました。

その他の回答 (1)

  • pkh4989
  • ベストアンサー率62% (162/260)
回答No.2

こんにちは。 エラーの原因について、補足します。 Sub test() Dim i As Long Dim myCell As Range Range("A1").Select '←追加 With Range("A1").CurrentRegion '←これは、使われている行の範囲内のセルが選択の状態になっていないと実現しません。なので、常にセル(A1)を選択すれば、問題ないと思います。   For i = 2 To .Rows.Count Step 2     If i = 2 Then       Set myCell = .Rows(i)     Else       Set myCell = Application.Union(myCell, .Rows(i))     End If   Next i End With If Not myCell Is Nothing Then '←上記の条件に満たない場合、これがないとエラーになります。   myCell.Select End If End Sub

VitaminBB
質問者

お礼

回答ありがとうございます。 NO1さんの回答でエラーは出なくなりました。 下記コードはなくてもうまく行きました。 Range("A1").Select '←追加

関連するQ&A

  • VBAの実行時エラー91!どうしよう?

    excelVBAでファイル内の各シートを確認して、条件に合うシートのデータをコピーするところで、「実行時エラー'91'オブジェクト変数またはWithブロック変数が設定されていません。」というエラーが出ました。 確認したのですが、なかなか分かりません。どなたがご指導お願いできませんか。 コードは以下のとおりです。 Sub Tenki(theBook As Workbook, mySheet As Worksheet) Dim K_Sheet As Worksheet Dim DstRange As Range For Each K_Sheet In theBook.Worksheets  ’ここで、エラーが出ました! If K_Sheet.Name <> "C" Then Set DstRange = mySheet.Range("A" & _ mySheet.Range("A1").CurrentRegion.Rows.Count + 1) K_Sheet.Range("B7:K48").SpecialCells(xlCellTypeVisible).Select Range("B7:K48").Copy DstRange.PasteSpecial Paste:=xlPasteValues End If Next Application.CutCopyMode = False End Sub どうぞよろしくお願いします。

  • Excel VBAマクロで実行時エラー'91'が出てしまいます。

    実行時エラー'91' オブジェクト変数またはWithブロック変数が設定されていません というエラーが出ます 同じような質問をいくつか見つけました。 FindでTRUEが見つからなくなったときの処理が問題?だと思うんですが、それを解決するために、どうしていいか分かりません。 よろしくお願いします。 AL列にTRUEとある行を削除するマクロです。 処理が正常に終わり、最後にエラーが出ます。 Sub 行削除() lastrow = Range("AL1").End(xlDown).Row i = 1 Dim trow As String Do While i < lastrow trow = Range("AL:AL").Find(What:="TRUE").Row Rows(trow).Delete i = i + 1 Loop End Sub

  • マクロエラー処理

    下記のマクロを実行すると、If (.Range のところでコンパイルエラー参照が不正または不完全です。というメッセージが出るのですが、どこを修正すればよいのでしょうか 教えてください。 Sub 再表示1() Dim SheetName As String Dim i As Integer Dim LastRow As Integer Dim rng As Range LastRow = 3000 '最終行の番号 Sheets("ACT").Select For i = 6 To LastRow If (.Range("D" & i) = "A310" Or .Range("D" & i) = "A505") And .Range("V" & i) < 0 Then .Cells(i, "W").Resize(1, 3).ClearContents End If Next Stop End With End Sub

  • vbaエラーの原因

    先ほどまで動いていたのですが、保存後にエラーとなりました。 実行時エラー1004または、マクロ実行時にエラー400と表示されます。 どこが変わったのか、自分でもわからず、苦戦しています。 シート2(左から2番目)に氏名と読み取りパスワードが記載されています。 それをつかって、氏名をファイル名としたエクセルファイルを読み込ませ、 印刷をさせるまでの一連の動作となります。 --- Sub printcode() Dim wbk As Workbook Dim targetRange As Range Dim i As Long Set targetRange = ThisWorkbook.Worksheets(2).Range("A1").CurrentRegion For i = 2 To targetRange.Rows.Count Set wbk = Workbooks.Open(targetRange.Cells(i, 1).Value & ".xls", Password:=targetRange.Cells(i, 2).Value) Sheets("Sheet1").PrintPreview 'PrintOut wbk.Close Set wbk = Nothing Next i End Sub --- 印刷実行前に動作確認として、プレビューコマンドを使用しています。 どの辺にエラーがあるのか、一つずつ確認しているのですが、おそらく前半と思われます。 ご指摘いただけますでしょうか。よろしくお願いいたします。

  • シートを選択した時に実行するマクロについて

    今下記のようにボタンを押したらマクロが実行されるようにしていますが、"退出"というシートを選択した時に実行するようにするにはどの様に書けばいいでしょうか? Private Sub CommandButton1_Click() With Range("A4").CurrentRegion .Cells(.Rows.Count + 1, 1).Select End With 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 オートフィルの範囲指定

    Excel VBA で関数を入れたセルを最下行までコピー させたいのですが、範囲の指定がうまくできません。ごちゃごちゃ書きすぎて、よくわからなくなってしまいました。 実行してみたら、オートフィルのところでデバッグが出ました。 VBAはまだまだ初心者レベルです・・・ どこをどう直せばきちんと処理されるのか、どなたかお知恵をお貸しください。 (それと初めの定義は、Rangeで合ってるのでしょうか?) Sub sample() Dim MyCell1 As Range Dim MyCell2 As Range Dim MyCell3 As Range Dim MyCell4 As Range Dim MyCell5 As Range Set MyCell1 = Cells(5, Range("4:4").Find(what:="○○", searchorder:=xlByColumns).Offset(1, 1).Column) Set MyCell2 = Cells(5, MyCell1.Offset(0, 2).Column) MyCell1.Select Selection.Formula = "=$A5-" & MyCell2.Address(False, True) Set MyCell3 = Cells(5, MyCell1.Offset(0, -1).Column) Set MyCell4 = Cells(5, Cells(5, Columns.Count).End(xlToLeft).Column) Set MyCell5 = MyCell1.Offset(0, 1) MyCell5.Select Selection.Formula = "=" & MyCell3.Address(False, True) & "-" & MyCell4.Address(False, True) Range(MyCell1, Cells(5, MyCell1.Offset(0, 1).Column)).Select Selection.AutoFill Destination:=Cells(Cells(5, MyCell1.Column), Cells(Cells(Rows.Count, 1).End(xlUp).Row, MyCell5.Column)), Type:=xlFillCopy End Sub ********************* 下のような表に関数を入力して最下行までコピーさせたいです。  | A | B | C | D | E | F | G | H | I | J | K | L | -------------------------------------------------------------------------- 4 | code | name | 7/1 | 7/2 | ○○ |    |    | code|name| 7/1 | 7/2| ○○ | 5 |10000|aaaaaa| 15  | 20 | 35  |     |    |10001|bbbbbb| 13 | 25 | 38 |                           ((                            )) F5に "=$A5-$H5" と数式を入れてcodeを比較し、G5に "=$E5-$I5"と入れて数量を比較する。 F列とG列の入力されている最下行まで数式をコピーする。 ※毎月日数が変わり、商品数も変わるので、A列・B列・4行目以外は全て可変。 WindowsXP Excel2003 です。 よろしくお願いいたします。

  • エクセルVBAなぜ実行時エラーが?

    エクセル2000です。 DATAと名づけた表の値を変換し、最大値から端数をプラマイするマクロなのですが、途中で「実行時エラー91 オブジェクト変数またはWithブロック変数が設定されていません。」となってしまいます。 なぜ出るかわからないので別なBookに同じ名前のRange をつくり同様の表でためしたらエラーにならずちゃんと作動します。 本番用のBookでのみエラーがでます。なぜなのでしょうか? 実行時エラーのでる With Range("DATA").Find(mx, LookIn:=xlValues) .Value = .Value + dff ' End With を、Withブロックをつかわず Range("DATA").Find(mx, LookIn:=xlValues).Select で試しても本番のBookではエラーになります。ほんとに困っています。 Sub 調整() Dim r As Double Dim c As Range Dim dff As Integer, mx As Long r = 25000 / Range("初期").Value With Sheets("内訳") Range("DATA").Value = .Range("F57:L73").Value '初期値複写 'MsgBox "初期値転写完了" For Each c In Range("DATA") If c.Value <> "" Then c.Value = Application.WorksheetFunction.Round(c.Value * r, -1) End If Next 'MsgBox "初期変換完了" dff = 25000 - Range("変換後") If dff <> 0 Then 'MsgBox dff mx = Application.WorksheetFunction.Max(Range("DATA")) 'MsgBox mx With Range("DATA").Find(mx, LookIn:=xlValues) .Value = .Value + dff 'ここで実行時エラー! End With End If End With End Sub

  • VBAでの質問

    お世話になります。 下記の記述で、「←」の矢印の記述で、 Cells.(5,2)がブランクでなければ、 「→」から進めたいのですが、 どの様に記述すれば宜しいでしょうか ご教示お願いします。 Sub 表記入() Dim Data As Range Dim i As Integer Dim j As Integer Dim k As Integer Set Data = Sheets("集計").Range("A2").CurrentRegion j = 16 k = 0 With Sheets("表") For i = 3 To Data.Rows.Count If Data.Cells(i, 51) <> "" Then .Cells(5, 2) = Data.Cells(i, 3)  ← .Cells(5, 7) = Data.Cells(i, 4) → .Cells(j, 2) = Data.Cells(i, 10) .Cells(j, 6) = Data.Cells(i, 11) & Data.Cells(i, 12) .Cells(j, 14) = Data.Cells(i, 51) Else End If k = k + 1 If k = 10 Then j = j + 18 k = 0 Else j = j + 1 End If End If Next i End With End Sub

  • マクロでのエラーについて

    エクセル2010 マクロエラーについて 以前 印刷について下記コードを提示して頂きました。 このコードが通る時と2回目の .Zoom = j で止まる時があります。 どなたか検証して頂き、何が原因なのかご教示頂けますでしょうか? 宜しくお願い致します。 Dim myRng As Range Dim i As Long Dim j As Long Dim k As Long j = 100 With ActiveSheet Set myRng = .Range("A1", .Cells(Rows.Count, "L").End(xlUp)).Resize(, 16) For i = 1 To myRng.Columns.Count If i = 11 Then .Columns(i).AutoFit End If Next i With .PageSetup .PrintArea = myRng.Address .Orientation = xlLandscape .PaperSize = xlPaperA4 .Zoom = j Do k = Application.ExecuteExcel4Macro("COLUMNS(GET.DOCUMENT(65))") If k = 1 Then Exit Do j = j - 1 .Zoom = j '”ここで実行時エラー1004” PageSetupクラスのZoomプロパティを設定できません” Loop End With .PrintOut Preview:=True .PageSetup.Zoom = 100 End With

専門家に質問してみよう