EXCEl マクロ「実行時エラー1004」について教えてください。

このQ&Aのポイント
  • EXCELマクロ「実行時エラー1004」とは、アプリケーション定義またはオブジェクト定義のエラーのことです。
  • 具体的には、「住所録データ」から「検索結果」への転記する際に発生するエラーです。
  • このエラーは、マクロを実行する際にオブジェクトの定義が間違っていたり、アプリケーションの設定が正しくなかったりする場合に発生します。
回答を見る
  • ベストアンサー

EXCEl マクロ「実行時エラー1004」について教えてください。

EXCEl マクロ「実行時エラー1004」について教えてください。 他の方の質問も見てみましたが、それぞれの事情で違うようで分かりません。 どなたか教えていただけないでしょうか。 1.EXCELに「住所録データ」「検索結果」「ラベル」の3種シートがあります。 2.「住所録データ」から必要なものを選び、「検索結果」に表示させると、「ラベル」に結果が反映され、プリントアウトされます。 3.「検索結果」までは表示されますが、そこで下記の表示がでます。 「実行時エラー1004アプリケーション定義またはオブジェクト定義のエラーです。」 4.『デバック』を見ると下記のマクロが表示されます。  ' '一覧表のデータをレイアウトにあわせて転送 Sub ラベルへ転記(番号, 印刷位置, 複数段) Dim 用紙 As Object Sheets("検索結果").Select Set 用紙 = Sheets("ラベル") 用紙.Range("ラベル氏名") = Cells(番号 + データ開始, 氏名位置).Value + " 様" 用紙.Range("ラベル住所") = Cells(番号 + データ開始, 住所1位置).Value + " " + Cells(番号 + データ開始, 住所2位置).Value 用紙.Range("ラベル所属") = Cells(番号 + データ開始, 所属1位置).Value + " " + Cells(番号 + データ開始, 所属2位置).Value 用紙.Range("ラベル番号") = Cells(番号 + データ開始, 郵便位置).Value 用紙.Select Range("ラベル").Select Selection.Copy Cells(ラベル開始行 + (印刷位置 - 1) * ラベル行数, _ ラベル開始桁 + ラベル桁数 * (複数段 - 1)).Select ActiveSheet.Paste End Sub 5.上記「 用紙.Range("ラベル住所") = Cells(番号 + データ開始, 住所1位置).Value + " " + Cells(番号 + データ開始, 住所2位置).Value」の部分が黄色の→とラインでチェックされています。 前回このマクロを使用したあと、プリントアウトの位置を調整するため、「ラベル」のシートで、セルの高さや幅を変更したり一部削除したりしました。これが原因かもしれません。もしそうだとしたら今後このマクロは回復しないでしょうか。マクロの知識がなく質問も適切ではないかもしれませんが、どなたかお知恵を貸していただけないでしょうか。

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

  • ベストアンサー
  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.2

Excel はバージョンによって操作方法やできることが違い、 それに対応するマクロも違います。今回は、Excel の機能で マクロが根本的な原因ではありませんでしたが、こういった 質問ではまず、ご自分の環境をバージョンまで書き込んで 欲しいのですが。。。 Excel 2003 だと仮定して、 > 数式バーの左欄「A1▼」などがでてくる欄の「▼」から > 「住所」「所属」「氏名」など選択はできるのですが、 > それをはめこめません。 簡易に設定するなら、手順は逆ですね。 1)『ラベル住所』と名前を付けたいセルを選択状態にしてください。 2)数式バーの左欄「A1▼」などがでてくる欄に『ラベル住所』と入力  し、リターンキーで確定してください。A1の表示を書き換えるのです。 一応、失敗して複数の定義を作っちゃった場合に整理する 方法も書いておきます。 メニューから[挿入]-[名前]-[定義]を選んでください。 [名前の定義]ダイアログに名前と該当セル範囲のリストが 表示されますので編集してください。 こちらが本来の名前の定義方法ですね。詳しくはヘルプで 確認してください。

tapchibo
質問者

お礼

質問すら上手にできずに申し訳ありませんでした。 本当にご丁寧に教えていただいてありがとうございます! 定義の仕方も何となく分かりましたので、もう一度やり直してみます。 必死にやってみると世の中助けてくれる方もいらっしゃるのだなと感謝の気持ちです。 ありがとうございました。

その他の回答 (1)

  • MARU4812
  • ベストアンサー率43% (196/452)
回答No.1

実行時エラーは、プログラムの文法上の間違いは無いが、実行した時に 都合が悪くなった場合にでます。このため、人によって事情が違うのは よくあることです。 一応、職業プログラマの私の目には、色々と問題のあるコードに見えますが そこは目をつぶって、 > 5.上記「 用紙.Range("ラベル住所") = Cells(番号 + データ開始, 住所1位置).Value > + " " + Cells(番号 + データ開始, 住所2位置).Value」 > の部分が黄色の→とラインでチェックされています。 のオブジェクトを1つ1つ見ていきますと、 ・用紙.Range("ラベル住所") 『ラベル住所』という名前のついたセルが見つからないとエラーになります。 ・Cells(番号 + データ開始, 住所1位置).Value (番号 + データ開始)や(住所1位置)の計算結果が0以下になるとエラーになります。 ・Cells(番号 + データ開始, 住所2位置).Value (番号 + データ開始)や(住所2位置)の計算結果が0以下になるとエラーになります。 というのが良くあるパターンですね。 エラーが起こった時点で、カーソルをそれぞれの変数に当てれば、変数の値が 表示されますので確認してください。 >セルの高さや幅を変更したり一部削除したりしました。これが原因かもしれません。 高さや幅の変更で不具合が起こる可能性は低いですが、削除は該当セルが 無くなったり、行数の計算が合わなくなる可能性は高いですね。 プログラムは、パソコンが実行すべき動作を厳密にマニュアル化したものですから、 行数が合わなかったり、処理対象セルが見つからなければ実行できないのは当然です。

tapchibo
質問者

お礼

ご丁寧にありがとうございます!本当に初歩的なことも分かっておらずお恥ずかしい限りですが、やさしく教えていただいて感謝しています。引き続き教えていただけるととても助かります。 >・用紙.Range("ラベル住所") 『ラベル住所』という名前のついたセルが見つからないとエラーになります。 まさにそうでした。 「ラベルシート」の上記セルに、元々は「住所」「所属」「氏名」などおいていたようです。これらをセルの高さや幅を変更した時に削除してしまったようです。 自分で作ったマクロではないので、これを修復する方法もまたわかりません。また同じ位置に「住所」などを入れてみようと思いますが、どのようにしたらよいのでしょうか。 数式バーの左欄「A1▼」などがでてくる欄の「▼」から「住所」「所属」「氏名」など選択はできるのですが、それをはめこめません。

関連するQ&A

  • 2003で作ったマクロを2000で実行するとエラーがでてしまう!

    エクセル2003で作ったマクロを2000で実行すると、「コンパイル エラー : 名前付き引数が見つかりません。」とエラーが出てしまいます。 2003ではエラーが出ないので間違ってはいないと思うのですが、原因が分かりません。何卒、ご教授いただけませんでしょうか? 内容は以下になりますが、「DataOption」が反転で白字になるのでここに原因があると思うのですが、見よう見まねで作ったのでさっぱり分かりません…。 予約帳の入力フォームで、別シートに作ってあるリストから選択して月別に登録していくというような内容です。 宜しくお願い致します。 With ActiveSheet mySNewRow = .Range("A65536").End(xlUp).Row + 1 .Cells(mySNewRow, "A") = cboDay.Value .Cells(mySNewRow, "B") = cboArea.Value .Cells(mySNewRow, "C") = cboTime.Value .Cells(mySNewRow, "D") = cboBusnumber.Value .Cells(mySNewRow, "E") = txtName1.Value .Cells(mySNewRow, "F") = txtNumber.Value .Cells(mySNewRow, "H") = txtCharge.Value .Cells(mySNewRow, "I") = cboLodging.Value .Cells(mySNewRow, "K") = txtRemarks.Value .Cells(mySNewRow, "L") = cboInput.Value .Cells(mySNewRow, "G") = lstName1.Value .Cells(mySNewRow, "J") = lstName2.Value End With Range("A6:A605").Select Range("A5:L605").Sort Key1:=Range("A6"), Order1:=xlAscending, Key2:=Range _ ("C6"), Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase _ :=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin, DataOption1:= _ xlSortNormal, DataOption2:=xlSortNormal Unload userform1 userform1.Show End Sub

  • Excel マクロ 実行エラー

    Excelマクロ初心者(ほぼ初めて)の大学生です。 研究室でのデータ整理&パラメータ算出で頻繁にExcelを使用します。 かなり面倒で、他の学生に頼むにも整理&算出方法を一から説明しなければならないので、マクロを使って作業効率を上げられる&人にも頼めるという話を聞きチャレンジしました。 とりあえずVBE(?)で作ってみましたが実行するとエラーが発生してしまいます。 「SubまたはFunctionが定義されていません」というメッセージが表示されます。 プログラム文は以下の通りです。 Sub Df算出() ' ' ' '2009/11/2 **研 **** 作成 ' ' ' 'Visual BASICによるプログラミング '****による画像解析結果から、Df算出に必要な種々のパラメータを算出するExcelマクロである '算出される値→dp、Ap、n、ln(Rg/dp)、ln(n) ' '解析結果から基本的なパラメータを求めるだけであり、まだまだ改良の余地があるマクロである '誤りが発覚した時、解析内容が変わった時、処理内容を追加したい時など 'ぜひこのマクロを参考にして、改良して活用して頂けると幸いである ' ' '解析結果、計測回数、粒径の入力が済んでいる事を確認する ' If vbNo = MsgBox("解析結果のペースト、列K、Мへの入力は済んでいますか?", vbYesNo) Then Exit Sub ' ' '変数の型/宣言 'X=ラベル数 ' Dim X As Integer ' Name = "ラベル数入力ボックス" X = InputBox("解析画像のラベル数を入力して下さい", Title = Name) ' ' '全てのラベルについて繰り返し処理 ' '変数の型/宣言 'i=カウンタ変数 ' ' Dim i As Integer ' ' For i = 3 To X + 2 ' ' Cells(i, 12) = Cells(i, 11) - Cells(i - 1, 11) 'ラベルiにおける計測回数を列Lに出力 ' '稀に生じるバグ(?)データは処理せず弾く ' If Cells(i, 12) = 0 Then GoTo Label ' Else ' 'ラベルiにおけるdpを列Nに出力 ' Cells(i, 14) = (Cells(i, 13) * Cells(i, 11) - Cells(i - 1, 13) * Cells(i - 1, 11)) / Cells(i, 12) ' 'ラベルiにおけるApを列Оに出力 ' Cells(i, 15) = (Pi() * Cells(i, 14) ^ 2) / 4 'Ap=πdp^2/4 ' 'ラベルiにおけるDf算出用のnを列Pに出力 ' Cells(i, 16) = (Cells(i, 9) / Cells(i, 15)) ^ 1.09 'n=(A/Ap)^1.09 ' 'ラベルiにおけるDfグラフの横軸を算出 ' Cells(i, 17) = Ln(Cells(i, 8) / Cells(i, 14)) 'ln(Rg/dp) ' 'ラベルiにおけるDfグラフの縦軸を算出 ' Cells(i, 18) = Ln(Cells(i, 16)) 'ln(n) ' End If ' Label 'バグデータを弾いた際に用いるラベル Next i ' ' ' 'これで、1枚の画像解析結果からDfを算出するのに最低限必要な計算は完了しました ' 'マクロを改良して、より解析作業効率を向上させ、研究に励んで下さい 'この後に、dp分布、n分布を作成させる '新しく、解析に有効なパラメーターを加える 'なども、とても有効かも知れません End Sub ここまでがプログラム文です。 コメント文中の名前、パラメータ名などは伏せました。 1年次からプログラムに関する授業だけはどうしても苦手で、PCに関する基本用語もあまり分かりません。 なら、なぜマクロ挑戦したんだ?という感じですが、苦手意識を克服したかったんです。 マクロ使い慣れている方、簡単な言葉でアドバイスを頂けると嬉しいです。 長くなりましたが、よろしくお願いします。

  • EXCELマクロについて

    条件 シート名提供データE列の3行目からデータが入っています。    ブランク以外のデータをコピーしてシート名WorkのC列の2行目から貼り付けたいので下記のマクロを書いていますがおかしい所 はないのでしょうか。教えてください。 いまいちCellsの使い方がわかりません。 出来たら下記の意味を教えてください。 brank = Worksheets("提供データ").Cells(gyo, 5).Text Range(Cells(3, 5), Cells(gyo, 5)).Select Sub 貼付() Dim gyo, brank Sheets("提供データ").Select Range("e3").Select gyo = 2 Do gyo = gyo + 1 brank = Worksheets("提供データ").Cells(gyo, 5).Text Loop While brank <> "" Range(Cells(3, 5), Cells(gyo, 5)).Select Selection.Copy Sheets("work").Select Range("c2").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False End Sub

  • エクセルマクロ実行時エラー1004について

    システムを起動すると実行時エラー1004とでて5行目のWorksheets(3).Selectで止まってしまいます。 私が作成したものではなく、なぜなのかわかりません。緊急を要しています。誰かわかる方いらっしゃらないでしょうか。 よろしくお願いします。 Dim Max_data2 As Integer Public Cunt_01 As Integer Sub auto_open() Dim wkSheet As Excel.Worksheet Worksheets(3).Select ' Range("c4") = Date ' Range("c20") = Date Range("d6").Select With Worksheets("工場、受注一覧表") ' Worksheets("工場、出荷指示書").Range("j3").Value = Date ' Worksheets("工場、出荷指示書").Range("I4").Value = Date ' Worksheets("工場、出荷指示書").Range("J4").Value = Time .Range("d5").Value = Date .Range("d21").Value = Date .Range("d23").Value = Date End With For Each wkSheet In ThisWorkbook.Worksheets If InStr(wkSheet.Name, "工場、出荷指示書") <> 0 Or InStr(wkSheet.Name, "@") <> 0 Then wkSheet.Range("J3").Value = Date wkSheet.Range("I4").Value = Date wkSheet.Range("J4").Value = Time End If Next Call com_list Cunt_01 = 10 '1件づつ転記のカウンタ '★追加★ '入出庫報告書のファイルを開く Dim sPath As String sPath = ThisWorkbook.Worksheets("工場、受注一覧表").Range("W1").Value If sPath = "" Then Exit Sub End If If Dir(sPath) <> "" Then Workbooks.Open (sPath) End If ThisWorkbook.Activate ''★23.06.12 ActiveWindow.SmallScroll ToRight:=4 End Sub

  • エクセルマクロ:範囲の選択

    マクロで範囲を指定したいのですが、 dataと名づけたシートA1に例えば8という値、A2に20という値があります。 この数字は他のセルから参照する計算式になっていて再計算をするたびに変わります。 この時、C8:E20の範囲を指定したいのですが、やみくもに Dim c As Integer c = 3 'C列 Range(Cells(Sheets("data").Range("A1").Value, c), Cells(Sheets("data").Range("A2").Value, c + 2)).Select Selection.Copy などと書いてみたのですが、うまくいきません。 どのように記述すればよいか、教えてください、宜しくお願いいたします。

  • マクロの実行とコマンドボタン

    office2000、WIN98SEです。 マクロの記録でマクロを作成しました。 これをコマンドボタンにコピペして実行するとエラーになります。マクロの実行から動かすとなんの問題もありません。なにがいけないんでしょう。教えてください。 ちなみにやりたいことは、複数のシートの同じセルを一気にクリアにしたいです。 記録したマクロは以下の通りです。宜しくお願いします。 Sheets(Array("用紙(1)", "用紙(2)", "用紙(3)", "用紙(4)")).Select Sheets("用紙(1)").Activate Range("B9").Select ActiveWindow.SmallScroll Down:=36 Range("B9:C58").Select Selection.ClearContents Range("F9").Select ActiveWindow.SmallScroll Down:=36 Range("F9:G58").Select Selection.ClearContents Range("I9").Select ActiveWindow.SmallScroll Down:=36 Range("I9:I58").Select Selection.ClearContents Sheets("用紙(1)").Select Range("B9").Select End Sub

  • エクセル マクロの設定方法について

    差込印刷でSheet1に作成した名簿データにより、sheet2に作成しているデータへ差込印刷をしています。現在、次のようなマクロを組んで名簿の件数に合わせて、For = 2 To 500 Step 8を修正しながら、印刷しています。できたら、名簿の件数の増減に関係なく印刷できるようになればと考えています。始めたばかりのマクロ初心者です。よろしくご教授ください。お願いします。 Dim i As Long Dim ws1 As Worksheet, ws2 As Worksheet Set ws1 = sheets(″sheet1″) Set ws2 = sheets(″sheet2″) For i = 2 To 500 Step 8 ws2 .Range(″A1″).Value = ws1.Cells(i+1,2).Value ws2 .Range(″A7″).Value = ws1.Cells(i+2,2).Value ws2 .Range(″A13″).Value = ws1.Cells(i+3,2).Value ws2 .Range(″A19″).Value = ws1.Cells(i+4,2).Value ws2 .Range(″F1″).Value = ws1.Cells(i+5,2).Value ws2 .Range(″F7″).Value = ws1.Cells(i+6,2).Value ws2 .Range(″F13″).Value = ws1.Cells(i+7,2).Value ws2 .Range(″F19″).Value = ws1.Cells(i+8,2).Value DoEvents ws2.PrintOut Next End Subws2 .Range(″F1″).Value = ws1.Cells(i+5,2).Value ネット等で調べて、上記のようなマクロで作業してます。(マクロの設定方法が間違っているところがあると思いますが?)

  • excel vba で 実行時エラー13となります。

    こんにちは、 先日、「作りながら覚える! excel vba マクロ 組み方講座 永井善王著」という本を購入してvbaマクロを勉強中です。 本にそって進めていくと、P.122の所でストップしてしまいました。 急に「実行時エラー13 型が一致しません」と表示され、何回やりなおしてもそこから進めなくなりました。 コードは、 Sub DBシートから当月分シートを作成する() Dim 開始年月日 As Long Dim 終了年月日 As Long 開始年月日 = ">=" & Worksheets("年月日入力").Range("D4") 終了年月日 = "<=" & Worksheets("年月日入力").Range("D5") ChDir "C:\ときめき" Workbooks.Open Filename:="C:\ときめき\売上DB.xls" Sheets("当月分").Select Cells.Select Selection.Clear Sheets("DB").Select Range("A2").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:=開始年月日, _ Operator:=xlAnd, Criteria2:=終了年月日 Selection.CurrentRegion.Select Selection.Copy Sheets("当月分").Select Range("A1").Select ActiveSheet.Paste Sheets("DB").Select Application.CutCopyMode = False Selection.AutoFilter Sheets("住所録").Select ActiveWorkbook.Save ActiveWindow.Close End Sub になります。 3行目の  開始年月日 = ">=" & Worksheets("年月日入力").Range("D4") が黄色くなっています。 (なぜかこの本では、Dim   As Long での変数定義がされておらず、そこは自分で入れています。) 現在本に沿って勉強しているところですが、詰まってしまいお手上げの状態です。 どうぞ助けてくださいませ。

  • エクセルのマクロを教えてください。

    マクロの初心者です。 特に変数が全く使えず、下記もどのように記載していいのかわからないため教えていただけないでしょうか。 ユーザーフォームのtextbox2に開始番号があります。 textbox3に本数があります。 sheet1のB12セルには開始番号が入ります。 開始番号から本数分+1したものを順番にセルに入っていくようにしたいです。 ただ、入れたいセルが横→左下(開始番号の列)→横→左下(開始番号の列)・・・としたいため、どのように書いていいのかわかりません。 地道に書くのであれば、下記のようになると思うのですが、変数を使って書く場合はどのようになるのか教えていただけないでしょうか。 Worksheets("Sheet1").Range("B12").Value = TextBox2.Value If TextBox3.Value = 2 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 ElseIf TextBox3.Value = 3 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 ElseIf TextBox3.Value = 4 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 Worksheets("Sheet1").Range("G13").Value = TextBox2.Value * 1 + 3 ElseIf TextBox3.Value = 5 Then Worksheets("Sheet1").Range("G12").Value = TextBox2.Value * 1 + 1 Worksheets("Sheet1").Range("B13").Value = TextBox2.Value * 1 + 2 Worksheets("Sheet1").Range("G13").Value = TextBox2.Value * 1 + 3 Worksheets("Sheet1").Range("B14").Value = TextBox2.Value * 1 + 4 ・ ・ ・ End If

  • エクセルVBA:マクロの中にマクロ?

    度々よろしくお願いします。ボタンが複数あって、それぞれに記録されたマクロの一部分が共通している場合の処理について教えてください。 例えば、前回の質問でご回答いただいたモノを流用し、別の処理と複合させたマクロがあります。 この変数ixがボタン(それぞれのマクロ)ごとに異なる場合、Do While以下を別のマクロとして記録し、それぞれのマクロの中で Application.Run "TEST.xls!Macro1"などのようにできるのでしょうか?変数の扱いをどうして良いのかわかりません。 Sub test() ~別の処理 ix = 8 Do While Cells(ix, "D") <> ""   Select Case Trim(Cells(ix, "D"))   Case "背筋"     Range("AZ8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))   Case "アーム"     Range("BA8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))   Case "レッグ"     Range("BB8").Copy Destination:=Range(Cells(ix, "I"), Cells(ix, "AW"))   End Select   Range(Cells(ix, "I"), Cells(ix, "AW")).Copy   Cells(ix, "I").PasteSpecial Paste:=xlPasteValues   ix = ix + 1 Loop Range("I8").Select End Sub