Board logo

標題: 尋找&取代 [打印本頁]

作者: mmggmm    時間: 2012-4-27 19:34     標題: 尋找&取代

各位:以下我用錄制的巨集,請問如何簡單一點,謝謝.

Sub 取代()
    ActiveSheet.UsedRange

    Selection.Replace What:="700", Replacement:="J07", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="1500", Replacement:="J15", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="1100", Replacement:="J11", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Selection.Replace What:="2300", Replacement:="J23", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
  
End Sub
作者: register313    時間: 2012-4-27 19:48

本帖最後由 register313 於 2012-4-27 20:18 編輯

回復 1# mmggmm
  1. Sub 取代()
  2. Set Rng = ActiveSheet.UsedRange
  3. S = Array(700, 1100, 1500, 2300)
  4. R = Array("J07", "J11", "J15", "J23")
  5. For I = 0 To UBound(S)
  6.   Rng.Replace S(I), R(I)
  7. Next I
  8. End Sub
複製代碼
  1. Sub 取代()
  2. Set Rng = ActiveSheet.UsedRange
  3. S = Array(700, 1100, 1500, 2300)
  4. For I = 0 To UBound(S)
  5.   Rng.Replace S(I), Application.Text(S(I) / 100, "J00")
  6. Next I
  7. End Sub
複製代碼

作者: c_c_lai    時間: 2012-4-28 08:09

回復 2# register313
請問您為何用 Rng.Replace S(I), Application.Text(S(I) / 100, "J00") 的方式處理?
它與下列處理方式,差別在於一個以陣列、一個以直接替換的方式做異動。
R = Array("J07", "J11", "J15", "J23")
Rng.Replace S(I), R(I)
但我好奇的是 Application.Text(S(I) / 100, "J00") 是如何運作的?
謝謝您!
作者: register313    時間: 2012-4-28 10:06

回復 3# c_c_lai

         Application.Text(S(I) / 100, "J00")   設定S(I) / 100之格式為J00
亦可用         Format(S(I) / 100, "J00")   設定S(I) / 100之格式為J00

I=0時,S(I)=700,Format(S(I) / 100, "J00") =Format(7, "J00") =J07
I=1時,S(I)=1100,Format(S(I) / 100, "J00") =Format(11, "J00") =J11
I=2時,S(I)=1500,Format(S(I) / 100, "J00") =Format(15, "J00") =J15
I=3時,S(I)=2300,Format(S(I) / 100, "J00") =Format(23, "J00") =J23
作者: c_c_lai    時間: 2012-4-28 10:36

回復 4# register313
我用了     Range("D5").Value = Format(11, "J00") 來做測試,竟然答案會是 J11,
Amazing!  
Thanks a lot.
作者: mmggmm    時間: 2012-4-29 14:23

原錄制巨集只取代選擇範圍內的資料
而執大大提供的後則取代了全部資料,不知那裡有問題.
作者: register313    時間: 2012-4-29 14:39

回復 6# mmggmm
  1. Sub 取代()
  2. Set Rng = Selection
  3. S = Array(700, 1100, 1500, 2300)
  4. R = Array("J07", "J11", "J15", "J23")
  5. For I = 0 To UBound(S)
  6.   Rng.Replace S(I), R(I)
  7. Next I
  8. End Sub
複製代碼
  1. Sub 取代()
  2. Set Rng = Selection
  3. S = Array(700, 1100, 1500, 2300)
  4. For I = 0 To UBound(S)
  5.   Rng.Replace S(I), Application.Text(S(I) / 100, "J00")
  6. Next I
  7. End Sub
複製代碼

作者: GBKEE    時間: 2012-4-29 14:45

本帖最後由 GBKEE 於 2012-4-29 14:48 編輯

回復 6# mmggmm
Rng.Replace S(I), R(I)    沒指明 LookAt := xlWhole 或 LookAt :=  xlPart
會依上次的 LookAt  
vba 的 說明
Replace 方法
Range 物件時用 Replace 方法。
傳回 Boolean 值,此值表示指定範圍內儲存格中的字元。使用此方法不會變更選定範圍和目前儲存格。
expression.Replace(What, Replacement, LookAt, SearchOrder, MatchCase, MatchByte, SearchFormat, ReplaceFormat)
以下是參數的說明
What     必選的 Variant。您要 Microsoft Excel 尋找的字串。
Replacement     必選的 Variant。要置換的字串。
LookAt      選擇性的 Variant。可為下列 XlLookAt 常數之一:xlWhole 或 xlPart。
SearchOrder      選擇性的 Variant。可為下列 XlSearchOrder 常數之一:xlByRows 或 xlByColumns。
MatchCase     選擇性的 Variant。若指定為 True,則搜尋時大小寫視為相異。
MatchByte     選擇性的 Variant。如果在 Microsoft Excel 中選擇或安裝二位元語言支援,您僅可以使用此引數。若指定為 True,就使雙位元組字元僅符合雙位元組字元。若指定為 False,則雙位元組字元可符合其等價的單位元組字元。
SearchFormat     選擇性的 Variant。方法的搜尋格式。
ReplaceFormat     選擇性的 Variant。方法的取代格式。
你用錄製可查看 參數的變化
LookAt := xlWhole  如圖 所勾選的 選項
LookAt :=  xlPart      圖中 所勾選的 選項會取消

[attach]10737[/attach]
作者: mmggmm    時間: 2012-4-29 14:59

謝謝各位的詳細說明




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