返回列表 上一主題 發帖

[發問] 數字與數字中如果有空格 要如何取代或刪除呢?

[發問] 數字與數字中如果有空格 要如何取代或刪除呢?

想請問各位大大
EXCEL中 數字與數字中如果有空格 要如何取代或刪除呢?

1.無法直接使用空格( )取代 因為會有一些出現空格是為分段出數字的數值

2.無法使用(? ?)取代成(??) 因為?是兩個位數的取代方法 影響
  同上?的取代情況 (? )或( ?)也不可以使用

3.也有想過用九十九次的取代方法 (1 1) 取代成(11) 也是後段數值無法使用


發生這樣的情況
空格只會出現在數字的倒數第二個位置 例如 1,00 0(正確為1,000)
但"數值"之間也是會有空格的存在 例如 1,000 5 1,000,000(數值區段可能有很多)
(每段數值可能有個位數1 百位數100  千位數1,000  萬位數10,000 更多都會出現)

如有VBA的方式可以處理 是最好  

如有表達不清楚 深感抱歉
歡迎大大的指教   先感謝  再感謝

全部範本檔案 20160828數字中間空格問題.rar (503.93 KB)

20160828數字中間空格問題.rar (503.93 KB)

lo

回復 1# tr24572411

TOP

回復 1# tr24572411
Sub Ex()
    With Sheets("Sheet2")
        For i = 1 To .Range("A" & Rows.Count).End(xlUp).Row
            '  .Cells(i, 6) = Trim(.Cells(i, 1)) = Trim(.Cells(i, 2))   '  字串中之 Space 無法移除
            .Cells(i, 7) = Replace(.Cells(i, 1), " ", "") = Replace(.Cells(i, 2), " ", "")
        Next
    End With
End Sub

TOP

看起來都是千分位後面的三位數字多一個空白字元,
自訂函數:
  1. Function ClearSpace(xStr$) As String
  2. Dim TT, i%
  3. TT = Split(Replace(xStr, ",", "_,"), "_")
  4. For i = 0 To UBound(TT)
  5.     If TT(i) Like ",[0-9][0-9] [0-9]*" Then
  6.        TT(i) = Replace(TT(i), " ", "", 1, 1)
  7.     End If
  8. Next
  9. ClearSpace = Join(TT, "")
  10. End Function
複製代碼
Xl0000109.rar (40.52 KB)

公式:=ClearSpace(A2)
 
 

TOP

看起來都是千分位後面的三位數字多一個空白字元,
自訂函數:

公式:=ClearSpace(A2)
 
 
准提部林 發表於 2016-8-29 11:43



    看來版大好像是使用正則表達式來解決這個問題,很利害!而且不需要使用CreateObject("VBScript.RegExp")感覺更方便。
正則表達式(http://regexr.com/)好像很困難,我看了很多東西也不了解,下面有一題目,可以請版大幫助指教嗎?

我想找出這種句型的字串,首1/2個字為數字,之後可能是「) 」、「. 」的分格符號和一空白字元,之後是中文字。例如:
-----------------------
符合
1) 陳大文
32. 注意事項

不符合
123) 其他
雜項
----------------
能夠用正則表達式處理嗎?現在我只能用for loop ,再用asc,很慢......

TOP

回復 5# 小俠客

4樓用的只是很普通的判斷式, 與正則無關, 尚且我對正則並無研究!!!

取文字的問題, 須先看完整的文字, 而非片段, 否則不管用正則或其它方法, 都可能出錯!

最好附上最完整的內容及需求, 能模擬結果更好!

TOP

回復 5# 小俠客
參考吧
  1. Sub Test()
  2.     Dim x, oRegexp As Object: Set oRegexp = CreateObject("vbscript.regexp")
  3.     With oRegexp
  4.         .Pattern = "^\d{1,2}[)\.]\s.*"
  5.         
  6.         For Each x In Array("1) 陳大文", "32. 注意事項", "123) 其他")
  7.             Debug.Print x, .Test(x)
  8.         Next
  9.     End With
  10. End Sub
複製代碼
1) 陳大文   True
32. 注意事項 True
123) 其他   False
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

回復 6# 准提部林


    對不起,我理解錯了,我還以為是regular expression。
因為我需要在數萬篇文章中找出小段落的開端,而文章的格式並不相同,所以我需要以較有效的方法找出小標題,然後加上數項驗證以確認這是我需要的段茖。
暫時我觀察了數百篇文章後,暫時我發現到的模式是:
1) 以一個或兩個數字作開始
2) 數字後會以「)」、「.」作分隔(有時候是沒有)
3) 之後包含了一空格
4) 小段落的標題(正體中文)

其實上面的已經是例子,不過可能太少,我要點時間再整理吧。

TOP

本帖最後由 小俠客 於 2016-9-2 10:37 編輯
回復  小俠客
參考吧1) 陳大文   True
32. 注意事項 True
123) 其他   False
stillfish00 發表於 2016-9-1 16:13


我發現到的文字模式是:
1) 以一個或兩個數字作開始
2) 數字後會以「)」、「.」作分隔(有時候是沒有)
3) 之後包含了一空格
4) 小段落的標題(正體中文)
  1.     "^\d{1,2}[)\.]\s.*"
複製代碼
\d =數字,如果要包含中國數字,是不是[0-9一二三四五六七八九十]
{1,2} = 首一至二字
[)\.] = 數字後是「)」、「.」,少數情況是:「12 天氣情況」,數字後只有一空格然後是標題,是不是改成
  1. [)\.\s]
複製代碼
,但這樣會和後面的\s相沖,而令程式以為要有兩空格
* = 萬用碼

如果要符合我的要求,是不是改成
  1. ^[0-9一二三四五六七八九十]{1,2}[)\.\s]\s.*"
複製代碼

TOP

回復 9# 小俠客
^ = 匹配字串開頭
\d{1,2} = 是指前面的 \d出現一次到兩次
        另外常用簡化寫法
        \d? = \d{0,1}
        \d+ = \d{1,}
        \d* = \d{0,}

[)\.] = 是「)」或是「.」單一字元
        如果這個字元的匹配可有可無(出現0次到1次),
        可以在後面加問號
        [)\.]? = [)\.]{0,1}

最後的 .*
    .才是表示任意字元  *表示出現0次到任意多次
    我沒有特別去匹配中文字,要匹配正體中文應該是[\u4e00-\u90a5]

若依你的條件:
1) 以一個或兩個數字作開始,包含中國數字一二三四五六七八九十
2) 數字後會以「)」、「.」作分隔(有時候是沒有)
3) 之後包含了一空格 (必定一空格)
4) 之後接正體中文 (假設至少一中文字)

可寫成
^[0-9一二三四五六七八九十]{1,2}[)\.]?\s[\u4e00-\u90a5]+"
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

        靜思自在 : 能付出愛心就是福,能消除煩惱就是慧。
返回列表 上一主題