Board logo

標題: [發問] 各位好,我想請問一個資料剖析的問題 [打印本頁]

作者: ss961471    時間: 2013-4-18 11:42     標題: 各位好,我想請問一個資料剖析的問題

假如我想把一個字串如下
111.222.333.444
個別分開各自一個儲存格,我可以用資料剖析來處理
但有沒有辦法可以用函數來處理?
我想每次將資料貼進A1後,就自動能在B1、C1、D1、E1貼上各自的字串
請問有辦法嗎?
作者: sunnyso    時間: 2013-4-18 12:24

回復 1# ss961471

111.222.333.444
=TRIM(MID(SUBSTITUTE($A1,".",REPT(" ",301)),COLUMN(A1)*301-300,301))
(借用ML089的函數)
作者: die78325    時間: 2013-4-18 12:29

回復 1# ss961471

請開啟隨便EXCEL 點選ALT+F11  開啟巨集編輯程式   再右鍵您所開啟的EXCEL  插入模組 把以下程式碼複製進去
在工作頁內新增一個圖案((隨便看要方形圓形)) 對圖案點右鍵 指定巨集  選擇 "簡單的迴圈剖析"  再把資料丟入A1 再點選圖案  就會執行了
此巨集有迴圈設計  所以你可以貼多筆資料 A1 A2 A3 A4 A5  但A1一定要有資料  否則會以為無資料!  如有問題再發問 感謝您  我也是新手
不知是否有幫上忙~~~
  1. Option Explicit
  2. Sub 簡單的迴圈剖析()
  3. Dim g, i As Long
  4. '偵測A1是否有資料,如無資料則離開
  5. If Range("A1") = "" Then MsgBox "無偵測到任何資料,欲剖析的資料請放入A列": End Sub
  6. '偵測有幾行要剖析  (檔案最後一筆的位置)
  7. g = [a65565].End(xlUp).Row
  8. '開始迴圈
  9.         For i = 1 To g ' 迴圈從第一至最後一筆
  10.             Range("A" & i).Select   '選擇要剖析的儲存格
  11.             ' 開始資料剖析 (以  " . "  來區隔)
  12.             Selection.TextToColumns Destination:=Range("A" & i), DataType:=xlDelimited, _
  13.                 TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
  14.                 Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
  15.                 :=".", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1)), _
  16.                 TrailingMinusNumbers:=True
  17.         Next
  18. '迴圈結束

  19. MsgBox "剖析完成"
  20. End Sub
複製代碼

作者: die78325    時間: 2013-4-18 12:33

回復 2# sunnyso


    函數真是高難度= ="
    密密麻麻的....真想像大大一樣厲害!@@"  雖然是引用別人的 但 能理解也是高手!
作者: amaggie_h    時間: 2013-4-18 18:00

Hi ~ 我有個簡單的方式~ 可以使用MID函數, 先設定好B1=MID($A1,1,3) , C1=MID($A1,5,3), D1=MID($A1,9,3), E1=MID($A1,13,3), 當A1輸入固定字元的字串時, B1~E1就會自動帶出囉^^y
作者: hydraulic    時間: 2013-4-18 22:11

第一種方法:TRIM(MID(SUBSTITUTE($A1,".",REPT(" ",301)),COLUMN(A1)*301-300,301)),不知道甚麼樣的情況會失效喔!
第三種方法:B1=MID($A1,1,3),好像只針對固定字元有效而已若四組數的字元不統一就失效了
作者: sunnyso    時間: 2013-4-19 10:13

回復 6# hydraulic
方法一, 只要A1去掉"." 後的長度不超過301就不會出錯.或者用下列公式. 可以避免

=TRIM(MID(SUBSTITUTE($A1,".",REPT(" ",LEN(SUBSTITUTE($A$1,".","")))),LEN(SUBSTITUTE($A$1,".",""))*(COLUMN(A1)-1)+1, LEN(SUBSTITUTE($A$1,".",""))))
作者: sunnyso    時間: 2013-4-19 11:14

補充經過測試只要去掉點號的字串長度中文boublebyte-963, 英文singlebyte-873
方法一不會出錯
=TRIM(MID(SUBSTITUTE($A1,".",REPT(" ",LEN(SUBSTITUTE($A$1,".","")))),LEN(SUBSTITUTE($A$1,".",""))*(COLUMN(A1)-1)+1, LEN(SUBSTITUTE($A$1,".",""))))
作者: sunnyso    時間: 2013-4-20 01:52

回復 1# ss961471

用以下公式沒有長度限制

=IF(LEN($A$8)-LEN(SUBSTITUTE($A$8,".",""))<COLUMN(A1)-1,"",MID($A$8,FIND(CHAR(1),SUBSTITUTE("." & $A$8&".",".",CHAR(1),COLUMN(A1))),FIND(CHAR(1),SUBSTITUTE("." &$A$8&".",".",CHAR(1),COLUMN(B1)))-FIND(CHAR(1),SUBSTITUTE("." & $A$8&".",".",CHAR(1),COLUMN(A1)))-1))

A8=12131231.123131.312.312.31223.123.12313213.fsdfjlsd.32123123.fsdalfjsf.fsadfjfs.afs.f.fsdfa




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