返回列表 上一主題 發帖

可否簡化 VBA 語法

Sub zz2()
Dim T$, xR As Range, xE As Range, R&
T = "_TPD_TPD-both_TPD-viewing_GSA_"
R = Range([A1], ActiveSheet.UsedRange).Rows.Count
Set xE = Range("A" & R + 1)
For Each xR In Range([A1], xE(0))
  If xR = "" Or InStr(T, "_" & xR & "_") Then Set xE = Union(xE, xR)
Next
xE.EntireRow.Delete
End Sub

TOP

回復 11# ML089


A欄空白時若H欄有資料 不刪除嗎?   --> A欄空白,一律要刪除
Just do it.

TOP

回復 6# 准提部林


Dear ikboy / 准提部林 / ML089

我在H欄有設定資料,但A欄是空白的,若H欄資料是位於最下方時,程式無法刪除該列





028-01.zip (10.39 KB)
Just do it.

TOP

本帖最後由 ML089 於 2017-2-8 16:03 編輯

回復 9# jsc0518


A欄空白時若H欄有資料 不刪除嗎?

Sub ex()
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
        For Each x In Array("", "TPD", "TPD-both", "TPD-viewing", "GSA")
            If Cells(i, 1) = "" And Cells(i, "H") <> "" Then Exit For
            If Cells(i, 1) = x Then Cells(i, 1).EntireRow.Delete
        Next
    Next
End Sub
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

回復 6# 准提部林

您好,我有測試過,但仍有一些問題,若A欄是空白的(我要刪除列),但在H欄有資料(我不需要)
經測試後,它(H爛)的資料仍會存在,並不會因為A欄是空白而刪除整列
Just do it.

TOP

回復 3# ML089

您好,我有測試過,但仍有一些問題,若A欄是空白的(我要刪除列),但在H欄有資料(我不需要)
經測試後,它(H爛)的資料仍會存在,並不會因為A欄是空白而刪除整列
Just do it.

TOP

回復 7# ikboy


您好,我有測試過,但仍有一些問題,若A欄是空白的(我要刪除列),但在H欄有資料(我不需要)
經測試後,它(H爛)的資料仍會存在,並不會因為A欄是空白而刪除整列
Just do it.

TOP

回復 4# jsc0518


Sorry 沒測試, 己更正:
Sub zz()
Application.ScreenUpdating = 0
Dim x(), rng As Range, ar, Myr&
x = Array("TPD", "TPD-both", "TPD-viewing", "GSA")
Myr = [a65536].End(3).Row
ar = Range("a1:a" & Myr)
Set rng = Cells(Myr + 1, 1)
For i = 1 To UBound(ar)
    If Len(ar(i, 1)) = 0 Then
        Set rng = Union(rng, Cells(i, 1))
    Else
        For j = 0 To UBound(x)
            If InStr(ar(i, 1), x(j)) Then Set rng = Union(rng, Cells(i, 1))
        Next
    End if
Next
rng.EntireRow.Delete
Application.ScreenUpdating = 1
End Sub

TOP

本帖最後由 准提部林 於 2017-2-8 10:19 編輯

若只檢查A欄的內容,參考如下:
Sub zz2()
Dim T$, xR As Range, xE As Range
T = "_TPD_TPD-both_TPD-viewing_GSA_" '將索引值用"_"連接
Set xE = [A65536].End(xlUp)(2) '設A欄最後一格的下一格為 xE
For Each xR In Range([A1], xE(0))
  If xR = "" Or InStr(T, "_" & xR & "_") Then Set xE = Union(xE, xR)
Next
xE.EntireRow.Delete
End Sub

資料多的話,檢查完畢再一次刪,速度較快∼∼

TOP

回復 3# ML089

ML089
感謝您的提供,測試成功,謝謝您!
Just do it.

TOP

        靜思自在 : 一個人不怕錯,就怕不改過,改過並不難。
返回列表 上一主題