• 締切済み

マクロ記録実行で実行時エラー'1004'発生

excel2010 B2セルに文字列が入っています。 文字と数値の混載です。 数値の位置は不定です。 L2のセルで、下記判定をします。 B2セルの文字列(約20文字程度)の左から4番目がドだったら、数値を抽出、ド以外だったら空白。 WEBで計算式があったので、それをそのままマクロの記録としました。 Range("L2").Select ActiveCell.FormulaR1C1 = _ "=IF(RIGHT(LEFT(RC[-10],4),1)=""ド"",MID(RC[-10],1/MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))/ROW(INDIRECT(""1:""&LEN(RC[-10]))),)),MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))*ROW(INDIRECT(""1:""&LEN(RC[-10]))),))-1/MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))/ROW(INDIRECT(""1:""&LEN(R" & _ "),))+1)*1,"""")" Range("L3").Select で記録されます。 上記を、マクロの実行すると実行時エラー'1004' アプリケーション定義またはオブジェクト定義のエラーです。 と表示されます。 何がおかしいのでしょうか? シートで、マクロでなく、L2セルでF2リターンとする分には、数値が表示されます。 下記は、L2の中身です =IF(RIGHT(LEFT(B2,4),1)="ド",MID(B2,1/MAX(INDEX(ISNUMBER(--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1))/ROW(INDIRECT("1:"&LEN(B2))),)),MAX(INDEX(ISNUMBER(--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1))*ROW(INDIRECT("1:"&LEN(B2))),))-1/MAX(INDEX(ISNUMBER(--MID(B2,ROW(INDIRECT("1:"&LEN(B2))),1))/ROW(INDIRECT("1:"&LEN(B2))),))+1)*1,"")

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

まずGoogleででも「実行時エラー 1004 アプリケーション定義またはオブジェクト定義のエラー」で照会してみましたか。 たくさん記事がでてくるが。その中で http://www.tipsfound.com/vba/191004 が近いのでは。 ActivateしたシートとSelectしたシートが違うとか。 ほかに http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10106782410 を参考にしてチェックしてください。

3620313
質問者

お礼

回答ありがとうございます

3620313
質問者

補足

ActivateしたシートとSelectしたシートが違う ではない模様です。 Range("L2").Select ActiveCell.FormulaR1C1 = _ "=IF(RIGHT(LEFT(RC[-10],4),1)=""ド"",MID(RC[-10],1/MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))/ROW(INDIRECT(""1:""&LEN(RC[-10]))),)),MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))*ROW(INDIRECT(""1:""&LEN(RC[-10]))),))-1/MAX(INDEX(ISNUMBER(--MID(RC[-10],ROW(INDIRECT(""1:""&LEN(RC[-10]))),1))/ROW(INDIRECT(""1:""&LEN(R" & _ "),))+1)*1,"""")" Range("L3").Select の中身を短くする(別の式)とエラー発生しません。

関連するQ&A

  • 実行時エラー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"と表示されるのですが、何がおかしいのでしょう?

  • エクセルでマクロの記録が出来ません。

    エクセルでマクロの記録が出来ません。 エクセルのA列とB列に1,000行のデータがあります。 マクロの記録を起動します。 1.B1セルを選択 2.右クリックで挿入を選択 3.A列とC列にデータが有り、B列は空白となる。 4.B1セルを選択します。右クリックの貼り付けを選択。   マクロの起動前にクリップボードにあらかじめコピーしておいた   以下の式を貼り付けます。      =IF(A1="","",IF(ISERROR(FIND("-",ASC(A1))),IF(LEFT(ASC(A1),1)<>"9",MID(A1,1,3) &"-"&MID(A1,4,5)&"-"&MID(A1,9,2)&"-"&MID(A1,11,2)&"-"&MID(A1,13,2),IF(LEFT(ASC(A1),2)= "9X",MID(A1,1,3)&"-"&MID(A1,4,11),IF(LEFT(ASC(A1),1)="9",MID(A1,1,5)&"-"&MID(A1,6,5)& "-"&MID(A1,11,2)&"-"&MID(A1,13,2),""))),IF(FIND("-",ASC(A1))=6,A1,MID(A1,1,3)&"-"& MID(A1,4,11)))) 5.「Ctrl」+「C」 6.エクセルの左上の名前ボックスを   B1 → B1:B1000に変更。B列が選択されます。 7.「Ctrl」+「V」 8.B列に式で変換されたデータが入りました。B列が選択されたままです。 9.「Ctrl」+「C」 10.右クリックで形式を選択して貼り付けで「値」を選んでOKをおす。    セルに入っていた式は全て消えました。B列が選択されたままです。 11.マウスポインタをセルのA1におく。B列の選択が解除されました。 マクロの記録を終了 これでNO.4の操作の時に「記録できません」と表示されます。 データを一旦削除し、再度、A列とB列にデータを入れて マクロを実行してもデータB列がC列に移動しB列は空白です。 実際にマクロの記録中でもNO.1からNO.11の操作は出来ています。 なぜ記録されないのでしょうか? どうすれば記録できますか? よろしくお願いします。

  • 実行時エラー1004 オートフィルができない

    エクセルなのですが、A列の文字にたいする数式をB列に入れて最終行までオートフィルするマクロを作りたいのですが実行時エラー1004が発生してしまいます。 Sub macro1() Dim LastRow As Long LastRow = Range("A65536").End(xlUp).Row Range("B1").Value = "=LEN(A1)" Range(Range("B1"), Selection).AutoFill Destination:=Range("B1:B" & LastRow) End Sub このコードです。 Range(Range("B1"), Selection). ここら辺が怪しいかなと思ってるのですが、どうすればいいでしょうか? オートフィルを使わずにfor~nextでやる方法も知ってますが、オートフィルでやる方法をご教授いただきたいです。 よろしくお願いします。

  • マクロの自動実行

    Private Sub Worksheet_Calculate() Range("b1").Value = Range("b1").Value + Range("a1").Value End Sub このマクロをA1セルの数値が変わるたびに自動で実行するには どうすればいいでしょうか?

  • エクセルのマクロ

    任意のセル内の文字の一部をコピー状態にした後に、任意のセルに一文字ずつ貼り付けるマクロを作成したいのですが。 例えば、A1に"あいうえお"と入力されていて、"うえお"をコピー状態にして実行すると、貼り付ける基点となるセルをインプットボックスで指定し、B3が指定されたとするなら、B3に"う"、C3に"え"、D3に"お"が貼り付けられる。 以下のマクロで望んでいる処理が可能になるのですが。 Sub test()  Set x = Application.InputBox(Prompt:="test", Type:=8)   Range("A10").Select   ActiveSheet.Paste   y = Range("A10").Value   z = 0   w = Len(y)     For i = 1 To w      x.Offset(0, z).Value = Mid(y, i, 1)       z = z + 1     Next i   Range("A10").Clear End Sub 上記マクロでは、コピー状態になっている文字を一旦作業用のセルに貼り付けるという処置を取っていますが、そのように作業用のセルを用いないで同じ処理を行うにはどうすればいいでしょうか?

  • Excelのマクロについて

    文字列から数値だけを抽出するマクロを見つけたのですが、抽出するデータを選択してから実行しなければなりませんでした。 抽出するデータはAセル以下にしかないので、データを選択しないでも実行できるようにするにはどうしたら良いのでしょうか? 宜しくお願いします。 以下見つけたマクロです。  Sub test()  Dim mydata As String  Dim c As Range  Dim i As Integer  For Each c In Selection   mydata = ""  For i = 1 To Len(c)   If Mid(c, i, 1) >= 0 And Mid(c, i, 1) <= 9 Then   mydata = mydata & Mid(c, i, 1)    End If   Next   c.Offset(0, 1) = mydata   Next  End Sub

  • マクロ実行時に必ずエラーが発生して困ってます

    EXCEL2007を利用しています。 毎日何百行もある返品のデータがexcelで届くので、そのデータから特定のルールに該当するデータを抽出し別ファイルで保存して処理をしなければならず、最初はフィルタを使って作業していました。 その間少しずつマクロを勉強しながら以下のマクロを作りました。 そのマクロを実行時に必ずエラーが発生し、「送信する」「送信しない」のポップアップが出た後、EXCEL破損のエラーが発生します。 細かいエラーの内容は失念してしまいました。 作業は終了していて、別ファイルもきちんと希望通りの名前で作成されるのですが、 毎回excelの修復が走って時間がかかり困っています。 作業としては以下の通りです。 sheet1にマクロを登録したボタンを作成しています。 sheet2のC2セルにはデータ貼り付けを行なっています。 関数でB列に特定のルールに該当するデータのみ連番が入るようにしています。 そのデータをsheet3(「返品」という名前)にvlookupで移動しています。 空欄の行も移動するため、そのデータをマクロでフィルタをかけ、空欄を除く該当データのみを表示させてコピー、新規ファイルを立ち上げて貼り付けし、「返品データmmdd」という名前(mmddは前日日付)をつけて保存するまでのマクロを作っています。 ************************************************************************** Sub 返品()   Sheets("返品").Select   Rows("1:1").Select   Selection.AutoFilter   ActiveSheet.Range("$A$1:$B$1000").AutoFilter Field:=1, Criteria1:="<>"   Range("A1:B1001").Select   Selection.Copy   Workbooks.Add   ActiveSheet.Paste   ActiveWorkbook.SaveAs Filename:= _   "\\C\返品データ\ " & " 返品データ" & Format(Date - 1, "mm") & Format(Date - 1, "dd") & ".xls", FileFormat:= _   xlExcel8, CreateBackup:=False End Sub ************************************************************************** エラーが出ないようにするためにはどのようにすればよいのでしょうか。 色々とマクロを修正してみましたが、なにぶんマクロを勉強中のため修正できず煮詰まっています。 仕事で使っているため、至急修正が必要な状況に迫られています。 どうかご教示ください。 よろしくお願いいたします。

  • Excelのマクロに関して

    Excelのマクロで特定のセルに特定の数値が入力されている場合、違うセルにある文字列を入力させる場合 すいません。 説明がものすごく悪くて申し訳ないのですが。 A列(行は100くらいまで)に「100」の数値が入力されている場合に、同じ行のE列に文字列「○○」を返す場合は どのようなマクロを使ったらよろしいですか。 会社の人が Sub TimeIntervalPaint() Dim x As Integer, op As Integer Dim TI As Range Application.ScreenUpdating = False Cells.Interior.ColorIndex = xlNone op = Range("B3").End(xlDown).Row Range("E3:BF" & op).ClearContents Call WorkTime For x = 3 To 150 If Range("A" & x).Value = "101" Then If TI Is Nothing Then Set TI = Union(Range("L" & x), Range("AD" & x), Range("T" & x, "W" & x)) Else Set TI = Union(TI, Range("L" & x), Range("AD" & x), Range("T" & x, "W" & x)) End If こういったマクロを登録しているのですが、新たにE列に文字列を入力できるように改良したいのです。 既に退職していて聞くことすら出来ません。 説明がものすごく悪いのは分かっていますが、どなたかご教授ください。

  • エクセル・スピンボタンを使った時にイベントマクロを発生させたい

    エクセルでスピンボタンを使って数値を上下させたときに イベントマクロを発生させたいです セルC1の入力規則のリストから氏名を選択するとグラフが表示されるのですが いちいちリストから選択するのが面倒なので スピンボタンでリストの上から順番に見ていけるようにもしたいのです スピンボタン(セルA1にリンク)を操作 A1…スピンボタンにリンクして数字が変わる B1…INDEX関数でA1の数字とリストから氏名が選択される B1の値をC1に貼り付ける←ここをマクロにしたい イベントマクロで Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub Range("B1").Copy Range("C1").Select ActiveSheet.Paste End Sub としてもうまくいきません スピンボタンにリンクしたセルの値が変わったと時は Worksheet_Changeだと無理なので、どうしたらいいでしょう わかりにくい説明で申し訳ありません

  • EXCEL関数使用で結果が理解できません

    OS:WindowsXP EXCEL2000 以下の表が既に作成されています。 行 :O(英文字オーです) ------------------ 列 6 | 96 7 |216 8 |216 9 |185 10 |(空欄) 11 |(空欄) ここで、セルR6に以下の式が入力されています。 =INDIRECT("R"&MAX(IF(ISNUMBER(O6:O11),ROW(O6:O11)))&"C"&COLUMN(O6:O11),FALSE) セルR6には185が表示されているため、空欄でない最後の行の数値を 出力させる式のようなのですが、よく理解できません。 ISNUMBER(O6:O11)は全部数値だった場合にTrueになるのですか? ROW(O6:O11)は6でした。 IF(ISNUMBER(O6:O11),ROW(O6:O11))はFALSEです。 MAX(IF(ISNUMBER(O6:O11),ROW(O6:O11)))は0です。 COLUMN(O6:O11)は15です。 どなたか知恵をお貸しください。

専門家に質問してみよう