• ベストアンサー

ExcelVBAで任意のシートの任意のセル範囲を削除する方法

http://okwave.jp/qa1222496.html こちらのページを参考にやってみたのですが、下記コードの3行目で 「アプリケーション定義またはオブジェクト定義のエラーです」となります コードは以下のとおりです ---------- X = Sheets("Sheet1").Cells(1, 1).Value  Sheets("Sheet2").Select Sheets("Sheet2").Range(Cells(X, 1), Cells(X, 7)).Select Selection.Delete shift:=xlUp ---------- Sheet1のA1には任意の数字が入り、その数字に対応したセル範囲を削除するというものです 仮に3と入っているとして、Sheet2のA3からG3までを削除して 行を詰めたいと考えています Sheet1のA1には確かに数字が入っていることは確認しております あともし可能であれば、Sheets("Sheet2").Selectをしなくても 行を削除する方法があればご教授願いたいと思います webでいろいろ調べてみましたが、Sheets("Sheet2").Select としないといけないようでした VBAはまったくの初心者ですので、そもそも調べ方が間違っているかもしれませんが・・・

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

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

#1でご指摘のCellsを使わず (下記はSheet2にXの行指定をいれ、Sheet1にデータがある例に変えています) Sub test01() x = Sheets("Sheet2").Cells(1, "A").Value With Sheets("Sheet1") .Range("A" & x & ":G" & x).Delete shift:=xlUp End With End Sub でやると逃げられるようです。 簡略に Sub test01() x = Sheets("Sheet2").Cells(1, "A").Value Sheets("Sheet1").Range("A" & x & ":G" & x).Delete shift:=xlUp End Sub でも出来ました。 私の好みか、列番号が固定なら、数字より、記号(例 G)の方が可視性が良いのでは。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 どこかで、似たような別の質問が出ていましたが、当面は、こんな感じでよいと思います。 Sheets("Sheet1") でもよいのですが、対象とするものは、Worksheet ですから、本来は、Worksheets("Sheet1")のように限定してあげるほうがよいです。 Sub Test1() Dim i As Long i = Worksheets("Sheet1").Cells(1, 1).Value If i < 1 Then Exit Sub With Worksheets("Sheet2")  .Range(.Cells(i, 1), .Cells(i, 7)).Delete Shift:=xlUp End With End Sub

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.2

追伸 セル削除はselectしなくても、下記で可能と思います。 Sheets("Sheet2").Range(Sheets("Sheet2").Cells(x, 1), Sheets("Sheet2").Cells(x, 7)).Delete shift:=xlUp

tuxhiro
質問者

お礼

ごめんなさい お礼がかぶっちゃいました(^^ そうですね selectする必要は、無いといえば無いですね 教本どおりに作ったものを改造していたので よく理解していませんでした このたびはありがとうございました

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

これは、よくはまります。 Sheets("Sheet2").Range(Sheets("Sheet2").Cells(x, 1), Sheets("Sheet2").Cells(x, 7)).Select と、Cellsの方もシートを明確化する必要があります。

tuxhiro
質問者

お礼

早速ありがとうございます なるほど~ エラーについては解決しました 引き続き、Sheets("Sheet2").Selectをしなくても 行を削除する方法があれば教えていただきたいです

関連するQ&A

  • シートの部分部分を切り出しで別ファイルにする方法

    EXCEL2010 シートの部分部分を切り出しで別ファイルにする方法をVBAで教えてください。 A.xlsmというファイルがあります。 これには、複数シート(aシート,bシート,cシート,dシート,eシート)が存在します。 aシートは、複数行のAセルに見出しがついています。 1行目A1FL1 18行目A1RL1 36行目A1FL2 53行目A1RL2 71行目A1FL3 88行目A1RL3 106行目A1FL4 123行目A1RL4 141行目A1FL5 158行目A1RL5 最終行は177行 という感じです。 作成したいファイルはaシートの一部とd,eを1つのファイルとし、 A1FL1.xlsx A1RL1.xlsx A1FL2.xlsx A1RL2.xlsx A1FL3.xlsx A1RL3.xlsx A1FL4.xlsx A1RL4.xlsx A1FL5.xlsx A1RL5.xlsx の10のファイルを作成したいのです。 A1FL1は1行~17行まで A1RL1は18行~35行まで A1FL2は36行~52行まで … A1RL5は158行~177行まで がファイル化する範囲です。 下記は、WEBで調べた内容と学習マクロで作成したマクロです。 行の追加削除が発生すると、削除する範囲がずれてしまうので、 見出しを元に必要な範囲だけでファイル化するVBAをベタで教えていただきたく。 Sub FILE() Const path As String = "C:¥work" '¥まで記述 Dim bk As Workbook Set bk = ActiveWorkbook ChDir bk.path ' ★ 保存先を bk と同じパスへ Dim st As Worksheet '1 A1FL1 bk.Sheets(Array("a", "d", "e")).Copy Rows("18:177").Select Selection.Delete Shift:=xlUp 'リンクの内容を値で固定 Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWorkbook.SaveCopyAs "A1FL1.xlsx" '18 A1RL1 bk.Sheets(Array("a", "d", "e")).Copy Rows("36:177").Select Selection.Delete Shift:=xlUp Rows("1:17").Select Selection.Delete Shift:=xlUp 'リンクの内容を値で固定 Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWorkbook.SaveCopyAs "A1RL1.xlsx" '36 A1FL2 bk.Sheets(Array("a", "d", "e")).Copy Rows("53:177").Select Selection.Delete Shift:=xlUp Rows("1:35").Select Selection.Delete Shift:=xlUp 'リンクの内容を値で固定 Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWorkbook.SaveCopyAs "A1FL2.xlsx" '53 A1RL2 bk.Sheets(Array("a", "d", "e")).Copy Rows("71:177").Select Selection.Delete Shift:=xlUp Rows("1:52").Select Selection.Delete Shift:=xlUp 'リンクの内容を値で固定 Cells.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False ActiveWorkbook.SaveCopyAs "A1RL2.xlsx" …(省略A1FL3.xlsx,A1RL3.xlsx,A1FL4.xlsx,A1RL4.xlsx,A1FL5.xlsx,A1RL5.xlsx) って感じです。

  • excelのセル複数削除について

    2箇所の範囲を削除したいのですが、 Rows("188:247").Select Selection.Delete Shift:=xlUp Rows("311:373").Select Selection.Delete Shift:=xlUp とすると最初に削除されるとRowがずれてしまって、 次のRows("311:373").Selectがうまく削除できません。 2つを同時に削除することは可能でしょうか? 最大で3つまで削除を考えています。 どうぞよろしくお願い致します。 excel2000です。

  • EXCELマクロデータのある行より下の行削除の構文

    EXCELマクロ構文について教えてください。 データのある行のひとつ下の行全体選択し、 Ctrl+Shift+↓で下部行全て選択し、右クリックで削除する 操作をマクロにしたいのでですが、 マクロ記録では上の操作は Rows("189:189").Select Range(Selection, Selection.End(xlDown)).Select Selection.Delete Shift:=xlU  になります。 この 189 という数字は 下記の変数定義で「lastRow」として取得できるのですが Dim lastRow As Long lastRow = Sheets("2CVS関西").Cells(Rows.Count, 2).End(xlUp).Row + 1 189にlastRow に置き換える方法お教えください。

  • VBAで行の削除

    お世話になります。 下記の様に行を削除しようとしていますが、 行を削除していくと、1行ずつずれていく為、 結果全部削除されません。 どのようにしたらうまく(空白のセルの行のみ) 削除出来ますでしょうか。 ご教示頂きたく宜しくお願い致します。          記 For k = 2 To r If Sheets("sheet1").Cells(k, 9) = "" Then Rows(k).Select Selection.Delete Shift:=xlUp End If Next k

  • Excel 偶数番シートのA列が空白であるセル削除

    Excel の1つのファイル内の偶数番シートのA列が空白であるセルを行ごと削除したいのですが、下のコードではうまく動かないです。 シート番号はSheet(2)から(90)までです。 Sub 空白行削除() Dim i For i = 2 To 90 Step 2 Worksheets(i).Activate Columns("A:A").Select Selection.SpecialCells(xlCellTypeBlanks).Select Selection.EntireRow.Delete Next i End Sub

  • excelで別シートのセルを選択(VBA)

    どなたか教えてください。 シートXのB1に行番号 シートXのB2に列番号 が記載されていたとして、 別シート(Y)の、上記で指定したセルを選択する(フォーカスを移動する方法)を教えてください。 シート(X)   A   B   C  1 行  25  2 列  2  シート(Y)   A   B   C  1 2   ::::::: 24 25   (ここ) 以下のように書いても、最後の行でエラーになってしまいます。  行番号 = Sheets("X").Cells(1, 2).Value  列番号 = Sheets("X").Cells(2, 2).Value  Sheets("Y").Select  Range(Cells(行番号, 列番号)).Select

  • マクロLOOP文を別方法で高速化

    シート2のボタンをクリックすると Sub 編集が起動します。 Sub 編集にはCallで2種類のプロシージャーを 呼び出します。 シート1には約20,000行のデータがあります。 処理に約2分かかっています。 もう少し高速にする方法は 有りますでしょうか? プロシージャーは分けておきたいです。 シートに式は入れたくありません。 Sub 編集にはCall文でさらに別のプロシージャーを5個呼び出しますが F8キーで確認すると、それらは秒速で処理されてました。 一番時間がかかっているのがこの部分なので この部分を対策したいです。 よろしくお願いします。 Sub 編集()  Call 検索キー  Call 日付02   Sheets("シート1").Select   Range("R1") = "キー"   Range("S1") = "日付"   Columns("B:B").Select   Selection.Delete Shift:=xlToLeft   Columns("F:F").Select   Selection.Delete Shift:=xlToLeft   Columns("H:O").Select   Selection.Delete Shift:=xlToLeft   Range("A1").Select   MsgBox "編集終了"   Sheets("シート2").Select End Sub   Sub 検索キー()    '2010年11月17日    'R列にC,D,E列を連結させた値を転記     Sheets("シート1").Select     行 = 2     Do     If Cells(行, 1).Value = "" Then Exit Do     Cells(行, 18).Value = Cells(行, 3) & Cells(行, 4) & Cells(行, 5)     行 = 行 + 1     Loop    End Sub    Sub 日付02()     '2010年11月17日     'A列の値、半角数字8桁を下4桁で     '2桁目に/を入れてS列に転記(セルの値もセル表示も)     '例:A列20101117 S列 11/17     'セルの値が2010/11/17でセルの表示が11/27は不可      Sheets("シート1").Select      For 行 = 2 To Cells(Rows.Count, "A").End(xlUp).Row      With Cells(行, 19)      .NumberFormat = "@"      .Value = Format(Cells(行, 1), "!@@/@@")      End With      Next    End Sub

  • エクセルのマクロ:連続動作を空白行で終了する方法

    XP・Excel2003使用のマクロ素人です。 エクセルのマクロを使って以下のマクロを作りました。 1.Sheet1の1行目に入っているデータをSheet2にコピー 2.Sheet2をコピー 3.Sheet1の1行目を削除 4.上記1~3のマクロを実行するボタンをクリック 作業を繰り返し行いたかったので、(4)の「マクロボタンをクリック」という作業もマクロに組み込んでみたのですが、空白行でも延々に実行されてしまいます。 【Sheet1に入っているデータが空白になったら作業を止める】というマクロはどのように書けばいいのでしょうか? マクロの作り方が根本的に間違っていましたら、あわせてご指摘下さい。 宜しくお願い致します。 Range("A1").Select Selection.Copy Sheets("Sheet2").Select ActiveSheet.Paste Sheets("Sheet2").Select Application.CutCopyMode = False Sheets("Sheet2").Copy After:=Sheets(3) Sheets("Sheet1").Select Rows("1:1").Select Selection.Delete Shift:=xlUp Range("A1").Select Sheets("Sheet1").Select Application.Run "Book1!Macro1"

  • エクセルマクロで行を変えて100回デリート

    すみません。繰り返し165行下がってデリートしたいのですが・・・ どなたか詳しい方ご教授下さいませ。 ActiveWindow.SmallScroll Down:=174 Rows("183:198").Select Selection.Delete Shift:=xlUp ActiveWindow.SmallScroll Down:=171 Rows("348:363").Select ←165行下がりデリートを繰り返しデリートしたいです。 Selection.Delete Shift:=xlUp

  • VBA ループについて質問です。

    お世話になります。 VBA ループで『2行目を削除して空白になったら終了』がうまくいきません。 ※1行目は固定です。 ※2行目を削除したら、3行目以下が上がって3行目が2行目になります。 ※2行目に何もなくなったらループ終了 ※実際は複数シートで他の作業もあるので、『i』でなく『j』です。 ※複数シートでの作業が出来る記述でおねがいします。 ▼▼▼▼▼▼ Dim j As Long j = 2 Do While Cells(j, 1) <> "" Sheets("◆抽出先 (提灯)").Select Rows("2:2").Select Selection.Delete Shift:=xlUp j = j + 1 Loop ▲▲▲▲▲▲ どうすれば良いでしょうか? すみませんがよろしくお願いいたします。 Windows10 EXCEL 2010

専門家に質問してみよう