標題:
使用程式將記事本內容整理資料
[打印本頁]
作者:
jntseng
時間:
2010-10-2 22:17
標題:
使用程式將記事本內容整理資料
請問各位前輩,我要如何寫VBA將記事本內的紅色框線整理成上面格式所示 (詳細說明如圖所示,相關記事本如附件所示)
作者:
Hsieh
時間:
2010-10-2 23:46
Sub Ex()
Dim ay(9), Ary()
fs = ThisWorkbook.Path & "\txt.txt"
Open fs For Input As #1
Do While Not EOF(1)
Line Input #1, mystr
If mystr = "#" Then tn = True: tk = False: GoTo 10
If tn = True And Not IsNumeric(Split(mystr, " ")(0)) Then ty = Split(mystr, " ")(0): tn = False: GoTo 10
If mystr = "%" Then tn = False: tk = True: GoTo 10
If tn = False And tk = True And Val(mystr) <> 0 Then
ar = Split(mystr, " ")
ay(0) = ty & ar(0)
For i = 1 To UBound(ar)
If ar(i) <> "" Then
j = j + 1
ay(j) = ar(i)
End If
Next
ReDim Preserve Ary(s)
Ary(s) = ay
s = s + 1: j = 0
End If
10
Loop
Close #1
[A2].Resize(s, 9) = Application.Transpose(Application.Transpose(Ary))
End Sub
複製代碼
作者:
jntseng
時間:
2010-10-3 21:12
回復
2#
Hsieh
謝謝版主回覆,測試結果可用,但對程式碼有下面幾點想請教:
[1] tn,tk 代表的是什麼呢? 由程式碼推斷為true 與false 兩種,他在記事本內 所代表的意義是什麼呢?
[2] 程式碼內: If tn = True And Not IsNumeric(Split(mystr, " ")(0)) 所要表達的意識是否為 將mystr 有空格的地方做擷取的動作,但 IsNumeric(Split(mystr, " ")(0))中(0) 所代表的意思是什麼呢?
作者:
GBKEE
時間:
2010-10-4 06:49
回復
3#
jntseng
tn,tk 在記事本內 中並沒有意義 是程式以變數的true 或 false 作為運行的條件判斷
Split
為傳回一個陳列索引從零開始的一維陣列
Split
(mystr, " ") =>在mystr字串變數以
" "
作為分隔符號 的一維陣列
Split
(mystr, " ")(
0
) =>
0
此一維陣列的第 一個元素 以此類推
Not IsNumeric(Split(mystr, " ")(0)) =>傳回第 一個元素是否為字串
作者:
jntseng
時間:
2010-10-4 22:55
回復
4#
GBKEE
謝謝版主的回覆,對於tn,tk 還是不瞭解,我想以另外一個角度問,若程式碼沒有tn,tk的話,執行會有問題嗎? 若是會有問題的話,問題點在哪呢?
作者:
Hsieh
時間:
2010-10-4 23:47
tn,tk此2變數是用來做截取資料開始及片段結束依據
可由If mystr = "#" Then tn = True: tk = False: GoTo 10
這行就是#那一行被讀入時,用tn告訴程式下一行開始就是資料抬頭區域
If mystr = "%" Then tn = False: tk = True
就是明細的開始
沒這2個變數當然執行不來囉
作者:
jntseng
時間:
2010-10-5 00:24
回復
6#
Hsieh
謝謝版主的回覆,對於你的回覆,有些不懂,
當tn=true,tk=false 表示資料抬頭區域,指的是什麼? 是否可以筆記本的內容說明呢
當tn=false,tk=true 表示資料明細的開始,指的是什麼?是否可以筆記本的內容說明呢
會不會有tn=true,tk=true or tn=false,tk=false 呢? 代表的是什麼呢?
作者:
Hsieh
時間:
2010-10-5 09:51
就因為tn,tk的組合狀況會有多種組合,所以能用來做為資料擷取的開始與結束判斷依據
遇到#的下一行文字T409P086AA01就是id號碼的前置字串
有了id號碼的前置字串後若遇到該行為%接下來的各行前面是數字時
則該數字與id號碼的前置字串的組合就是整組id碼
直到在次遇到#才再重新取得id號碼的前置字串
作者:
jntseng
時間:
2010-10-5 23:50
回復
8#
Hsieh
謝謝版主的解釋,我是不是可以解釋為#~%之間表示TN=true,tk=flase
%~#之間表示TN=flase,tk=true呢?
作者:
Hsieh
時間:
2010-10-6 00:10
那個判斷式後面是我們要指定變數的值是甚麼?
而不是取得那時的變數是甚麼值
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)