Board logo

標題: [發問] 儲存內的 1  一 都輚成半型的1 [打印本頁]

作者: pinklee    時間: 2011-9-20 21:09     標題: 儲存內的 1  一 都輚成半型的1

有4個儲存格分別如下
XX街十二巷一號
XX路12巷1號
XX街十二巷1號
XX路12巷一號

怎麼做到都會轉成

XX路12巷1號

國字 數字全型 都轉成半型的數字呢 感謝您
作者: oobird    時間: 2011-9-20 21:52

Sub yy()
For Each c In ActiveSheet.UsedRange
c.Value = StrConv(c.Value, vbNarrow, LocaleID)
Next
End Sub
作者: pinklee    時間: 2011-9-20 23:12

回復 2# oobird


   謝謝  oobird  但是只有阿拉伯數字全型轉半型耶 一 沒有成 半型的1
十一巷 -> 11巷
程式精簡 佩服!
作者: Hsieh    時間: 2011-9-21 10:44

回復 3# pinklee
國字的數值要轉成數字會有習慣不同的問題
例如:12若是標準應以一十二才能與二十以上文數字配合
若以數字直接編譯則應為一二
要以口語化轉譯似乎有困難
作者: pinklee    時間: 2011-9-21 14:23

回復 4# Hsieh


    說的是  有時也要將就一下習慣  再回頭 把文字上的  一十二  改成  十二  呵呵  官大的人都有不同的想法  謝啦
作者: oobird    時間: 2011-9-21 22:27

難度頗高,例如
二十一 = 21 ~十替換為空
十五 = 15 ~十替換為1
十 = 10 ~十替換為10
作者: pinklee    時間: 2011-9-22 15:48

XX街二十二巷1號
XX街一十二巷一十號
XX路12巷1號
XX街一十二巷1號
XX路12巷二一號
XX街一十巷1號
XX街一十巷1號

用了各位先進指教的 亂做了一下下
Sub ttt()
Dim a, b As String

For Each C In ActiveSheet.UsedRange
C.Value = StrConv(C.Value, vbNarrow, LocaleID)
Next

For i = 1 To 10 Step 1
a = "一二三四五六七八九十"
b = "123456789十"
Cells.Replace Mid(a, i, 1), Mid(b, i, 1)
Next

a = "十巷十弄十號"
b = "0巷0弄0號"
For i = 1 To 6 Step 2
Cells.Replace Mid(a, i, 2), Mid(b, i, 2)
Next

a = "十"
b = ""
For i = 1 To 1
Cells.Replace Mid(a, i, 1), Mid(b, i, 1)
Next
End Sub

結果如下
XX街22巷1號
XX街12巷10號
XX路12巷1號
XX街12巷1號
XX路12巷21號
XX街10巷1號
XX街10巷1號
似乎可行
作者: Hsieh    時間: 2011-9-22 18:06

回復 7# pinklee


    如果國數字的寫法與格式DBNum1相同可試試
預設最大數字為2000(因為號碼有超過1000號的地址)
可自行設定
  1. Sub nn()
  2. Dim C As Range
  3. For i = 2000 To 1 Step -1
  4. k = Application.Text(i, "[DBNum1]")
  5.   Cells.Replace k, i
  6. Next
  7. For Each C In ActiveSheet.UsedRange
  8. C.Value = StrConv(C.Value, vbNarrow, LocaleID)
  9. Next
  10. End Sub
複製代碼

作者: pinklee    時間: 2011-9-22 18:49

回復 8# Hsieh


    高手出招 的確不凡 簡潔
測了一下 如果是十二巷 不是一十二巷 無法轉換十 會轉成

XX街十二巷1號 ->XX街十2巷1號
謝了
作者: Hsieh    時間: 2011-9-22 22:24

本帖最後由 Hsieh 於 2011-9-22 22:27 編輯

回復 9# pinklee

不是說了要以DBNUM1格式為前提嗎?
若有兩種可能
如:12=> 一十二
    或十二
    或一二
  1. Sub nn()
  2. Dim C As Range
  3. With ActiveSheet.UsedRange
  4. For i = 200 To 1 Step -1
  5. k = Application.Text(i, "[DBNum1]")
  6. m = Application.Text(i, "[DBNum1]0")
  7.   .Cells.Replace m, i
  8.   .Cells.Replace k, i
  9.   If Int(i / 10) = 1 Then .Cells.Replace Mid(k, 2), i
  10. Next
  11. For Each C In .Cells
  12. C.Value = StrConv(C.Value, vbNarrow, LocaleID)
  13. Next
  14. End With
  15. End Sub
複製代碼

作者: pinklee    時間: 2011-9-23 07:58

回復 10# Hsieh


    拍勢 拍勢 一時沒注意到 感謝啦




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