プロが教えるわが家の防犯対策術!

エクセルである単純作業があります。

Range("A1").Select
Selection.Delete Shift:=xlUP
Selection.Delete Shift:=xlUP
Range("A4").Select
Selection.Delete Shift:=xlUP
Selection.Delete Shift:=xlUP

これの繰り返しで、A1,A4,A7,A10と3行ずつの列Aが2400くらいまでリピートさせたいのですが、どのようにすればよいのでしょか?

このマクロが良いのかわかりませんが、
[Aの列に数字が入っている場合は、その行は削除、文字列ならばそのまま]という数式でも構いません。

よろしくお願いいたします。

質問者からの補足コメント

  • A1,A2を削除してA3,A4を残す。
    A6,A7を削除してA8,A9を残す。
    A11,A12を削除してA13,A14を残す。
    これの繰り返しでA2000番台まで行いたいです。

    [Aの列に数字が入っている場合・・・]は無視していただいて構いません。
    ただ単純に
    A1:数字
    A2:数字
    A3:文字
    A4:文字
    A5:空欄

    この繰り返しがやはりA2000番台まであるので、数字の場合は行削除して上に詰める、文字の場合は残す...という意味でした。

    「Excelのマクロを使って単純作業を簡潔」の補足画像1
      補足日時:2018/01/18 15:52

A 回答 (5件)

A3,A6,A9,A12,…を残して削除したいのかぁ?と思いますが


ご提示のコードを動かすとそのようになりませんよね?
「Selection.Delete Shift:=xlUP」の意味は今選んでいる行を削除して、その下の行を詰めるという意味です。これを2回行った時点で、元々A4セルはA2セルになっているので、次に消されるのは元々A6セルだったものになってしまいます。

何をやりたいのか?言葉でもう一度説明してください。

[Aの列に数字が入っている場合は、その行は削除、文字列ならばそのまま]の場合ですが
①「数字」と「文字列」の違いは、どのように判断するつもりですか?
②「空欄」の場合はどうするのですか?
③「+」や「-」などが頭についた場合はどうするのでしょうか?
    • good
    • 0

それでは以下のようなものはいかがでしょうか?


--------------------------------------------------------------------------------
Sub 対象行削除()
Dim 行 As Long
行 = 1
Do While Cells(行, 1).Value <> ""
Rows(行 & ":" & 行 + 1).Delete Shift:=xlUp
行 = 行 + 3
Loop
End Sub
--------------------------------------------------------------------------------
    • good
    • 0
この回答へのお礼

すごいです!
A1,A2が削除され、A6,A7が削除され、A11,A12が削除され、A16,17が削除され、A21,22が削除されました。
あるところで動かなくなり、みてみると
AX1:数字
AX2:数字
AX3:文字
AX4:空欄

と文字が一行しかない場合がありました。やはりマクロではなく手作業しかないでしょうか?

お礼日時:2018/01/18 17:22

それですと一番問題なのは「00:00:03,147 --> 00:00:06,715」などです。


matsubokkuri12 さんは数字だと主張していますが「-->」が有る時点で数字ではありません。
「数字」の行と、頭から8文字が時間として認識出来る行を削除ではいけませんか?
    • good
    • 0

こんばんは!



横からお邪魔します。
>A1,A2を削除してA3,A4を残す。
>A6,A7を削除してA8,A9を残す。
>A11,A12を削除してA13,A14を残す。

>数字の場合は行削除して上に詰める、文字の場合は残す...
を自分なりに解釈してみました。

Sub Sample1()
Dim i As Long, myRng As Range
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row Step 5
With Cells(i, "A")
If .Value <> "" And IsNumeric(.Value) Then
If myRng Is Nothing Then
Set myRng = .Resize(2)
Else
Set myRng = Union(myRng, .Resize(2))
End If
End If
End With
Next i
If Not myRng Is Nothing Then '//←念のため//
myRng.EntireRow.Select '//★//
End If
End Sub

※ 行削除ではなく「行選択」でやめています。
正しい行が選択されていた場合は
「★」の行を
>myRng.EntireRow.Delete

に変えてみてください。

※ お望みの結果でなかったらごめんなさい。m(_ _)m
    • good
    • 0
この回答へのお礼

私のつたない説明ですが、tom04さんが解釈された通りです!
A2000でもマクロが動作しました。
ありがとうございました。
マクロ、勉強したくなりました。

お礼日時:2018/01/19 02:00

回答も無いので、簡単に「頭2文字が数字の行を削除する」で作成してみました。


--------------------------------------------------------------------------------
Sub 対象行削除()
Dim 行 As Long
Application.ScreenUpdating = False
行 = 1
Do While 行 <= Cells(Rows.Count, 1).End(xlUp).Row
If IsNumeric(Left(Cells(行, 1).Value, 2)) Then
Rows(行).Delete Shift:=xlUp
Else
行 = 行 + 1
End If
Loop
ActiveSheet.UsedRange
Application.ScreenUpdating = True
End Sub
--------------------------------------------------------------------------------
※「Application.ScreenUpdating = False」と「Application.ScreenUpdating = True」はスピードアップのために表示切替を止めています。
※「ActiveSheet.UsedRange」はスクロールバーなどの設定を削除後に合わせるために入れています。(削除後、保存されるまでは元の行数を保持してしまうエクセルの仕様を修正するため)
    • good
    • 0
この回答へのお礼

ありがとうございます。
セルの属性が数字、文字ではなく、数字ではじまっている、文字で始まっているセルの間違えですね。
マクロを動かしてみます。

お礼日時:2018/01/19 01:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!