PDA

View Full Version : ต้องการดึงข้อมูลบางส่วนจาก text file เข้า excel



bassy
19 Jun 2007, 14:06
ซึ่งข้อมูลใน text file จะจัดเรียงอยู่เป็น Ln กับ Col (line,colum) สิ่งที่ผมต้องการคือดึงข้อมูลที่อยู่ในตำแหน่งดังกล่าวและเป็นชุด เช่น ต้องการชุดข้อมูลที่ตำแหน่ง
Ln 9, Col 14 จนถึง Ln 9, Col 18 Ln 9, Col 21 จนถึง Ln 9, Col 25 ........Ln 365, Col 175 ถึง Ln 365, Col 179 เป็นต้น เมื่อก่อนผมเคยลอง coppy มาวางแล้วเปลี่ยน text to colum แต่ข้อมูลที่ได้จะเรียงเป็น row (เพราะใน text file ข้อมูลเรียงเป็น row) ผมต้องเปลี่ยนเป็น colum อีกครั้ง เนื่องจากข้อมูลมีจำนวนมากและเป็นข้อมูลหลายช่วง จึงเรียนถามว่าผมจะต้องเขียน code อย่างไรเพื่อดึงข้อมูลในช่วงข้อมูลที่ต้องการจาก text file แล้วนำมาเรียงเป็นคอลัมน์เดียวกันใน excel ผมได้แนบ text file และ excel file ตัวอย่างมาด้วย(จริงๆเยอะกว่านี้มาก) ขอขอบพระคุณครับ

อรวีร์
19 Jun 2007, 20:37
ลองเปิดแฟ้มแนบแล้ว Run ดูค่ะ

Sub Text_to_1Col()
Dim Handle As Integer, File_Name As String
Dim LineStr As String, StartByte As Integer, Hr As Integer
Dim NowRow As Long, NowDay As String
NowRow = 1
File_Name = "C:\Text_Format.txt"
Handle = FreeFile
Open File_Name For Input As Handle
Do While Not EOF(Handle)
Line Input #Handle, LineStr
If Left(LineStr, 6) = " " And Val(Mid(LineStr, 7, 3)) > 0 Then
NowDay = Mid(LineStr, 7, 3)
For Hr = 1 To 24
NowRow = NowRow + 1
StartByte = Hr * 7 + 7
Cells(NowRow, 1).Value = Mid(LineStr, StartByte, 5)
Cells(NowRow, 2).Value = NowDay
Cells(NowRow, 3).Value = Format(Hr, "00") & "00"
Next
End If
Loop
Close Handle
End Sub
คุณถามเกี่ยวกับการเขียน Code แสดงว่าคุณเขียน VBA ได้อยู่แล้ว ?
ลองแกะ Code ดูค่ะ

gaka
5 Mar 2010, 23:25
คุณอรวีร์ ถ้าอ่านครั้งเดียวขึ้นมาทั้งหมดแล้วใช้ spite(strvar, vbclrf) ออกเป็น record
ตรงนี้ต้องเปลี่ยนเป็นอะไรครับ?
Do While Not EOF(Handle)

อรวีร์
6 Mar 2010, 06:29
LineStr = Split(ReadStr, vbCrLf)
For I=0 To Ubound(LineStr)
. . . . . . . . แต่ละบรรทัด = LineStr(I)
Next

gaka
7 Mar 2010, 22:20
LineStr = Split(ReadStr, vbCrLf)
For I=0 To Ubound(LineStr)
. . . . . . . . แต่ละบรรทัด = LineStr(I)
Next

ขออภัยครับ ผมหมายถึง เขียนให้ระบบอ่าน ReadStr ขึ้นมาครั้ังเดียว ต้องทำอย่างไรครับ

อรวีร์
7 Mar 2010, 23:11
Handle1=FreeFile
F_N="D:\Tesr.txt"
ReadStr = Space(FileLen(F_N))
Open F_N For Binary As Handle1
Get Handle1, , ReadStr
Close Handle1

gaka
8 Mar 2010, 09:27
Handle1=FreeFile
F_N="D:\Tesr.txt"
ReadStr = Space(FileLen(F_N))
Open F_N For Binary As Handle1
Get Handle1, , ReadStr
Close Handle1
ขอบคุณครับ
ใช้ Space(FileLen(F_N)) เพื่อเตรียมพื้นที่ว่างให้กับตัวแปร
แล้วใช้ Get Handle1, , ReadStr เพื่ออ่านไฟล์มาเก็บในตัวแปร ReadStr
ผมไปลองใช้ LOF มันเลยยัง debug ไม่ผ่าน