C列の下4桁の数字「0926」以下の行を削除するには?

このQ&Aのポイント
  • C列の下4桁の数字「0926」以下の行を削除したいと思っております。C列のデータのある最終行から上へ順に参照して行き、最初に「0926」以下の数字があったら、その行から上へ「Rows(2)」までの行を全部削除するにはどのようなコードになりますでしょうか?
  • C列の数字は必ず、7桁か8桁です。上2桁は月数字1~12のためです。
  • 実行前の例では、C列の数字が「4030907」「4030914」「4030923」「4030931」「4030940」「4030947」「4030914」「4030923」「4030931」「4030940」であり、実行後は「4030931」「4030940」のみが残ります。
回答を見る
  • ベストアンサー

C列の下4桁の数字 「0926」 以下の行を削除するには?(例外)

似たような質問で、申し訳ございません。 http://oshiete1.goo.ne.jp/qa2985040.html 今回は、以前にしました質問の、 「 例外の場合 」 の質問でございます。(前回質問は、解決しております) C列の下4桁の数字 「0926」 以下の行を削除したいと思っております。 下記コードで実行した場合、下記例の場合は、「 Rows(2) 」 ~ 「 Rows(4) 」 はきちんと削除します。 このコードを C列のデータのある最終行から上へ順に参照して行き、最初に 「 0926 」以下の数字があったら、その行から上へ 「 Rows(2) 」 までの行を全部削除するにはどのようなコードになりますでしょうか ? つまり、下記実行後のように「 Rows(2) 」 ~ 「 Rows(9) 」 を削除するにはどのようなコードになりますでしょうか ? C列の数字は必ず、7桁か8桁です。(上2桁は月数字1~12のためです) 何卒、ご教示くださいませ。 --------------------------------------------- Private Sub 指定数字以下の行を削除() Dim i As Integer On Error Resume Next For i = 1 To Worksheets.Count - 1 '--------- With Worksheets(i) Do While Val(Right(.Range("C2"), 4)) <= 926 And .Range("C2") <> "" .Rows(2).Delete Loop End With '--------- Next i End Sub ---実行前------------------------------------ C 数字 4030907 4030914 4030923 4030931 4030940 4030947 4030914 4030923 4030931 4030940 ---実行後------------------------------------ C 数字 4030931 4030940

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

#1です。 修正します。(変数iの宣言が重複していました。) Private Sub 指定数字以下の行を削除() Dim i As Integer, n As Long, lr As Long For i = 1 To Worksheets.Count - 1 With Worksheets(i) lr = .Cells(.Rows.Count, "C").End(xlUp).Row For n = lr To 2 Step -1 If Val(Right(.Cells(n, "C"), 4)) <= 926 And .Cells(n, "C") <> "" Then .Rows("2:" & n).Delete Exit For End If Next n End With Next i End Sub

oshietecho-dai
質問者

お礼

ご回答誠に有難うございました。 俊足でした、当方にはまだ、未知なことです。

その他の回答 (1)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

Private Sub 指定数字以下の行を削除() Dim i As Integer, i As Long, lr As Long For i = 1 To Worksheets.Count - 1 With Worksheets(i) lr = .Cells(.Rows.Count, "C").End(xlUp).Row For n = lr To 2 Step -1 If Val(Right(.Cells(n, "C"), 4)) <= 926 And .Cells(n, "C") <> "" Then .Rows("2:" & n).Delete Exit For End If Next n End With Next i End Sub こんな感じかな

関連するQ&A

  • C列の下4桁の数字 「0926」 以下の行を削除するには?

    C列の下4桁の数字が 「 0926 」 以下の行から上へ、 「 Rows(2) 」 までを全部削除するにはどのようなコードになりますでしょうか ? 下記コードの線の中に作成したいと思ってます。 下記例の場合は、「 Rows(2) 」 ~ 「 Rows(4) 」 を削除することになります。 C列の数字は必ず、7桁か8桁です。(上2桁は月数字1~12のためです) 下行へ行くに従って、必ず数字は増えていきます。 何卒、ご教示お願い致します。 --------------------------------- C 数字 4030907 4030914 4030923 4030931 4030940 4030947 --------------------------------- Private Sub 指定数字以下の行を削除() Dim i As Integer On Error Resume Next For i = 1 To Worksheets.Count - 1 '--------- '--------- Next i End Sub

  • VBA 4桁の文字列にするには

    お世話になっております。 相変わらず初心者です。また質問させてください。 基本的なことが原因でしたら大変申し訳ありません。 E列(添付の「番号」列)を4桁の文字列にしたくて、 下記のように組んでみたのですが、 家のPCで実行すると問題なくE列が4桁の文字列:333だったら0333 になるのですが、 友人のPCで実行すると4桁の文字列:333のとき、実行後も333のままです。 何が原因なのかまったくわからず、途方にくれています。 どうすれば無事に動くのかどなたか教えてください。 With ActiveSheet.Range("A1").CurrentRegion Dim i As Long For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row .Range("J:J").NumberFormatLocal = "@" .Cells(i, 10) = Format(.Cells(i, 5), "0000") .Cells(i, 5) = .Cells(i, 10) Next i End With

  • 列に並んだ数字群から一致する数字の行番号を抽出

    下記のように B列に数字が縦に並んでいます。 28.11684736 28.12102177 28.12519803 28.12937616 28.13355614 28.13773798 28.14192168 28.14610723 28.15029464 28.15448391 28.15867503 28.16286801 28.16706285 28.17125955 28.1754581 この数字群から、例えば 28.15448391 に一致する数字の行を見つけて その行番号を抽出するコードはどのように記述したらよいのでしょうか。 番号はA1のセルに置きます。 但し、条件があって Excel2000~Excel2003の全てのバージョンに共通する こと。そして列のデータ数が約10000程度はあることです。どこから 手をつけてよいのか判らないので、よろしくお願いします。 簡単な例では下記でもよさそうですが。より早く求めるには???  A= Range("B65536").End(xlUp).Row I=0 Do I=I+1 Loop until Cells(I,2).value=28.15448391  Range("A1")=I

  • エクセルで数字の下1桁を見て並び替える

    エクセルで下記の様な数字が並んでいます。 A列の下1桁の数字は上から順に増えていて、ある数字で1に戻りまた増えています。 その数字は毎回同じではなく、6までの場合もあれば10までの場合もあります。 下記の例では上から6行、次は4行、次は7行と下1桁の数字によってグループ分け出来ますよね? それで上から6行目までのB列の値(462~530)をコピーしてSheet2のA1から横方向に並べます。 その次は7行目から10行目までのB列の値(356~487)をコピーしてSheet2のA2から横方向に並べます。 その次も同じように並べます。 B列が空欄の場合もありますが、その場合はそのままSheet2にも空欄のセルを作ります。 1グループ全部のB列が空欄でもそのままSheet2に空欄の行を作ります。 この動作をマクロで出来る式を教えて頂けないでしょうか? A列          B列 0213240101     462 0213240102    387 0213240103    556 0213240104    585 0213240105    536 0213240106    530 0213240201    356 0213240202    632 0213240203    486 0213240204    487 0213240301    586 0213240302    670 0213240303    619 0213240304 0213240305    645 0213240306    487 0213240307    651 0213240401 0213240402 0213240403 0213240501    455 0213240502    623 0213240503    411 Sheet2 A列   B列    C列   D列    E列    F列   G列 462    387    556    585    536    530 356    632    486    487 586    670    619            645    487    651    455    623    411

  • 例えばC列の特定数字の削除

    C列3,000行のうちに、例えば30の数字40行ほどあります。 この40行ほどの数字を削除したいですが方法を教えて下さい。 削除がダメなら数字に色を付けるとかの方法をお願いいたします。

  • データベース上の任意の行を削除しても連番にしたい

    ●質問の主旨 ワークシート上にあるデータベースの任意行を 直接マウス操作などで削除しようとするとき、 当該行のA列に入力されている番号について 削除されても、連続した番号を表示させ続けるようには、 どうしたら良いでしょうか? 下記コードを作成しましたが、上手くいきません。 どのように書き換えたら良いでしょうか? VBAをはじめてまだ2カ月程度の初心者です。 使用機種はWindowsVista、Excel2007です。 ご存知の方、どうぞご教示よろしくお願いします。 ●質問の補足 添付の画像のようにデータベース上の各行に1から順番に番号を 振っています。ところが下記のコードでは 「End Ifに対するIfブロックがありません」とエラーが返されます。 「If…Then…Else」ステートメントの「Else」のことを指しているので しょうか?ある参考書では「Else」は省略可と書いてあったので、 記述しなかったのですが… ●コード 'データベース上の任意行の削除について Sub Gyo_Sakujyo() Dim i As Integer Dim j As Range Dim DB_Kiten As Range 'Worksheets(1)にある任意行の直下の行のA列セルを変数jに短縮置換 Set j = Worksheets(1).Cells(i - 1, 1) 'データベースの基点をWorksheets(1)のA5セルに設定 Set DB_Kiten = Worksheets(1).Range("A5") '任意の行からワークシート上に書き込みがある領域から '1行分(見出し分)を差し引いた範囲において For i = i To DB_Kiten.CurrentRegion.Rows.Count - 1 'もし任意行が策された時、変数jに記入されている値は今の値から1を差し引く If Rows(i).Delete Then j.Value = j.Value - 1 End If Next End Sub

  • E列が空白のとき、その空白行を削除し、番号を振り直す

    windows7 Excel2003でマクロ勉強中です。 あるサイトにE列が空白のとき、その空白行を削除し、番号を振り直すという コードがありました。 自分で作った表(表の最上段の2行は項目名が入っています。)で  実行すると「Rangeメソッドは失敗しました。Globalオブジェクト」と エラーが出ます。エラーはでますが、処理自体は正しく実行されます。 このエラーの原因と回避するにはどうしたらよろしいでしょうか。 Sub E列が空白のとき、その空白行を削除し、番号を振り直す() Dim i As Long, j As Long '行削除の処理 For i = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 If Range("A" & i).Value <> "" And IsNumeric(Range("A" & i).Value) = True Then If Range("E" & i).Value = "" Then Rows(i).Delete End If End If Next '番号振りなおし処理 '’’Range("A" & Rows.Count).End(xlUp).Offset(1).Select For i = 0 To Range("A" & Rows.Count).End(xlUp).Row If Range("A" & i).Value = "番号" Then j = 1 ・・・・・ここでエラー発生 If Range("A" & i).Value <> "" And IsNumeric(Range("A" & i).Value) = True Then Range("A" & i).Value = j j = j + 1 End If Next ActiveSheet.Protect End Sub

  • EXCELVBAで行の削除

    WIN98SE EXCEL2000です。 G列に99の文字があったらその行を削除するというVBAを下記のように作りました。 Dim i As Integer Dim rowcount As Integer rowcount = Cells(1,1).CurrentRegion.Rows.Count For i = 1 To rowcount If Cells(i, 7) = "99" Then Rows(i).Delete Next i これを実行するとG列に99のある行が連続してあると1行おきに削除されます。どこをなおせばよいのか教えてください。よろしくお願いします。

  • VBA 特定の文字列を含む行を削除する方法

    特定の文字列を含む行を削除する方法が知りたいです。 行を削除する方法はWebで見つけたのですが↓ ---------------------------------------------------- Sub 特定の文字列を含む行を削除() Dim c As Range Dim myRow As Long With Range("A:A") Set c = .Find("特定の文字列") Do While Not c Is Nothing Rows(c.Row).Delete shift:=xlUp Set c = .Find("特定の文字列") Loop End With End Sub ---------------------------------------------------- ↑行を指定している箇所のRowsを Columns  RowをColomn に変更して以下の様にしてみました、   Columns(Colomn,c).Delete shift:=xlUp だめでした、、、。 VBAの知識が乏しく、組み立て方について理解が無いため、どうすればよいかさっぱりわからず、、 こちらで質問させて頂きました。。。 何卒宜しくお願い致します。

  • 他のシートの任意の列に1行おきに表示する

    よろしくお願いします。 下の構文ですと Worksheets("入力")の3列目5行目以降のデーターが Sheet2の同じ列(3列目)5行目以降に1行おきに表示されます。 これを Worksheets("入力")の3列目5行目以降のデーターを Sheet2の7列目5行目以降に1行おきに表示したいのですが どのように書き直せばよいでしょうか。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim i As Long, j As Long j = 5 With Worksheets("入力") For i = 5 To .Cells(Rows.Count, 3).End(xlUp).Row .Rows(i).Copy Worksheets("Sheet2").Cells(j, 1) j = j + 2 Next i End With End Sub

専門家に質問してみよう