Board logo

標題: 使用程式將記事本內容整理資料 [打印本頁]

作者: jntseng    時間: 2010-10-2 22:17     標題: 使用程式將記事本內容整理資料

請問各位前輩,我要如何寫VBA將記事本內的紅色框線整理成上面格式所示 (詳細說明如圖所示,相關記事本如附件所示)
作者: Hsieh    時間: 2010-10-2 23:46

  1. Sub Ex()
  2. Dim ay(9), Ary()
  3. fs = ThisWorkbook.Path & "\txt.txt"
  4. Open fs For Input As #1
  5. Do While Not EOF(1)
  6.    Line Input #1, mystr
  7.       If mystr = "#" Then tn = True: tk = False: GoTo 10
  8.       If tn = True And Not IsNumeric(Split(mystr, " ")(0)) Then ty = Split(mystr, " ")(0): tn = False: GoTo 10
  9.       If mystr = "%" Then tn = False: tk = True: GoTo 10
  10.       If tn = False And tk = True And Val(mystr) <> 0 Then
  11.          ar = Split(mystr, " ")
  12.          ay(0) = ty & ar(0)
  13.          For i = 1 To UBound(ar)
  14.             If ar(i) <> "" Then
  15.                j = j + 1
  16.                ay(j) = ar(i)
  17.             End If
  18.          Next
  19.          ReDim Preserve Ary(s)
  20.          Ary(s) = ay
  21.          s = s + 1: j = 0
  22.        End If
  23. 10
  24. Loop
  25. Close #1
  26. [A2].Resize(s, 9) = Application.Transpose(Application.Transpose(Ary))
  27. 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/)