- ベストアンサー
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はまったくの初心者ですので、そもそも調べ方が間違っているかもしれませんが・・・
- tuxhiro
- お礼率50% (2/4)
- オフィス系ソフト
- 回答数4
- ありがとう数2
- みんなの回答 (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)
こんばんは。 どこかで、似たような別の質問が出ていましたが、当面は、こんな感じでよいと思います。 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)
追伸 セル削除はselectしなくても、下記で可能と思います。 Sheets("Sheet2").Range(Sheets("Sheet2").Cells(x, 1), Sheets("Sheet2").Cells(x, 7)).Delete shift:=xlUp
- mitarashi
- ベストアンサー率59% (574/965)
これは、よくはまります。 Sheets("Sheet2").Range(Sheets("Sheet2").Cells(x, 1), Sheets("Sheet2").Cells(x, 7)).Select と、Cellsの方もシートを明確化する必要があります。
お礼
早速ありがとうございます なるほど~ エラーについては解決しました 引き続き、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(エクセル)
- 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です。
- ベストアンサー
- Visual Basic
- 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 に置き換える方法お教えください。
- ベストアンサー
- Excel(エクセル)
- 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
- ベストアンサー
- Visual Basic
- 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
- ベストアンサー
- Visual Basic
- 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
- ベストアンサー
- Excel(エクセル)
- 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
- ベストアンサー
- Visual Basic
お礼
ごめんなさい お礼がかぶっちゃいました(^^ そうですね selectする必要は、無いといえば無いですね 教本どおりに作ったものを改造していたので よく理解していませんでした このたびはありがとうございました