• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA 400エラー 1004エラー)

VBA 400エラー・1004エラーの原因を探る

cj_moverの回答

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

こんにちは。#1、cjです。 こちらのスタンスとしては、どこに問題があるのかを、まず、ひとつひとつ確かめて ひとつひとつの問題点を明らかにして、ひとつひとつ手当てするというものです。 何故ならば、このスレは今のところ、質問者さんが提示したコードを動くようにする ということが、優先事項だからです。 動くようなコードを提示してほしい、とか、正しい記述を教えてほしいというものではありません ので自重していたのですけれど。 #2さんがご指摘の点も、こちらでは把握していますし、提示する準備はしてありましたが、 どうなんでしょう。却って混乱するようなことにならなければいいのですが。 Sub 一ページ17名標準4debug() 'okg7737673 7743252 Dim oRng As Range Dim nL As Integer On Error GoTo errT_ 'Application.ScreenUpdating = False With Sheets("Sheet1") ' .Unprotect ' Cells.Find(What:="No.2").Offset(-1, 36).Resize(3, 8).Insert Shift:=xlDown ' Cells.Find(What:="No.2").Offset(-1, 2).Resize(3, 1).EntireRow.Delete 1 Set oRng = .UsedRange.Find(What:="No.2", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, MatchByte:=False) If oRng Is Nothing Then MsgBox "not Found @1" & vbLf & "No.2 が見つかりません" Exit Sub Else nL = 11 oRng.Offset(-1, 36).Resize(3, 8).Insert Shift:=xlDown nL = 12 oRng.Offset(-1, 2).Resize(3, 1).EntireRow.Delete End If nL = 19 .Rows("2:61").RowHeight = 21.75 '''行の幅 変更点 ' Cells.Find(What:="No.1").Offset(-1, 2).Resize(3, 1).EntireRow.Copy 2 Set oRng = .UsedRange.Find(What:="No.1") If oRng Is Nothing Then MsgBox "not Found @2" & vbLf & "No.1 が見つかりません" Exit Sub Else nL = 21 oRng.Offset(-1, 2).Resize(3, 1).EntireRow.Copy End If nL = 28 .Range("38:38").Insert '''No2見出し挿入カ所 変更点 nL = 29 .Range("A39").Replace What:="No.1", Replacement:="No.2" '''No1→No2置換カ所 変更点 ' Cells.Find(What:="No.2").Offset(-1, 36).Resize(3, 8).Delete Shift:=xlUp 3 Set oRng = .UsedRange.Find(What:="No.2") If oRng Is Nothing Then MsgBox "not Found @3" & vbLf & "No.2 が見つかりません" Exit Sub Else nL = 31 oRng.Offset(-1, 36).Resize(3, 8).Delete Shift:=xlUp End If ' Cells.Find(What:="♯管理欄").Resize(3, 8).Cut ' ' '名字のエクセル関数の調整(全共通) 4 Set oRng = .UsedRange.Find(What:="♯管理欄") If oRng Is Nothing Then MsgBox "not Found @4" & vbLf & "♯管理欄 が見つかりません" Exit Sub Else nL = 41 oRng.Resize(3, 8).Cut End If nL = 49 .Range("AK63").Insert Shift:=xlDown ' Cells.Find(What:="♯管理欄").Resize(3, 8).Cut 5 Set oRng = .UsedRange.Find(What:="♯管理欄") If oRng Is Nothing Then MsgBox "not Found @5" & vbLf & "♯管理欄 が見つかりません" Exit Sub Else nL = 51 oRng.Resize(3, 8).Cut End If .Range("AK38:AS40").Insert Shift:=xlDown .Range("A1").Select ' .Protect End With 'Application.ScreenUpdating = True Set oRng = Nothing Exit Sub errT_: Set oRng = Nothing MsgBox nL & vbLf & "番号を控えて知らせてください" End Sub つまるところ、何をやりたいのか、ひいては、何を持って解決なのか 把握しようがないのです。 どの行でエラーが出るのか、という情報さえ、リクエストしたのにもらえないので、、、。 もう少し、手掛かりが、欲しいと考えて、昨日の時点で上のコードを書いてはいたのですが、 これを試して、どうなるか、フィードバックはもらえるのでしょうか? 実際のシートが見えませんから、こちらでは、ダミーのサンプルを既に10種類ほど作成して 求める結果の想定解を予測したりしましたが、やはり見えてこない、というか、気の遠くなるような 作業です。 喩えれば、ピースの足りないジグソーパズルを渡されて、 間違ったピースを混ぜられて、元の絵を再現せよ、と言われているようなもので。 私の優先度としては、2番目に確認するべきことは >Cells.Find(What:="No.2").Offset(-1, 2).Resize(3, 1).EntireRow.Delete この行の記述で何をしたいのか?ということの確認です。 Cells.Find(What:="No.2")で見つけた"No.2"セルを削除していますから、 もし、このほかに"No.2"と書かれたセルが無いならば、 その後でCells.Find(What:="No.2")が出てくる度にエラーになります。 最後に、 もっと、具体的なレスがないと対応できません。今までのようなやりとりでは 解決は数か月先になるでしょう。 こちらが必要だという情報が得られなければ継続は困難です。 代わりにきちんと動くものを提示せよ、という風に話が変わっていったとしても なにがやりたいか説明抜きではむり無理でしょう。 #2さんなら、このままでも解決できる、ということなら、 そちらを優先してくださって結構です。快く引き下がりますので。 ちょっと、何を優先させるべきなのか、私にもわからなくなっていたところなので。

関連するQ&A

  • VBAについて

    皆様、こんにちは。 VBAを使って会計シートを作っていますが、初心者なので、色々と悩んでいます。今回、コンボボックスにセールをリンクして、コンボボックスで選ばれた値に合わせてシートの行を増やしたいですが、どうすればいいでしょうか?例えば、linked cellは2の場合は、 Range("D25:G27").Select Selection.Insert Shift:=xlDown 3の場合は Range("D25:G28").Select Selection.Insert Shift:=xlDown などのようにしたいですが、誰か詳しい方が教えてくだされば非常に助かります。どうぞよろしくお願いいたします。

  • VBAマクロエラー【オーバーフローしました。】

    以下のVBAマクロで突然エラーが出るようになってしまいました。 原因がわからず困っています。 どなたかご教授ください。 該当部分 :S = Range("B2").End(xlDown).Row エラーMrg:実行時エラー'6': オーバーフローしました ----------マクロ文---------- Sub 部担コード読み替え() Dim R_Count As Integer Dim P_Sheet As String Dim S As Integer 'データ取込用のファイルを開く Workbooks(D_Book).Activate Sheets("Data1").Select Columns("C:C").Select Selection.Insert Shift:=xlToRight Range("B2").Select S = Range("B2").End(xlDown).Row Range("C2:C" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("C1").Value = "部担コード" Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Columns("B:B").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Range("A1").Select Sheets("Data2").Select Columns("C:C").Select Selection.Insert Shift:=xlToRight Range("B2").Select S = Range("B2").End(xlDown).Row Range("C2:C" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("C1").Value = "部担コード" Columns("G:G").Select Selection.Insert Shift:=xlToRight Range("G2:G" & S).Formula = "=SUBSTITUTE(SUBSTITUTE(RC[-1],""%"",""1""),""*"",""2"")" Range("G1").Value = "キー" Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues Columns("B:B").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Columns("E:E").Select Application.CutCopyMode = False Selection.Delete Shift:=xlToLeft Range("A1").Select End Sub

  • コードの、どこが間違ってますか?

    下記は、選択した1つのシートだけしか、実行されませんが、どこが間違ってますか? よろしくお願い致します。 ---- Sub 不要な行を削除する() Dim i As Integer On Error Resume Next For i = 9 To Worksheets.Count Worksheets(i).Range(Cells(4, 6).End(xlDown).Offset(2, 0).EntireRow, Cells(4, 6).End(xlDown).Offset(12, 0).EntireRow).Select Selection.Delete Shift:=xlUp Next i  End Sub ----

  • VBA OR条件での検索について教えてください。

    VBA初心者です。また質問させてください。 以前、下記のような表で、『小計』の文字を検索して行を挿入したり、斜め線を引くという内容をVBAでやる方法を教えていただきました。 その節はありがとうございました。 *************************************************************   A    B       C    D 1  2  項目 品名       数量   単位 3     内訳(別紙明細) 1     式 4     ブレーカ      1     ヶ 5     消耗品       1     式   6             7 8           小計 ************************************************************* 今度は『小計』だけでなく『合計』があった場合も、同じ処理をするVBAを作成したいのですがうまくいきません。 以下が記述です。 ************************************************************* Private Sub 斜め線描画_Click() Dim myLine As Shape Dim c As Range Dim cnt As Integer Dim i As Integer cnt = WorksheetFunction.CountIf(Cells, "*小   計*") Set c = Cells.Find(What:="小   計", LookIn:=xlFormulas, LookAt:=xlPart) If Not c Is Nothing Then i = 1 Call LineArranging(c) Do If i >= cnt Then Exit Sub 'カウントでチェック Set c = Cells.FindNext(c) If c Is Nothing Then Exit Sub Call LineArranging(c) i = i + 1 Loop End If Set c = Nothing End Sub Sub LineArranging(rng As Range) Dim BX As Double, BY As Double, EX As Double, EY As Double Dim rngStart As Range, rngEnd As Range Dim myLine As Shape rng.Select ActiveCell.Rows("1:2").EntireRow.Select Selection.Insert Shift:=xlDown rng.Offset(1, 0).Select ActiveCell.Rows("1:2").EntireRow.Select Selection.Insert Shift:=xlDown rng.Offset(-2, 0).Select Selection.EntireRow.Insert ActiveCell.EntireRow.Select Selection.RowHeight = 2 rng.Offset(1, 0).Select Selection.EntireRow.Insert ActiveCell.EntireRow.Select Selection.RowHeight = 2 Set rngStart = rng.Offset(1, -1) Set rngEnd = rng.Offset(-2, 0) BX = rngStart.Left BY = rngStart.Top EX = rngEnd.Left + rngEnd.Width EY = rngEnd.Top Set myLine = Sheet4.Shapes.AddLine(BX, BY, EX, EY) BX = BX + 151.5 BY = BY - 27 EX = EX - 152.25 EY = EY + 26.25 Set myLine = Sheet4.Shapes.AddLine(BX, BY, EX, EY) Set rngStart = Nothing Set rngEnd = Nothing Set myLine = Nothing End Sub ************************************************************* 『または』なのでorを使うのかと思ったのですが、エラーになりうまくいきません。どうしたらいいのか教えてください。 よろしくお願いします。

  • EXCELのマクロについて

    お世話になっております。 以下のマクロを1万行分繰り返したいのですが、回数を1万回と指定する構文を 教えてください。よろしくお願いします。 Sub Macro16() ' ' Macro16 Macro ' ' Keyboard Shortcut: Ctrl+Shift+Z ' ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove ActiveCell.Offset(-1, 0).Range("A1:M1").Select Selection.Copy ActiveCell.Offset(1, 0).Range("A1").Select ActiveSheet.Paste ActiveCell.Offset(-1, 2).Range("A1").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "7/5/1905" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "7/6/1905" ActiveCell.Offset(1, -2).Range("A1").Select End Sub

  • vba  

    VBAはじめたばかりで、躓きました。 下記を実行すると、”Nextに対するForがありません。”とでます。 なぜこうなるのか教えてください。  G2~列2000の間が空白になるまで、  下記の処理を続けるようにしたいと思っています。  Dim i As Integer For i = 7 To 2000 Do If Cells(2, i) = "" Then Range("G2").End(xlToRight).Select ActiveCell.CurrentRegion.Resize(6, 5).Select Selection.Cut Range("B2").End(xlDown).Select ActiveCell.Offset(1).Select ActiveSheet.Paste Exit Do End If Next i Loop  よろしくお願いします。

  • VBA 右端列の削除

    このたび初めて質問させていただきます。 周囲にVBAを扱うひとがいないため、初歩的(たぶん?)な質問をさせてください。 以下のようなマクロを記録したのですが、一部を編集したいと考えております。 Columns("F:H").Select Selection.Insert Shift:=xlToRight Columns("A:B").Select Selection.Cut Range("F1").Select ActiveSheet.Paste Columns("J:J").Select→J列固定ではなく右端の列と設定したい。 Selection.Cut Range("H1").Select ActiveSheet.Paste Columns("A:B").Select Selection.Delete Shift:=xlToLeft Columns("J:J").SelectをJ列固定ではなく右端の列を1列設定し切り取りがしたいのです。Range("A2").End(xlToRight).Select ActiveCell.Offset(-1,0).End(xlDown).Select と書き換えてみたのですが、うまく作動しませんでした。 どなたか教えていただけませんでしょうか?

  • エクセルのマクロ実行→オブジェクトがはみでるエラーについて

    エクセルでマクロを作り、実行したのですが、データを集計し「2」で集約する部分で「オブジェクトからはみでます」というエラーがでます。原因がわかりません。正しく実行できる方法を教えてください。 Selection.Subtotal GroupBy:=2, Function:=xlSum, TotalList:=Array(3, 4, 5, 6, _ 7, 8, 10, 13), Replace:=True, PageBreaks:=False, SummaryBelowData:=False Range("D2").Select   ↓この部分でエラーになります。 ActiveSheet.Outline.ShowLevels RowLevels:=2 Range("A2").Select Selection.Insert Shift:=xlDown Range("P2:R2").Select Selection.Insert Shift:=xlDown Range("B1").Select Selection.SpecialCells(xlCellTypeVisible).Select Selection.Copy

  • offsetを使ってinsertするとエラーといわれる。

    Sheets(1).Range("I" & i).Offset(0, cprow - 1).Select Selection.Insert Shift:=xlRight 上記のようにかいてみたのですが、 エラーといわれます。どうしてでしょうか?

  • VBAで行を挿入する

    VBAを始めた初心者です。 Exel2002使用です。 VBAでA列の4行目から10行目に行の挿入をできるようにしようと下記のように書きましたが、Rows("i:i").Selectの部分でデバックがかかってしまいます。間違っている理由がわからないのですがよろしくお願いします。 また、DO While Loopステートメントを使ってA列が空白になるまで(例えばA4セル以下の)行を挿入とする場合の方法も教えていただけましたら幸いです。 Sub 4行目から10行目まで() Dim i As Integer For i = 4 To 10 Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown Next i End Sub Sub 4行目から空白になるまで() Dim i As Integer Range("A4").serect Do While activecell.value = "" Cells(i, 1).Value = i Rows("i:i").Select Selection.Insert Shift:=xlDown activecell.offset(1,0).select Loop End Sub