Board logo

標題: 請教VBA刪除A欄指定"中文"字元(列) [打印本頁]

作者: jsc0518    時間: 2017-3-2 17:17     標題: 請教VBA刪除A欄指定"中文"字元(列)

各位大大,
之前有請教大家使用下列語法可以刪除指定字元
For Each x In Split("TPD.TPD-both.TPD-viewing.GSA", ".")
我想把這一段改成刪除 類別: 以及 會計科目:

我改成
For Each x In Split("類別:"."會計科目:", ".")
但出現錯誤

是否語法須修訂



Sub Step1()
    Dim d As Object
    Dim arr
    st = Timer
    Set d = CreateObject("Scripting.Dictionary")
    For Each x In Split("TPD.TPD-both.TPD-viewing.GSA", ".")
        d(x) = ""
    Next x
    arr = Range("A1:A" & ActiveSheet.UsedRange.Rows.Count)
    For I = 1 To UBound(arr)
        If d.exists(arr(I, 1)) Then arr(I, 1) = ""
    Next I
    [A1].Resize(UBound(arr), 1) = arr
    Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    Set d = Nothing
    arr = ""
End Sub
作者: bobomi    時間: 2017-3-2 17:59

懶羊羊你好

For Each x In Split("類別:.會計科目:", ".")
作者: jsc0518    時間: 2017-3-2 19:06

回復 2# bobomi

Hi bobomi,

它出現

[attach]26742[/attach]



Sub DelBlank2()
    Dim d As Object
    Dim arr
    st = Timer
    Set d = CreateObject("Scripting.Dictionary")
    For Each x In Split("類別:.會計科目:", ".")
        d(x) = ""
    Next x
    arr = Range("A1:A" & ActiveSheet.UsedRange.Rows.Count)
    For I = 1 To UBound(arr)
        If d.exists(arr(I, 1)) Then arr(I, 1) = ""
    Next I
    [A1].Resize(UBound(arr), 1) = arr
    Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    Set d = Nothing
    arr = ""
End Sub
作者: bobomi    時間: 2017-3-2 23:57

回復 3# jsc0518

Sub DelBlank2()
    Dim d As Object
    Dim arr
    st = Timer
    Set d = CreateObject("Scripting.Dictionary")
    For Each x In Split("類別:.會計科目:", ".")
        d(x) = ""
    Next x
    arr = Range("A1:A" & ActiveSheet.UsedRange.Rows.Count + 1)
    For I = 1 To UBound(arr)
        If d.exists(arr(I, 1)) Then arr(I, 1) = ""
    Next I
    [A1].Resize(UBound(arr), 1) = arr
    Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    Set d = Nothing
    arr = ""
End Sub
作者: jsc0518    時間: 2017-3-3 08:31

回復 4# bobomi

Test OK,太感謝你了

原來是改了這一段
    arr = Range("A1:A" & ActiveSheet.UsedRange.Rows.Count + 1)

Thanks!
作者: jsc0518    時間: 2017-3-3 09:01

回復 4# bobomi

您好,這語法可以刪除指定的中文字,但我是想刪除這中文字的"列",全刪除

[attach]26747[/attach]
作者: bobomi    時間: 2017-3-3 23:28

回復 6# jsc0518

你的程式已經可以刪除指定中文字的整列,不是嗎?
不然請舉個刪除失敗的例子
作者: jsc0518    時間: 2017-3-4 08:39

回復 7# bobomi


抱歉我弄錯了,測試是可以整列移除的
感謝你的回覆!
作者: jsc0518    時間: 2017-3-4 19:04

回復 7# bobomi

我終於知道為何不能刪除關鍵的中文字的原因

程式依照您所提供的語法
但若巨集名稱
為 Sub DelBlank2() --> 正常可以移除
為 Sub 移除中文() --> 只可移除空白,但中文仍無法移除

差在巨集名稱的定義
作者: jsc0518    時間: 2017-3-4 21:35

回復 7# bobomi

您好,想跟您請教一個問題,
我將巨集的名稱更改為英文後,在該工作表上執行是正常的
但我在另一個工作表做了一個按鈕,去執行該VBA時
這時指定刪除中文的列就無法清除掉,而只會刪除空白列

若有跨工作表執行時,要怎麼做?
作者: lpk187    時間: 2017-3-4 23:45

回復 10# jsc0518


    那就做區域吧!(with)
With Sheets("工作表")
arr = .Range("A1:A" & .UsedRange.Rows.Count + 1)
    For I = 1 To UBound(arr)
        If d.exists(arr(I, 1)) Then arr(I, 1) = ""
    Next I
    .[A1].Resize(UBound(arr), 1) = arr
    .Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End With
作者: jsc0518    時間: 2017-3-5 06:49

回復 11# lpk187


謝謝您的回覆,我再試試




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)