Board logo

標題: [發問] 清除看不見的空格並參照 [打印本頁]

作者: paddyliu    時間: 2015-12-4 23:26     標題: 清除看不見的空格並參照

從系統下載檔案,
其中有幾個儲存格看似有空格,在討論區得到協助,建立如下VBA
    For Each Rng In Selection
 Rng = Trim(Application.Clean(Rng))
 Next
先以clean再用trim來做刪除空格的整理,
但整理後仍無做開頭以1篩選的處理,
並用vlookup參照到此號碼
能否請看看是什麼狀況呢?
[attach]22707[/attach]
作者: 准提部林    時間: 2015-12-5 09:49

Sub 刪除空格()
For Each Rng In Selection
  Rng.Value = Trim(Application.Clean(Rng)) '加入.value表示Rng是Range
Next
End Sub


Sub 刪除空格()
Dim Rng As Range '這是標準宣告
For Each Rng In Selection
  Rng = Trim(Application.Clean(Rng))
Next
End Sub
作者: c_c_lai    時間: 2015-12-5 09:56

本帖最後由 c_c_lai 於 2015-12-5 09:59 編輯

回復 1# paddyliu
回復 2# 准提部林

你可用其他函式將小於33以下的字元去除掉,
在一般轉入檔案內容時,常會帶入些控制字元。
[attach]22714[/attach]
作者: 准提部林    時間: 2015-12-5 11:28

回復 3# c_c_lai


第一個隱藏字元CODE=12, 是可以CLEAN去除,
原因是Rng未定義為Range物件, 轉換後值只留在[變數], 而不是取代儲存格的值~~
作者: c_c_lai    時間: 2015-12-5 11:44

本帖最後由 c_c_lai 於 2015-12-5 11:49 編輯

回復 4# 准提部林
沒錯!我是直接使用他的原始程式去偵測,
沒留意到變數未加事前宣告,剛才我
自行再寫一個測試碼,如您的加上變數
宣告,正吶悶為何又 Pass了,謝謝您提醒!
  1. Sub 刪除空格()
  2.     Dim Rng As Range
  3.    
  4.     For Each Rng In Selection
  5.         '  If Not IsError(Rng) Then
  6.             Rng = Trim(Application.Clean(Rng))
  7.         '  End If
  8.     Next
  9. End Sub
複製代碼

作者: yen956    時間: 2015-12-6 14:43

回復 3# c_c_lai
請問大大:
要怎樣設定才能使監看視窗有作用?謝謝!!
如下圖:
[attach]22727[/attach]
作者: c_c_lai    時間: 2015-12-6 17:27

回復 6# yen956
如圖說明,應該明瞭了吧!
[attach]22729[/attach]
作者: c_c_lai    時間: 2015-12-6 17:53

回復 6# yen956
[attach]22730[/attach]
作者: yen956    時間: 2015-12-6 17:55

本帖最後由 yen956 於 2015-12-6 17:57 編輯

回復 7# c_c_lai
謝謝c大的指導, 了解了!!
作者: yen956    時間: 2015-12-6 17:58

本帖最後由 yen956 於 2015-12-6 18:02 編輯

謝謝c大詳細的圖解,
難怪我的監看視窗一片空白, 謝謝!!
作者: c_c_lai    時間: 2015-12-6 17:59

回復  c_c_lai
謝謝c大的指導, 了解了!!
yen956 發表於 2015-12-6 17:55

#8 是不是給你解答了?
作者: yen956    時間: 2015-12-6 18:21

回復 11# c_c_lai
謝謝c大再三指導,
本以為應可以試出來,
結果還在試!?
(只出來一列, 但Rng已會一直變, 不會向下展開,
應該也可以監看想要看的, 謝謝!!)
作者: c_c_lai    時間: 2015-12-6 18:55

本帖最後由 c_c_lai 於 2015-12-6 18:57 編輯

回復 12# yen956
你可以一口氣連續 (點選欲偵測變數貨運算式(滑鼠右鍵)
->輸入運算式或欲檢測變數->按確認)
或分次輸入你要偵測的變數,或判斷,例如:
Asc(Mid(Rng, 1, 1))   '  檢查第一個字元值為何
Asc(Mid(Rng, 2, 1))   '  檢查第二個字元值為何
Asc(Mid(Rng, 3, 1))   '  檢查第三個字元值為何
Asc(Mid(Rng, 4, 1))   '  檢查第四個字元值為何
Asc(Mid(Rng, 5, 1))   '  檢查第五個字元值為何
Rng                               '  檢查 Rng 目前值為何
Mid(Rng, 4, 1)             '  檢查第四個字元為何
.
.
等等多項運算式監測。
作者: yen956    時間: 2015-12-6 19:30

本帖最後由 yen956 於 2015-12-6 19:33 編輯

回復 13# c_c_lai
謝謝再三指導,
終於試出來了,
1. 勾選監視窗
2. 偵錯→新增監看式
3. 輸入運算式或欲檢測變數->按確認
4. F8
真心感謝c大大, thanks a lot!
作者: paddyliu    時間: 2015-12-7 00:05

請問是否要先把A欄選出來?若停留在其它儲存格執行VBA好像還是無法清除看不見的空格
作者: c_c_lai    時間: 2015-12-7 10:05

本帖最後由 c_c_lai 於 2015-12-7 10:54 編輯

回復 15# paddyliu
[attach]22731[/attach]
[attach]22735[/attach]
作者: c_c_lai    時間: 2015-12-7 10:48

本帖最後由 c_c_lai 於 2015-12-7 18:24 編輯

回復 15# paddyliu
另外,可以不用人工框選:
  1. Sub 刪除空格2()
  2.     Dim Rng As Range
  3.    
  4.     For Each Rng In sheet1.UsedRange
  5.         Rng = Trim(Application.Clean(Rng))
  6.     Next
  7. End Sub
  8. [attach]22743[/attach]
複製代碼
[attach]22734[/attach]




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