標題:
[發問]
如何將特定幾行內容轉成欄位重複
[打印本頁]
作者:
朱子
時間:
2020-2-14 17:46
標題:
如何將特定幾行內容轉成欄位重複
我有一個純文字檔,檔案格式如下圖
[attach]31713[/attach]
請問我要如何寫VBA程式,可以把標準別那一行,轉成單欄儲存。
格式如下
[attach]31714[/attach]
因為分類太多,希望能寫VBA程式幫忙解決
檔案連結如下
[attach]31715[/attach]
作者:
准提部林
時間:
2020-2-15 13:19
Sub 匯入()
Dim xFile$, TxtStr$, T$, TR, Arr, i&, N&
Intersect(ActiveSheet.UsedRange, [A:G]).Offset(1, 0).EntireRow.Delete
xFile = ThisWorkbook.Path & "\date.txt"
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.LoadFromFile xFile
TxtStr = .ReadText
.Close
End With
TR = Split(TxtStr, vbCrLf)
ReDim Arr(1 To UBound(TR), 1 To 7)
For i = 0 To UBound(TR)
If Len(TR(i)) < 2 Then GoTo 101
If Left(TR(i), 6) = "標 準 別:" Then T = Mid(TR(i), 7): GoTo 101
If T = "" Then GoTo 101
N = N + 1
Arr(N, 1) = T '標準別
Arr(N, 2) = Trim(Evaluate("MidB(""" & TR(i) & """, 1, 10)")) '處置代碼
Arr(N, 3) = Trim(Evaluate("MidB(""" & TR(i) & """, 11, 30)")) '處置名稱
Arr(N, 4) = Trim(Evaluate("MidB(""" & TR(i) & """, 41, 10)")) '成本中心
Arr(N, 5) = Trim(Evaluate("MidB(""" & TR(i) & """, 51, 10)")) '處置類別
Arr(N, 6) = Trim(Evaluate("MidB(""" & TR(i) & """, 61, 10)")) '健保單價
Arr(N, 7) = Trim(Evaluate("MidB(""" & TR(i) & """, 71, 10)")) '自費單價
101: Next i
If N > 0 Then [A2].Resize(N, 7) = Arr
End Sub
測試檔:
[attach]31721[/attach]
======================================
作者:
朱子
時間:
2020-2-17 15:27
回復
2#
准提部林
很感謝您幫忙我解決問題,但是我的資料筆數很多,之前放在網路的檔案是精簡版,實際上我有近3000筆資料要轉換
我發現我無法用該程式碼轉換近3000筆資料,VBA一直出現如下圖錯誤訊息
[attach]31732[/attach]
我看不出來要怎樣修正程式碼才能正確匯入
重新附上新的檔案,裡面有300筆資訊
[attach]31733[/attach]
作者:
朱子
時間:
2020-2-17 15:28
回復
2#
准提部林
很感謝您幫忙我解決問題,但是我的資料筆數很多,之前放在網路的檔案是精簡版,實際上我有近3000筆資料要轉換
我發現我無法用該程式碼轉換近3000筆資料,VBA一直出現如下圖錯誤訊息
[attach]31732[/attach]
我看不出來要怎樣修正程式碼才能正確匯入
重新附上新的檔案,裡面有300筆資訊
[attach]31733[/attach]
作者:
准提部林
時間:
2020-2-18 14:57
回復
3#
朱子
Sub 匯入()
Dim xFile$, TxtStr$, T$, TR, Arr, i&, N&
Intersect(ActiveSheet.UsedRange, [A:G]).Offset(1, 0).EntireRow.Delete
xFile = ThisWorkbook.Path & "\data2.txt"
With CreateObject("ADODB.Stream")
.Charset = "UTF-8"
.Open
.LoadFromFile xFile
TxtStr = .ReadText
.Close
End With
TR = Split(TxtStr, vbCrLf)
ReDim Arr(1 To UBound(TR), 1 To 7)
For i = 0 To UBound(TR)
If Len(TR(i)) < 2 Then GoTo 101
If Left(TR(i), 6) = "標 準 別:" Then T = Mid(TR(i), 7): GoTo 101
If T = "" Then GoTo 101
N = N + 1
TR(i) = Replace(TR(i), """", "|")
Arr(N, 1) = T '標準別
Arr(N, 2) = Trim(Evaluate("MidB(""" & TR(i) & """, 1, 10)")) '處置代碼
Arr(N, 3) = Replace(Trim(Evaluate("MidB(""" & TR(i) & """, 11, 30)")), "|", """") '處置名稱
Arr(N, 4) = Trim(Evaluate("MidB(""" & TR(i) & """, 41, 10)")) '成本中心
Arr(N, 5) = Trim(Evaluate("MidB(""" & TR(i) & """, 51, 10)")) '處置類別
Arr(N, 6) = Trim(Evaluate("MidB(""" & TR(i) & """, 61, 10)")) '健保單價
Arr(N, 7) = Trim(Evaluate("MidB(""" & TR(i) & """, 71, 10)")) '自費單價
101: Next i
If N > 0 Then [A2].Resize(N, 7) = Arr
End Sub
'===============================
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)