返回列表 上一主題 發帖

[發問] VBA TXT 依照段落開啟需求

[發問] VBA TXT 依照段落開啟需求

原TXT開啟後只能依照檔案內TXT檔一次開啟,如第3列所產生的結果
目前需求:&、%、$ 為各一個段落,段落格數為固定的,檔案開啟後依照個段落的特別符號去分類,如第4列所產生的結果


請各位高手幫忙,拜託

VBA TXT 依照段落開啟需求.rar (19.33 KB)

Sub TEST()
Dim xPath$, xF$, xS As Worksheet, xEnd As Range, xR As Range, TT, T, N$, C%
xPath = ThisWorkbook.Path & "\"
Set xS = ThisWorkbook.Sheets("工作表1")
Do
 If xF = "" Then xF = Dir(xPath & "*.txt") Else xF = Dir
 If xF = "" Then Exit Do
 If Not xS.[A:A].Find(xF, LookAT:=xlWhole) Is Nothing Then GoTo 101
 Set xEnd = xS.Cells(Rows.Count, 1).End(xlUp)(2)
 If xEnd.Row < 3 Then Set xEnd = xS.[A3]
 xEnd = xF
 
 Open xPath & xF For Input Access Read As #1
 Do Until EOF(1)
  Line Input #1, T
  N = Switch(T = "&", "B", T = "%", "M", T = "$", "AC", T = T, "")
  '_T="&",取B欄,類推~~;找不到"&%$",N為空值 
  If N <> "" Then Set xR = xEnd(1, N):  C = 0
  '_找到"&%$"後,以xR定位為各分類的首格
  For Each TT In Split(T, " ")
    C = C + 1:  xR(1, C) = TT
  Next
 Loop
 Close #1
101: Loop
End Sub
 
 
大致如上,其他細節請自行更改或調整~~

TOP

本帖最後由 准提部林 於 2015-10-28 11:25 編輯

N = Switch(T = "&", "B", T = "%", "M", T = "$", "AC", T = T, "")
也可用:
N = Array("", "", "B", "M", "AC")(InStr("_&%$", T))
_InStr 值只有0,1,2,3,4 五種結果 

"_&%$" 前面加"_",是為防止T是空格時的誤判(與FIND函數一樣,結果為1)
可測試 MsgBox InStr("&%$", "")

Array 前面兩個空字符,即是在T為空值(InStr值為1)或找不到文字時(InStr值為0),以空字符顯示

TOP

回復 3# 准提部林

感謝 准大 果然厲害
但請問
If Not xS.[A:A].Find(xF, LookAT:=xlWhole) Is Nothing Then GoTo 101
 Set xEnd = xS.Cells(Rows.Count, 1).End(xlUp)(2)
 If xEnd.Row < 3 Then Set xEnd = xS.[A3]
 xEnd = xF
- - - - - -
For Each TT In Split(T, " ")
    C = C + 1:  xR(1, C) = TT
  Next
個別是什麼意思? 使用說明看不太懂
能請准大為小弟稍微解釋一下嗎 謝謝

TOP

回復 4# Jason80Lo

If Not xS.[A:A].Find(xF, LookAT:=xlWhole) Is Nothing Then GoTo 101
_如果文字檔名稱已存在,略過 

Set xEnd = xS.Cells(Rows.Count, 1).End(xlUp)(2)
_取得準備填入資料的位置(最後一筆資料的下一格空白格) 

If xEnd.Row < 3 Then Set xEnd = xS.[A3]
_如果這空白格列號小于3,則取A3(防止標題無文字的錯誤) 

xEnd = xF
_第一格填文字檔名 

For Each TT In Split(T, " ")
  C = C + 1:  xR(1, C) = TT
Next
_以空白格剖析文字,再向右逐一填入 

TOP

回復 5# 准提部林


    謝准大 簡單又明瞭 感恩
   小弟研究一下

TOP

請問如果 txt檔中 &, #, %, @ 皆為資料的一個開頭
其中#, % 開頭裡的資料為無限個(而且有時候有有時候沒有),
這樣的話要如何去區分段落呢?
如附件檔案 2, 3列為原本顯示結果
                     6, 7列為希望的結果
請大大協助幫忙

VBA TXT 依照段落開啟需求.rar (24.3 KB)

TOP

回復 7# Jason80Lo


Do Until EOF(1)
  Line Input #1, T
  If T = "&" Then Set xR = xEnd(1, "B"): C = 0
  If (T = "#" Or T = "$") And N = "" Then Set xR = xEnd(1, "M"): C = 0: N = "Y"
  If T = "@" Then Set xR = xEnd(1, "AO"): C = 0
  For Each TT In Split(T, " ")
    C = C + 1:   xR(1, C) = TT
  Next
Loop

TOP

回復 8# 准提部林


    謝謝 准大 小弟 研究研究

TOP

本帖最後由 Jason80Lo 於 2015-11-8 18:30 編輯

回復 8# 准提部林


  If (T = "#" Or T = "$") And N = "" Then Set xR = xEnd(1, "M"): C = 0: N = "Y"
准大請問這行的意思,xEnd(1, "M")裡面的1什麼意思?
小弟試另三個TXT檔,同時開啟後只有第一個能夠順利依照儲存格編排(如下圖)
If (T = "#" Or T = "%") And N = "" Then Set xR = xEnd(1, "FZ"): C = 0: N = "Y"

123.png

TOP

        靜思自在 : 【做人的開始】每一天都是故人的開始,每一個時刻都是自己的警惕。
返回列表 上一主題