• ベストアンサー

エクセルVBAのエラーについて

こんにちは、よろしくお願いします。 以下はマクロの一部を抜粋したものです。 最初の分で、jに変数をセットし、次の文で、セットステートメントでtにセットしたいのですが、実行時エラー(アプリショーン定義またはオブジェクト定義のエラーです)と表示されてしまいます。 変数jには、確実に数値が入っております。理由を分かる方いましたらお願いします。 j = Sheets("データ").Range("b7").End(xlDown).Row Set t = Worksheets("基礎データ").Range(Cells(7, 2), Cells(j, 2)) ※エクセル2000を使用しています。

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

RangeのシートオブジェクトとCellsのシートオブジェクトが相違するからです。 例 With WorkSheets("基礎データ") Set t = .Range(.Cells(7, 2), .Cells(j, 2)) End With

sukeroku111
質問者

お礼

昨日に続き、迅速なご回答ありがとうございます。 無事マクロが動作しました。今回のご指導内容も、この後勉強していきます。 独学でなかなか思うように理解できませんが、今後ともよろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.2

> 以下はマクロの一部を抜粋したものです。 > 最初の分で、jに変数をセットし、次の文で、 > セットステートメントでtにセットしたいのですが、 > 実行時エラー(アプリショーン定義またはオブジェクト定義のエラーです)と表示されてしまいます。 > 変数jには、確実に数値が入っております。理由を分かる方いましたらお願いします。 > >j = Sheets("データ").Range("b7").End(xlDown).Row >Set t = Worksheets("基礎データ").Range(Cells(7, 2), Cells(j, 2)) 「マクロの一部」で何処が悪いか判断できるエスパーの登場に期待してください。 この情報でわかるかもとしたら・・・ "データ"、"基礎データ"など、シート名が間違っている 変数t のデータ型の宣言が間違っている そもそも変数tを宣言していない このくらいじゃないですか? 1番さんへ。 変数tをヴァリアントで宣言しておけば、 多分、With無しでこのままでも処理は続けられますよ? Set文の次の行にでも、   t.Select と書いてお試しくださいませ。

sukeroku111
質問者

お礼

迅速なご回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル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

  • vlookupプロパティで実行時エラーが出る

    vlookup関数をマクロで行いたいと思っており、ネットで調べながらコードを書いております。 違うシート間でうまくいったコードをコピーし、変数等を直して実行してみたところ1004の実行時エラーが出てしまいます。 ソースシートをデータの範囲元とし、シート内にあるI8から始まるデータについて、vlookupをしたいのですが、vlookupプロパティの実行時にエラーが出ます。 範囲指定も検索値についても値が入っており、何が問題かわかりかねており困っております。 ソースシート = "KW_All" 'ソースシートの範囲定義 ソース上 = 8 ソース左 = 5 ソース右 = 5 ソース下 = Sheets(ソースシート).Range(Sheets(ソースシート).Cells(8, 5), Sheets(ソースシート).Cells(8, 5)).End(xlDown).Row シート = "Keyword" 'keywordシートの範囲定義 上 = 3 左 = 1 右 = 9 下 = Worksheets(シート).Range(Worksheets(シート).Cells(上, 左), Worksheets(シート).Cells(上, 左)).End(xlDown).Row keyword数 = 下 - 上 + 1 Set 範囲 = Sheets(ソースシート).Range(Sheets(ソースシート).Cells(ソース上, ソース左), Sheets(ソースシート).Cells(ソース下, ソース右)) For i = 1 To keyword数 検索値 = Sheets(シート).Range("I" & 上 + i - 1) Range("J" & 上 + i - 1) = Application.WorksheetFunction.VLookup(検索値, 範囲, 1, False) Next どうぞご教授くださいますと幸いです。

  • エクセル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エラー '1004' について

    VBA初心者です。 下のプログラムの★部分で 「実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。」 というエラーが発生します。 どなたか原因を教えていただけないでしょうか?? Dim aRange As Range Dim bRange As Range Set aRange = Range(Sheets("シートA").Range("A3"), Sheets("シートB").Range("A3").End(xlDown)) ★ Set bRange = Range(Sheets("シートB").Range("A3"), Sheets("シートB").Range("A3").End(xlDown)) 下のシートBの範囲取得と同じことをしているつもりなのですが、うまくいきません。 どうぞよろしくお願い致します。

  • Excel VBA グラフ作成のときのエラー

    VBA初心者です。Excel2003を使っています。 Sheet1に作りたいグラフがあります。 データは下記のとおりです。 ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A")のところで、「実行時エラー13 型が一致しません」とエラーがでます。 不思議なのは、昨日は動いていたのです。 なぜ、エラーが出るようになったのかわかりません。 ご教授よろしくお願いします。 A B 1 a 1 2 2 3 3 4 4 5 5 6 b 6 7 7 8 8 9 9 10 10 11 c 11 12 12 13 13 14 14 15 15 Sub test() Wrow = Worksheets("sheet1").Cells(Rows.Count, "A").End(xlUp).Row For i = 1 To Wrow If Worksheets("sheet1").Cells(i, "A").Value = "a" Then a_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "b" Then b_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "c" Then c_data = Worksheets("sheet1").Cells(i, "A").Row ElseIf Worksheets("sheet1").Cells(i, "A").Value = "d" Then d_data = Worksheets("sheet1").Cells(i, "A").Row End If Next Sheets("sheet1").Select Range(Cells(a_data, "B"), Cells(b_data, "B")).Select ActiveSheet.ChartObjects.Add(30, 10, 500, 200).Select ActiveChart.ChartType = xlLineMarkers ActiveChart.SetSourceData Source:=Sheets("sheet1").Range(Cells(a_data, "B"), Cells(b_data - 1, "B")), PlotBy:=xlColumns ActiveChart.Location where:=xlLocationAsObject, Name:="sheet1" Sheets("sheet1").Select ActiveChart.Axes(xlCategory, xlPrimary).CategoryType = xlAutomatic ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(1).Name = Cells(a_data, "A") ←エラーがでます。 ActiveChart.SeriesCollection(2).Values = Range(Cells(b_data, "B"), Cells(c_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(b_data, "A") ActiveChart.SeriesCollection(3).Values = Range(Cells(c_data, "B"), Cells(d_data, "B")) ActiveChart.SeriesCollection(2).Name = Cells(c_data, "A") End Sub

  • VBA セルコピーのエラー

    こんにちは。 Excel VBAの初心者です。 セルコピーについて教えてください。 シート1のセル範囲e4~aj4を、シート2の同じ場所に、そのままコピーします。 Worksheets(1).Range("e4:aj4").Copy Destination:=Worksheets(2).Range("e4:aj4") 上記だと普通に通るのですが、コピー元の行に変数を使用したくて、その前に一度下のように書き換えました。 Worksheets(1).Range(Cells(4, 5), Cells(4, 36)).Copy Destination:=Worksheets(2).Range(Cells(4, 5), Cells(4, 36)) するとエラー1004(アプリケーション定義またはオブジェク定義のエラー1004(アプリケーション定義またはオブジェク定義のエラー)が出て、通らなくなります。 単純なことだと思うのですが、初心者ゆえ困っております。 どなたかご教示いただけますと幸いです。 よろしくお願いいたします。

  • エクセルVBAについて

    こんにちわ! 今、エクセルでAシートの入力した項目をBのシートへデーターが入力できるようなシステムを以下のようにくみました。 そこでBシートにデーターが入力されるのですが20行まで入力すると入力できないようにしたいのですが、なかなか上手くいきません。 A1からF20まで書式のロックを外しそれ以外のセルは保護をかけたのですがその状態でVBAを使って20行以上入力できませんという感じのエラー表示をしたいのですが、どうすればいいでしょうか? VBAは初心者ですが宜しくお願いします。 Private Sub CommandButton1_Click() Dim row As Integer row = WorksheetFunction.CountA(Sheets("date").Columns(1)) + 1 Sheets("date").Cells(row, 1).Value = Range("B2").Value row = WorksheetFunction.CountA(Sheets("date").Columns(2)) + 1 Sheets("date").Cells(row, 2).Value = Range("B3").Value row = WorksheetFunction.CountA(Sheets("date").Columns(3)) + 1 Sheets("date").Cells(row, 3).Value = Range("B4").Value row = WorksheetFunction.CountA(Sheets("date").Columns(4)) + 1 Sheets("date").Cells(row, 4).Value = Range("B5").Value row = WorksheetFunction.CountA(Sheets("date").Columns(5)) + 1 Sheets("date").Cells(row, 5).Value = Range("B6").Value row = WorksheetFunction.CountA(Sheets("date").Columns(6)) + 1 Sheets("date").Cells(row, 6).Value = Range("B7").Value Sheets("統制入力").Select Range("B17").Select ActiveWindow.SmallScroll Down:=-9 Range("B3:B7").Select Selection.ClearContents Range("B1").Select End Sub

  • EXCEL VBA エラーの意味が分からず

    いつも、お世話になっております。 下記コードで、レコード1と2を前へと次へを繰り返し何度か操作すると、エラーになってしまいます。なぜエラーになって、どう修正すれば回避できるのかが分かりません。 どうかご教授いただけないでしょうか。よろしくお願いいたします。 エラーの状況 inputシートで、maeとtsugiの動作を何度か行うと、「If pict.TopLeftCell.Address = targetRange.Address Then」の部分が黄色く塗りつぶされ、「実行時エラー1004 アプリケーション定義またはオブジェクト定義のエラーです。」と表示されてしまします。たぶん写真の削除の時にエラーになっているのだと思いますが、 '■標準モジュールのコード。dataシートのレコードを移動し、inputシートのBC1セルに表示する。 Public trg As Range Sub Saisyo() Set trg = Worksheets("data").Range("A1") Do Set trg = trg.Offset(1, 0) Loop Until trg.EntireRow.Hidden = False Call Tenki End Sub Sub Saigo() Set trg = Worksheets("data").Range("A60000").End(xlUp) Call Tenki End Sub Sub Mae() On Error GoTo errhandle If trg.row >= 3 Then Do Set trg = trg.Offset(-1, 0) Loop Until trg.EntireRow.Hidden = False If trg.row = 1 Then MsgBox "これより前のレコードはありません" Call Saisyo Exit Sub Else Call Tenki End If Else MsgBox "これより前のレコードはありません!" End If Exit Sub errhandle: Call Saisyo End Sub Sub Tsugi() On Error GoTo errhandle If trg.row < Worksheets("data").Range("A60000").End(xlUp).row Then Do Set trg = trg.Offset(1, 0) Loop Until trg.EntireRow.Hidden = False Call Tenki Else MsgBox "これより後ろのレコードはありません" End If Exit Sub errhandle: Call Saigo End Sub Sub Tenki() Worksheets("input").Range("BC1").Value = trg.Offset(0, 0) End Sub '■sheet 1のモジュール。inputシートBC1セルの値を見て、dataシートへ値を読みにいき、inputシートへ表示する。 Private Sub hyouji() Dim fRange As Range Dim kensaku As Long Set fRange = Sheets("data").Columns(1).Find(What:=Range("BC1").Value, _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows) If (fRange Is Nothing) Then '見つからなかった? MsgBox "入力された顧客コードが存在しません。", vbExclamation Exit Sub End If kensaku = fRange.row '検索された顧客DCの行位置を求める Range("BC1:BE1").Value = Sheets("data").Cells(kensaku, 1).Value '整理No Range("AX1").Value = Sheets("data").Cells(kensaku, 2).Value '固有ID Range("I4").Value = Sheets("data").Cells(kensaku, 3).Value '工場名 Range("P4").Value = Sheets("data").Cells(kensaku, 4).Value '柱No Range("W4").Value = Sheets("data").Cells(kensaku, 5).Value '盤No Range("I5").Value = Sheets("data").Cells(kensaku, 6).Value '変台系統1 Range("S5").Value = Sheets("data").Cells(kensaku, 7).Value '変台系統2 Range("I6").Value = Sheets("data").Cells(kensaku, 8).Value '分電盤設置時期 Range("B8").Value = Sheets("data").Cells(kensaku, 9).Value '主な供給先 Range("B14").Value = Sheets("data").Cells(kensaku, 10).Value '特記 Range("AD4").Value = Sheets("data").Cells(kensaku, 11).Value '盤位置の目安 Range("AT8").Value = Sheets("data").Cells(kensaku, 12).Value '幹線線相 Range("R36").Value = Sheets("data").Cells(kensaku, 13).Value '盤写真ファイル名 Range("AT36").Value = Sheets("data").Cells(kensaku, 14).Value '単結図ファイル名 End Sub '■sheet 1のモジュール。"$R$36"と"$AT$36"の写真ファイル名を見て、"C37"と"AE37"セルに表示させる。 Private Sub Worksheet_Change(ByVal Target As Range) Dim fRange As Range Dim touroku As Long Select Case Target.Address Case "$BC$1" Call hyouji Case "$R$36" myLoadPicture "board_Image", Target.Text, Range("C37") Case "$AT$36" myLoadPicture "map_Image", Target.Text, Range("AE37") Case "$AT$8" Call red_circle Case Else Exit Sub End Select End Sub Private Sub myLoadPicture(folderName As String, fname As String, targetRange As Range) Dim pict As Shape, picPath As String picPath = ThisWorkbook.Path & "\" & folderName & "\" & fname If fname = "" Then picPath = ThisWorkbook.Path & "\" & folderName & "\" & "NoImage.jpg" End If With ActiveSheet For Each pict In .Shapes If pict.TopLeftCell.Address = targetRange.Address Then pict.Delete Exit For End If Next pict Set pict = .Shapes.AddPicture(picPath, msoTrue, msoFalse, _ targetRange.Left, targetRange.Top, 300, 360) End With End Sub

  • VBAのCopyコマンドについて

    エクセルVBAでシート3のRangeの値をからシート2のRangeへデータをコピーしようとしているのですが Sheets(3).Range("B3:B100").Copy _ Sheets(2).Range(Cells(3, col2 - 1), Cells(100, col2 - 1)) がうまくいって、 Sheets(3).Range(Cells(2, col1), Cells(100, col1)).Copy _ sheets(2).Range(Cells(2, col2), Cells(100, col2)) が何故、オブジェクト定義エラーになってしまうのがわかりません。 col1、col2は列の変数です。 よろしくお願いします。

  • excel vba のエラー原因が分かりません

    データ入力シート「Hit Data] データ表示シート「User Sheet」 とあります。 データ表示シート「User Sheet」に「次へ」「前へ」「最初へ」「最後へ」とボタンをつくり、データ入力シート「Hit Data]から、都度データを呼び出せるようにするプログラムをとあるサイトを参考にして作成しましたが、エラーが出てしまいどうしてもうまくいきません。 どこに問題があるのか見ていただけないでしょうか? '以下標準モジュールのプログラムです Public trg As Range Sub Saisyo()  Set trg = Worksheets("Hit Data").Range("A3")  Call Tenki End Sub Sub Saigo()  Set trg = Worksheets("Hit Data").Range("A60000").End(xlUp)  Call Tenki End Sub Sub Mae()  If trg.Row >= 4 Then   Set trg = trg.Offset(-1, 0)   Call Tenki  Else   MsgBox "これより前のレコードはありません"  End If End Sub Sub Tsugi()  If trg.Row < Worksheets("Hit Data").Range("A60000").End(xlUp).Row Then   Set trg = trg.Offset(1, 0)   Call Tenki  Else   MsgBox "これより後ろのレコードはありません"  End If End Sub Sub Tenki()  Worksheets("User Sheet").Range("D9").Value = trg.Offset(0, 0)  Worksheets("User Sheet").Range("D10").Value = trg.Offset(0, 1)  Worksheets("User Sheet").Range("D11").Value = trg.Offset(0, 2)  Worksheets("User Sheet").Range("D12").Value = trg.Offset(0, 3) End Sub '以下 User Sheet"のシートモジュールに記載されたプログラムです。 Private Sub Worksheet_Activate() Call Saisyo End Sub '表示されるエラーの内容 'saisyo・・・アプリケーション定義またはオブジェクト定義のエラーです。 'saigo・・・同上 'mae・・・オブジェクト変数またはWithブロック変数が設定されていません 'tugi・・・同上