• ベストアンサー

エクセル2000マクロで行を削除したいのですが

エクセル2000で、社員台帳から特定の人物だけ削除しようと思いマクロを 組んだのですが、どうもうまくいきません。 社員には全員00から99の2桁のコードがついています。(列Aにあります) 2桁のコードが00の人物だけ削除したいのですが。 次のようなマクロを組んだのですが、どこがおかしいのでしょうか? とりあえず、20行程度処理しようと思います。 Range("A2").Select For Each セル In Range("A2:A20") If セル = "00" Then Selection.EntireRow.Delete Next

  • ariga
  • お礼率44% (55/123)

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

  • ベストアンサー
  • arata
  • ベストアンサー率49% (139/279)
回答No.3

>それから、End If の部分でエラーで落ちました。「End If に対する If がない」 >というメッセージでした??? これは、うちでは、再現しません。 再度ご確認を >と、いう訳で、00のコードを持つ社員が複数名おり、かつ連続して出てくる >可能性があります。 A2とA3が00の場合、A2が00なので、A2の行を削除しま すが、このため、A3だったセルはA2になってしまうの で元A3であるA2の00は処理されないことになってしま います。 という訳で、やはり後ろからやらないと駄目だと思い ます。 Dim y As Long For y = 20 To 2 Step -1 With Cells(y, 1) If .Value = "00" Then .EntireRow.Delete End If End With Next

ariga
質問者

お礼

たいへん、うまくいきました。ありがとうございました。また、お礼が遅くなってしまって、すいません。

ariga
質問者

補足

End If でエラーが発生する件につきましては、私の記述誤りでした。 記述後に、きちんとデバッグすればよかったんですね。 大変に失礼致しました。

その他の回答 (3)

  • april21
  • ベストアンサー率42% (91/216)
回答No.4

リスト内を選択して「データ」-「フィルタ」「オートフィルタ」をクリック。 A列に▼が出来るのでそれをクリックして「00」を選択すると「00」のものだけが 抽出されます。 別の列をキーにして絞り込むなりして行削除すれば良いのでは? (A2を選択してCtrl+Shift+Endで抽出した範囲を選択して右クリック行削除) ↑が出来るのであればマクロの記録でこの手順を記録すればマクロになります。 99のときなら99に変えてマクロを作れば良いのでは?

  • kbonb
  • ベストアンサー率51% (254/492)
回答No.2

こんにちは  以下のページがご参考になるのでは? 【エクセル技道場】-マクロ-行の削除 http://www2.odn.ne.jp/excel/waza/macro.html#SEC6

参考URL:
http://www2.odn.ne.jp/excel/waza/macro.html#SEC6
  • arata
  • ベストアンサー率49% (139/279)
回答No.1

Selection.EntireRow.Deleteに問題があります。 選択されている行を削除しますから、A2のある2行目 が削除されてしまいます。 For Each セル In Range("A2:A20") If セル = "00" Then セル.EntireRow.Delete End If Next こんな、感じでどうでしょう。 なお、社員台帳と言うことで、00の人が2回出てくる ことはないと思いますが、連続で00が出てくると2つ 目の00は削除されませんので、ご注意ください。 (後ろから検査したほうがいいと思います。)

ariga
質問者

補足

arataさん、いろいろとありがとうございます。 実は、この2桁のコードは社員固有のIDではないのです。 (書き忘れてすいません) と、いう訳で、00のコードを持つ社員が複数名おり、かつ連続して出てくる 可能性があります。 それから、End If の部分でエラーで落ちました。「End If に対する If がない」 というメッセージでした???

関連するQ&A

  • エクセルマクロで行挿入

    「マクロの記録」でマクロを作っていて限界を見たので質問します。 A列に5桁コード、B列から付随するデータを使い、 この5桁コードの頭文字が「1」から「2」に変わる所に一行挿入させたいです。 挿入の指定場所に検索を入れ込むのかなぁとやってみたところ、エラーになりました。 ↓これがそれ。 Columns("A:A").Select range(Selection.find(What:="2????", After:=ActiveCell, LookIn:=xlFormulas, _ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False).Activate) As range Selection.EntireRow.Insert てんで見当違いかもしれませんが参考に貼り付けてみました。 どうすれば良いか教えてください。 (WinNT・Excel2000)

  • Excelマクロの繰り返しの書き方

    Excelマクロで、下記のような操作を、B4行から、B100まで 繰り返したいです。 このような行を、100行まで書くのは、面倒なので、 For Nextや、Do loopを使いたいのですが、 いろいろな指南書を読んでも、セル内の書式がイマイチ理解できないので、 申し訳ないのですが、どなたか、ご指南いただけないでしょうか? Range("B4").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Range("B6").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove 同様な問題ですが、下記を50行繰り返したい、 上記のご回答をいただければ、下記も理解できると思うのですが 下記も作れないで困っています。できれば、これも教えていただければ助かります。 Range("A5").Select Selection.EntireRow.Delete Range("A6").Select Selection.EntireRow.Delete Excelのversionは2019です。 以上、よろしくお願いします。

  • 条件に合った行を削除するマクロについて

    こんにちは 今、現在、とある条件にあった行を削除するマクロ作っているのですが、 インターネットを調べてみると後ろから探索して、1行ずつ消していくのがいいと書いてありました。 まぁ、その理屈はわかるんですが、それなら 「Unionでセルの範囲を結合してから、最後に一度に消してしまった方が速いのでは」 (消す作業が1度だけで済むから) と思い試してみたんですが、実際試したところ・・・ ものすごく遅かったです。 (ちなみに、1万件のデータで削除した行数は6000ほどでした) 何故Union結合だと遅いのでしょうか? 速いマクロを作成するには、やはり後ろから探索して、1行ずつ消していくしかないのでしょうか? 以下は試したマクロです。 (test が unionで試したマクロ、test2が後ろから1行ずつ削除したマクロ) Option Explicit Public Sub test() Dim r As Range Dim r1 As Range 'Cells.Replace "-", " " For Each r In Range("A2", Range("A65536").End(xlUp)) If r = r.Offset(1, 0) And r.Offset(0, 1) < r.Offset(1, 1) Then If r1 Is Nothing Then Set r1 = r Else Set r1 = Union(r1, r) End If End If Next r1.EntireRow.Delete ' r1.Select End Sub Public Sub test2() Dim r As Range Dim r1 As Range Dim i As Integer 'Cells.Replace "-", " " Application.ScreenUpdating = False For i = Range("A65536").End(xlUp).Row To 1 Step -1 If Cells(i, 1) = Cells(i + 1, 1) And Cells(i, 2) < Cells(i + 1, 2) Then Cells(i, 1).EntireRow.Delete End If Next Application.ScreenUpdating = True End Sub

  • マクロでエクセルの行を準に削除したいのですが…(;_;)

    エクセルのマクロを使って Range("D3:E3").Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp Range("D4:E4").Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp という風に3000個ほど順番に消していきたいのですがfor...nextを使うと for I = 3 to 3000   Range("DI:EI").Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp nest I となってこれを実行するとDIのセルに飛んでしまいます。どうしたらいいのですか?教えて下さいお願いしますm(_ _)m

  • 重複行削除のマクロ

    重複行を削除するマクロを作っていますが、うまくいきません。 2行目にタイトルが入っていて、3行目以降が必要なデータになります。 この中でA列が一致しているデータ行を削除したいと考えており、 重複データが削除された後、タイトル行がなぜか一番下の行にはりついてしまいます。 どなたか詳しい方助けてください!!!よろしくお願いします。 ちなみに以下が現在使用しているVBAコードです。 =============================================================== Sub GoodRemoveDuplicates() 'A列にデータが入力されており、そのデータを並べ替えた後、 '重複するデータが含まれている行を削除するマクロ Worksheets("貼り付け用用マクロ").Range("A1").Sort _ key1:=Worksheets("貼り付け用用マクロ").Range("A1") Set currentCell = Worksheets("貼り付け用用マクロ").Range("A1") Do While Not IsEmpty(currentCell) Set nextCell = currentCell.Offset(1, 0) If nextCell.Value = currentCell.Value Then currentCell.EntireRow.Delete End If Set currentCell = nextCell Loop End Sub ===============================================================

  • 空白行の削除マクロについてご教示ください

    空白行の削除に、下記マクロを活用させていただいていますが、 見た目空白なのに削除されない行が時々残ってしまいます。 削除されなかったセルを「Deleteキー」で空白にするとマクロが 実行され、きちんと削除されます。 こういった、スペースか何かが入っていても、見た目空白なら 削除するようにはできないでしょうか。 どなたかよろしくお願いいたします。 Sub 削除() Dim c As Range Dim 開始行 As Long Dim 最終行 As Long 開始行 = 5 最終行 = Range("a5000").End(xlUp).Row For Each c In Range("a" & 開始行 & ":a" & 最終行) If c.Value = "" Then Rows(c.Row).Delete End If Next End Sub

  • Excelマクロ ○印図形を消したい

    ○印図形を消したい Private Sub CommandButton2_Click() ' ○印をつける Dim a As Range If TypeName(Selection) = "Range" Then Set a = Selection ActiveSheet.Shapes.AddShape(msoShapeOval, a.Left, _ a.Top, a.Width, a.Height).Select Selection.ShapeRange.Fill.Visible = msoFalse a.Select End If End Sub Private Sub CommandButton3_Click() 上記のマクロでつけた○印を下記のようなマクロで(指定の範囲のセルにつけた○印を全て)消したいのですが、上記のマクロは問題なく動作するのですが、下記のマクロがうまく動きません、どこをどのように変更したらよいのでしょうか?、どなたかご教示ください。 ' 指定したセル範囲にある図形を削除する() ' ○印の削除 指定セル範囲 = "U32:X41" With ActiveSheet Set セル範囲 = .Range(指定セル範囲) For Each 図形 In .Shapes If 図形.Type = msomsoPicture Then Set 共有セル範囲 = Intersect(Range(図形.TopLeftCell, _ 図形.BottomRightCell), セル範囲) If Not (共有セル範囲 Is Nothing) Then 図形.Delete End If End If Next End With End Sub

  • エクセルのマクロで行選択

    現在、エクセルでマクロを組んでいます。 行いたい内容としては 1.行6~1765までを選択 2. 1.で選択した行を非表示 3. 行6~"セルH2の値"までをを選択 4. 3.で選択した行を再表示 3の段階で失敗してしまいます。 Rangeメソッドに失敗しました、と出ます ソースは以下のとおりです ----- Private Sub CommandButton2_Click() Dim x As Integer Range("6:1765").EntireRow.Select Selection.EntireRow.Hidden = True x = Range("H2").Value Range("6:x").EntireRow.Select Selection.EntireRow.Hidden = False End Sub ---- 解決法がわかる方、教えてください よろしくお願いします。

  • マクロでの行削除処理について

    マクロで行削除をする際、 Rows("1:2").Delete Shift:=xlUp Range("A1").EntireRow.Delete 上記どちらかで実施すると場所指定で削除できると思います。 例えばですが、 番号 科目 1 数学 2 数学 3 体育 4 体育 のようにデータがあるとして、番号の大きいほうの科目を 残すようにする方法で、変数を使ってやる方法はできないのでしょうか。 for文で行数まわすイメージを考えております。

  • 行の削除

    列Kに、削除という文字が入っている場合は、その行を削除するということで、3000行くらいあるなかで3分の2程度は削除する行に該当します。 下のマクロで試してみましたが、このマクロではとっても時間がかかってしまうんですが、どうしたら早く処理できるのか教えて下さい。 Dim R As Range Do Set R = ActiveSheet.Range("K:K").Find(What:="削除", LookAt:=xlWhole) If R Is Nothing Then Exit Sub R.EntireRow.Delete Loop

専門家に質問してみよう