マクロ初心者な為、マクロについてご教授願います。
現在、下記のようなマクロを作成いたしました。
特定のシートに有効としたいのですが
どの部分に特定シートという追記をしたらよろしいでしょうか?
----------------------------------------------------------------------
Sub P列ゼロセル行削除(Optional ダミー As Byte)
Dim irow As Long
Dim i As Long
irow = Cells(Rows.Count, 1).End(xlUp).Row
Application.ScreenUpdating = False
For i = irow To 2 Step -1
If Cells(i, 16).Value = 0 Then
Range(i & ":" & i).Delete
End If
Next i
Application.ScreenUpdating = True
End Sub
----------------------------------------------------------------------
何卒よろしくお願いいたします。
No.12ベストアンサー
- 回答日時:
No.1・10です。
たびたびごめんなさい。
No.10で記載したとおり、各シート名が判っているというコトであれば
データ量が多い場合はオートフィルタの方が速いと思います。
前回同様、A・B・C というシート名のみ操作しています。
そして各シートのP1セルには項目名が入っていて、2行目以降にデータがあるという前提です。
Sub Sample2()
Dim k As Long, lastRow As Long
Dim myAry
myAry = Array("A", "B", "C")
For k = 0 To UBound(myAry)
With Worksheets(myAry(k))
lastRow = .Cells(Rows.Count, "P").End(xlUp).Row
.Range("P:P").AutoFilter field:=1, Criteria1:="=0"
If .Cells(Rows.Count, "P").End(xlUp).Row > 1 Then
Range(.Cells(2, "P"), .Cells(lastRow, "P")).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End If
.AutoFilterMode = False
End With
Next k
MsgBox "完了"
End Sub
こちらの方がループをさせていないだけ速いかも・・・m(_ _)m
再度ご教授いただきありがとうございます。
確かに早く処理できました。
マクロに関しては初心者な為、勉強になります。
ありがとうございました。
No.11
- 回答日時:
「Delete」を使わず「ClearContents」で空欄にしておいて、ソートで一気に間を詰めています
※ ソートを掛けているので、データの順番は変わってしまいます
--------------------------------------------------------------------------------------
☆ シート名を列挙する場合
Sub Sample1()
Call P列ゼロセル行削除1("Sheet1")
Call P列ゼロセル行削除1("Sheet3")
MsgBox ("終了しました")
End Sub
Sub P列ゼロセル行削除1(シート名 As String)
Dim i As Long
Sheets(シート名).Select
Application.ScreenUpdating = False
For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If Cells(i, 16).Value = 0 Then Rows(i).ClearContents
Next i
Cells.Sort Key1:=Range("P2"), Order1:=xlAscending, Header:=xlYes
Application.ScreenUpdating = True
End Sub
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
☆ シート名の頭に選別マークを使う場合
Sub P列ゼロセル行削除3(Optional ダミー As Byte)
Const HStr As String = "☆" '選別マーク
Dim WSht As Object
Dim i As Long, j As Long
For Each WSht In Sheets
If Left(WSht.Name, 1) = HStr Then
WSht.Select
Application.ScreenUpdating = False
For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If Cells(i, 16).Value = 0 Then Rows(i).ClearContents
Next i
Cells.Sort Key1:=Range("P2"), Order1:=xlAscending, Header:=xlYes
Application.ScreenUpdating = True
End If
Next
End Sub
--------------------------------------------------------------------------------------
こんばんは。
何度もご教授頂きましてありがとうございます。
いろいろな処理処理方法があることを教えて頂き、初心者なわたしにはとても勉強になっています。
別途下記に質問させていただいているように、データを貼りつけて、諸々処理をしてExcelファイルに変換するという作業が多くピンポイントで教えて頂けること
大変感謝しております。
ありがとうございます。
http://oshiete.goo.ne.jp/qa/11466325.html
No.10
- 回答日時:
No.1です。
操作対象のシート名はあらかじめ判っているのでしょうか?
もし判っているのであれば・・・(仮にシート名を A・B・C とした場合です)
一例です。
Sub Sample1()
Dim i As Long, k As Long
Dim myRng As Range
Dim myAry
myAry = Array("A", "B", "C") '//←対象シート名を羅列しておく//
Application.ScreenUpdating = False
For k = 0 To UBound(myAry)
With Worksheets(myAry(k))
For i = 2 To .Cells(Rows.Count, "P").End(xlUp).Row
If .Cells(i, "P") = 0 Then
If myRng Is Nothing Then
Set myRng = .Cells(i, "P")
Else
Set myRng = Union(myRng, .Cells(i, "P"))
End If
End If
Next i
If Not myRng Is Nothing Then
myRng.EntireRow.Delete
End If
Set myRng = Nothing
End With
Next k
Application.ScreenUpdating = True
MsgBox "完了"
End Sub
こんな感じではどうでしょうか?
※ 他の方法としてはオートフィルタを使うのが速いかも・・・m(_ _)m
こんにちわ。
度々恐縮です。
ご教授頂きましてありがとうございます。
ご教授頂きましたマクロで検証しましたところ、スピードが以前より早く処理完了できました!!
対象シートと列を指定することによって処理スピードがかなり変わるのですね。
大変勉強になりました。
ありがとうございます。
No.9
- 回答日時:
行削除はどうしても時間がかかります。
どこかの列をキーにしてソートしてしまっても良ければスピードアップを図れるかもしれません。
問題が無ければ、キーになる列を提示して下さい。
お世話になっております。
ご返信ありがとうございます。
>行削除はどうしても時間がかかります。
→そうなのですね。承知いたしました。
>どこかの列をキーにしてソートしてしまっても良ければスピードアップを図れるかもしれません。
>問題が無ければ、キーになる列を提示して下さい。
→P列で”0”がある行を削除したいので、P列でソートをかけても問題ございません。
ただし、削除後フィルターを解除した状態だと幸いです。
No.8
- 回答日時:
こちらはシートの選択にシート名に付けた選別マークを使う方法です。
※ 初期値では「☆」が頭についているシートが対象になります。
Sub P列ゼロセル行削除2(Optional ダミー As Byte)
Const HStr As String = "☆" '選別マーク
Dim WSht As Object
Dim i As Long, j As Long
For Each WSht In Sheets
If Left(WSht.Name, 1) = HStr Then
WSht.Select
Application.ScreenUpdating = False
For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If Cells(i, 16).Value = 0 Then Rows(i).Delete Shift:=xlUp
Next i
Application.ScreenUpdating = True
End If
Next
End Sub
お世話になっております。
ご教授頂きましてありがとうございます。
無事解決いたしました。
ただ、だいぶ時間がかかってしまいます(5分弱)
解消方法はございますでしょうか?
何度も申し訳ありませんが、よろしくお願いいたします。
No.6
- 回答日時:
No.5 の訂正
この場合はシート名を指定しないといけないので「Sub P列ゼロセル行削除(Optional シート名 As String)」ではなく「Sub P列ゼロセル行削除(シート名 As String)」の方が良いと思います。(動かないわけではありませんが「Optional」は付けてはいけません。)
No.5
- 回答日時:
シート名にマークを付ける件、どうやらご賛同いただけなかったので列挙型で…
※「P列ゼロセル行削除」マクロもほんの少し直しました。
Sub Sample()
Call P列ゼロセル行削除("Sheet1") '←このように対象シートを列挙して下さい
Call P列ゼロセル行削除("Sheet2") '←このように対象シートを列挙して下さい
MsgBox ("終了しました")
End Sub
Sub P列ゼロセル行削除(Optional シート名 As String)
Dim i As Long
Sheets(シート名).Select
Application.ScreenUpdating = False
For i = Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If Cells(i, 16).Value = 0 Then Rows(i).Delete Shift:=xlUp
Next i
Application.ScreenUpdating = True
End Sub
おはようございます。
ご教授いただきましてありがとうございます。
また、シートにマークをつける件、わたしのお伝えの仕方が分かりづらかったですね、大変失礼いたしました。
賛同した上で、複数と1枚とでマクロの記載方法が違ってくるということをご教授頂きたかった次第です。
今回、その2通りご教授頂きありがとうございます。
早速、試してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) A列B列C列 3 2023/04/26 18:11
- PowerPoint(パワーポイント) エクセルのマクロについて教えてください。 1 2022/03/25 17:03
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで同じシートのコピーを一...
-
エクセルVBAでパスの¥マークに...
-
EXCELで1ヶ月分の連続した日付...
-
エクセルの複数シートの保護を...
-
エクセルで前シートを参照して...
-
別シート参照のセルをシート毎...
-
前の(左隣の)シートを連続参...
-
VBAでシートコピー後、シート名...
-
スプレッドシートの関数VLOOKUP...
-
エクセルでファイルを開いたと...
-
複数シートの特定の位置に連番...
-
Excelで金銭出納帳。繰越残高を...
-
EXCELで同一フォーマットのシー...
-
エクセルのシート名をリスト化...
-
エクセル計算式解説
-
Excelのシートを、まとめて表示...
-
EXCEL:同じセルへどんどん足し...
-
複数シートの固定のセルの値を...
-
複数のピボットを同じフィルタ...
-
Excel、同じフォルダ内のExcel...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで同じシートのコピーを一...
-
エクセルの複数シートの保護を...
-
Excelで金銭出納帳。繰越残高を...
-
エクセルでファイルを開いたと...
-
EXCELで1ヶ月分の連続した日付...
-
エクセルVBAでパスの¥マークに...
-
EXCEL:同じセルへどんどん足し...
-
シートの保護のあとセルの列、...
-
別シート参照のセルをシート毎...
-
エクセルで前のシートを連続参...
-
前の(左隣の)シートを連続参...
-
EXCELで同一フォーマットのシー...
-
VBAでシートコピー後、シート名...
-
Excel 連番を入力する方法
-
エクセル 計算式も入っていない...
-
エクセルで前シートを参照して...
-
エクセルでシート名を自動入力...
-
Accessのスプレッドシートエク...
-
複数シートの特定の位置に連番...
-
エクセルのシート名をリスト化...
おすすめ情報