彰化一整天的論壇

 找回密碼
 立即註冊
查看: 3252|回復: 7

在Excel中快速分割字串-固定長度

[複製鏈接]
發表於 2013-10-29 15:47:52 | 顯示全部樓層 |閱讀模式
本帖最後由 imingho 於 2014-3-7 16:55 編輯

一般在做資料交換格式(固定大小),都會給一張規則表例如
欄位形態長度
學年數字 3
學期數字 1
學號文字 10
電話文字15
但是Excel固定切割字串要自己手動去切換,因此寫了這一支自動分割字串上面這個範例的設定就是3;3;@10;@15,在數字前面加@表示這個欄位要用文字顯示,否則開頭為0的學號或電話,在Excel會不見。

檔案名稱:splitstring_adv.xls

2014/3/7 加入分割方向

免費下載:http://bestdaylong.com/download.php?id=32


splitstring_01.png

1.處理前的資料

splitstring_02.png

2.設定您要切割的規則,中間用分號間隔,如果該欄位在Excel中要用文字方式顯示,請在數字前面加@

splitstring_03.png

3.切割還原的資料

splitstring_adv.xls

47.5 KB, 下載次數: 7

售價: 3 金錢  [記錄]

splitstring_adv.xls

回復

使用道具 舉報

發表於 2013-10-29 17:45:35 | 顯示全部樓層
您好... 剛剛有操作
使用:11110009-1021024H.txt貼到EXCEL處理前,
處理後如公司或是品名是固定長度 則OK
如遇到 長短不同
假設:
北竿貨食品淨重111g     
北竿貨食品 淨重111g
切下去 就會異常...
分割長度
欄位設定需要空格長度 是否我使用上有誤...
10;@4;13;5;40;20;16;80;8;8;8;8;8;8;8;8;8;8
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2013-10-29 20:16:51 | 顯示全部樓層
hui1314 發表於 2013-10-29 17:45
您好... 剛剛有操作
使用:11110009-1021024H.txt貼到EXCEL處理前,
處理後如公司或是品名是固定長度 則OK

抱歉,我忘了考慮到中文字的問題,
檔案己修正,麻煩您重新下載
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2013-10-29 20:23:25 | 顯示全部樓層
2013/10/29程式碼

  1. Private Sub cmdClear_Click()
  2.     Sheet2.Cells.Clear
  3. End Sub


  4. Private Sub cmdSplit_Click()
  5.     Dim i, j As Double
  6.     Dim first, last As String
  7.     Dim start As Integer
  8.    
  9.    
  10.    
  11.     Sheet2.Activate
  12.     n = Selection.SpecialCells(xlCellTypeLastCell).Row
  13.    
  14.     Sheet1.Activate
  15.    
  16.     strWidth = Range("b1")
  17.     strWidths = Split(strWidth, ";")

  18.       
  19.     Sheet3.Cells.Clear
  20.    
  21.    
  22.     For i = 1 To n
  23.         temp = Sheet2.Cells(i, 1)
  24.                
  25.         start = 1
  26.         For j = 0 To UBound(strWidths)
  27.                 temp1 = strWidths(j)
  28.                 If Left(temp1, 1) = "@" Then
  29.                     Sheet3.Cells(i, j + 1).NumberFormat = "@"
  30.                     temp1 = Mid(temp1, 2)
  31.                 End If
  32.                 Sheet3.Cells(i, j + 1) = Trim(SubStr(temp, start, temp1))
  33.                 start = start + temp1
  34.         Next
  35.       
  36.         DoEvents
  37.         
  38.         Sheet1.Range("b2") = i / n
  39.     Next
  40.    
  41.     MsgBox "處理完畢!!,請切換到活頁[處理後]查看結果", vbOKOnly, "彰化一整天的blog(http://272586.blogspot.com/)"

  42. End Sub
  43. Public Function SubStr(ByVal tstr As String, start As Integer, Optional leng As Variant) As String
  44.     Dim tmpstr  As String, len5 As Integer
  45.     If IsMissing(leng) Then
  46.        tmpstr = StrConv(MidB(StrConv(tstr, vbFromUnicode), start), vbUnicode)
  47.     Else
  48.        If leng > 0 Then
  49.           tmpstr = StrConv(MidB(StrConv(tstr, vbFromUnicode), start, leng), vbUnicode)
  50.        Else
  51.           SubStr = ""
  52.           Exit Function
  53.        End If
  54.     End If
  55.     len5 = Len(tmpstr)
  56.     If len5 >= 1 Then
  57.        If Asc(Mid(tmpstr, len5, 1)) = 0 Then
  58.           SubStr = Mid(tmpstr, 1, len5 - 1)
  59.        Else
  60.           SubStr = tmpstr
  61.        End If
  62.     Else
  63.        SubStr = ""
  64.     End If
  65. End Function
複製代碼



回復 支持 反對

使用道具 舉報

發表於 2013-10-29 21:08:49 | 顯示全部樓層
太棒了^^~ 文字問題解決了~ 真的很感謝您
回復 支持 反對

使用道具 舉報

發表於 2013-11-15 12:54:48 | 顯示全部樓層
太棒了^^~ 文字問題解決了~ 真的很感謝您
回復 支持 反對

使用道具 舉報

發表於 2014-3-7 10:50:00 | 顯示全部樓層
您好,想請問一下
我發生同樣的問題
但是我的資料想從右至左切割
這樣應該如何修改呢?
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2014-3-7 16:59:27 | 顯示全部樓層
densemist 發表於 2014-3-7 10:50
您好,想請問一下
我發生同樣的問題
但是我的資料想從右至左切割

我加上"加入分割方向",您看看是不是您要的功能。
splitstring_03.png

1.加上"加入分割方向"功能畫面

splitstring_02.png

2.由右到左的結果



splitstring_01.png

3.由左到右的結果

回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

 ㄚ母滴雞湯
 員林香純滴雞精

Archiver|手機版|小黑屋|彰化一整天的論壇(Excel,Office)  |网站地图

GMT+8, 2019-9-19 12:12 , Processed in 0.129049 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表