Page 1 of 2
การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างตาราง
Posted: Tue Nov 13, 2012 4:58 pm
by tstc79tt
ตัวอย่างข้อมูล เนื่องจากผมอัพไฟล์ txt ไม่ได้
dadadadadadadadadadadadadad hahahahah stupid me stupid me stupid me stupid me
lsb.ibm.kbank:FinCheck:050112:AIX:6.3.2:fhgt.dll:dserver1:198.168.65.108:C:F:FC SCSI:user1
lsb.ibm.kbank:FinCheck:050112:AIX:7.3.1:fhgt.dll:aserver1:178.168.65.188:C:F:FC SCSI:user3
dadadadadadadadadadadadadad hahahahah stupid me stupid me stupid me stupid me
lsb.ibm.tbank:NoCheck:050112:AIX:5.3.0:fhgt.dll:dserver1:198.168.65.108:C:F:FC SCSI:user1
lsb.ibm.kbank:FinCheck:050112:AIX:6.3.1:fhgt.dll:dserver1:178.168.65.198:C:F:FC SCSI:Admin
dadadadadadadadadadadadadad hahahahah stupid me stupid me stupid me stupid me
dadadadadadadadadadadadadad hahahahah stupid me stupid me stupid me stupid me
dadadadadadadadadadadadadad hahahahah stupid me stupid me stupid me stupid me
lsb.ibm.kbank:FinCheck:050112:AIX:6.3.2:fhgt.dll:dserver1:198.168.65.108:C:F:FC SCSI:user1
lsb.ibm.kbank:FinCheck:050112:AIX:7.3.1:fhgt.dll:aserver1:178.168.65.188:C:F:FC SCSI:user3
[lsb.ibm.kbank]*:NoCheck:120312:[AIX]*:[5.3.0]*:txgh.dll:[dserver1]*:[198.168.65.108]*:C:F:FC SCSI:[user1]*
จึงทำให้เหลือเพียง
lsb.ibm.kbank:AIX:6.3.2::dserver1:198.168.65.108:user1 ที่จะใช้ทำตาราง
ที่ผมใส่วงเล็บดอกจันทร์ไว้คือส่วนที่ผมต้องการนำมาใช้ ผมไม่ทราบว่าเราควรจะใช้ คำสั่งอะไร Syntax แบบไหนหรือฟังชั่นในส่วนใดถึงจะสามารถคัดแยกนำมาใส่ตารางได้ ตอนนี้ผมทำได้แค่ในส่วนของ การ Import Text file โดยการนำโค๊ดของผู้อื่นมาอ่านดัดแปลงเอาเองอยู่ ที่ผมทำมันแยกออกมาแล้วเว้นบรรทัดไม่เท่ากันทำให้นำไปใช้ต่อไม่ได้ครับ
ขอความกรุณาชี้แนะด้วยครับ
ผมไม่เก่งเรื่องcodeสักเท่าไรแต่ จึงพยายามเรียนรู้ให้ไวที่สุด ขออภัยเวลาตั้งคำถามแล้วอาจไม่ละเอียดพอควร น้องใหม่ครับ
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Tue Nov 13, 2012 5:04 pm
by snasui
tstc79tt wrote:ตัวอย่างข้อมูล เนื่องจากผมอัพไฟล์ txt ไม่ได้
Zip มาก่อนแล้วค่อย Upload ครับ
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Tue Nov 13, 2012 5:13 pm
by tstc79tt
snasui wrote:
tstc79tt wrote:ตัวอย่างข้อมูล เนื่องจากผมอัพไฟล์ txt ไม่ได้
Zip มาก่อนแล้วค่อย Upload ครับ
เรียบร้อยแล้วครับ ขอความกรุณาด้วยครับ แนะนำผมทีว่าผมควรศึกษาเริ่มจากส่วนไหนประมาณไหนก่อน
มือใหม่หัด VB ครับ
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Tue Nov 13, 2012 7:50 pm
by snasui

จากตัวอย่างไฟล์ที่แนบมานั้นสามารถ Import Text File มาได้แล้วครับ การทำให้เป็นตารางข้อมูลตามต้องการนั้นสามารถใช้สูตรเข้ามาจัดการได้ครับ ไม่ทราบว่าตารางข้อมูลที่ต้องการ
จำเป็นจะต้องอยู่คนละไฟล์เท่านั้นหรือไม่ครับ
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Tue Nov 13, 2012 8:17 pm
by tstc79tt
snasui wrote:
จากตัวอย่างไฟล์ที่แนบมานั้นสามารถ Import Text File มาได้แล้วครับ การทำให้เป็นตารางข้อมูลตามต้องการนั้นสามารถใช้สูตรเข้ามาจัดการได้ครับ ไม่ทราบว่าตารางข้อมูลที่ต้องการ
จำเป็นจะต้องอยู่คนละไฟล์เท่านั้นหรือไม่ครับ
ไม่จำเป็นครับอยู่ เวิรคชีตเดียวกันได้ครับ แต่ตอนนี้คือผมไม่รู้ว่าควรจะทำยัง ให้หลังจาก import ไฟล์เข้ามาแล้ว
ข้อมูลจะคัดเอาเฉพาะบรรทัดที่ผมต้องการแล้วนำมาเรียงเป็นตาราง อย่างเช่น ไฟล์ Result ได้น่ะครับ
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Tue Nov 13, 2012 8:47 pm
by snasui

ลองตามนี้ครับ
ที่ชีท Import
- เซลล์ O1 คีย์สูตร
=COUNTIF(B4:B53,"lsb.ibm.kbank")
Enter
- เซลล์ Q2 คีย์สูตร
=IF(ROWS(Q$2:Q2)>$O$1,"",INDEX($B$4:$B$53,SMALL(IF($B$4:$B$53="lsb.ibm.kbank",ROW($B$4:$B$53)-ROW($B$4)+1),ROWS(Q$2:Q2))))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
- เซลล์ R2 คีย์สูตร
=IF(ROWS(R$2:R2)>$O$1,"",INDEX($E$4:$E$53,SMALL(IF($B$4:$B$53="lsb.ibm.kbank",ROW($B$4:$B$53)-ROW($B$4)+1),ROWS(R$2:R2))))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
- เซลล์ S2 คีย์สูตร
=IF(ROWS(S$2:S2)>$O$1,"",INDEX($F$4:$F$53,SMALL(IF($B$4:$B$53="lsb.ibm.kbank",ROW($B$4:$B$53)-ROW($B$4)+1),ROWS(S$2:S2))))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
]เซลล์ T2 คีย์สูตร
=IF(ROWS(T$2:T2)>$O$1,"",INDEX($H$4:$H$53,SMALL(IF($B$4:$B$53="lsb.ibm.kbank",ROW($B$4:$B$53)-ROW($B$4)+1),ROWS(T$2:T2))))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
- เซลล์ U2 คีย์สูตร
=IF(ROWS(U$2:U2)>$O$1,"",INDEX($I$4:$I$53,SMALL(IF($B$4:$B$53="lsb.ibm.kbank",ROW($B$4:$B$53)-ROW($B$4)+1),ROWS(U$2:U2))))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
- เซลล์ V2 คีย์สูตร
=IF(ROWS(V$2:V2)>$O$1,"",INDEX($M$4:$M$53,SMALL(IF($B$4:$B$53="lsb.ibm.kbank",ROW($B$4:$B$53)-ROW($B$4)+1),ROWS(V$2:V2))))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
Note: Ctrl+Shift+Enter หมายถึงเมื่อคีย์สูตรแล้ว แทนที่จะกด Enter ให้กดแป้น Ctrl+Shift ค้างไว้แล้วกด Enter เพื่อสร้างเป็นสูตร Array หากกดแป้นถูกต้องสูตรนั้นจะมีเครื่องหมายปีกกาครอบ เช่น
{=YourFormulas(...)
} ปีกกานี้คีย์เข้าไปเองไม่ได้
ถ้ายังไม่เห็นปีกกาครอบสูตรแสดงว่ากดแป้นให้รับสูตรไม่ถูกต้อง
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Tue Nov 13, 2012 9:20 pm
by tstc79tt
snasui wrote:
ลองตามนี้ครับ
ที่ชีท Import
- เซลล์ O1 คีย์สูตร
=COUNTIF(B4:B53,"lsb.ibm.kbank")
Enter
- เซลล์ Q2 คีย์สูตร
=IF(ROWS(Q$2:Q2)>$O$1,"",INDEX($B$4:$B$53,SMALL(IF($B$4:$B$53="lsb.ibm.kbank",ROW($B$4:$B$53)-ROW($B$4)+1),ROWS(Q$2:Q2))))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
- เซลล์ R2 คีย์สูตร
=IF(ROWS(R$2:R2)>$O$1,"",INDEX($E$4:$E$53,SMALL(IF($B$4:$B$53="lsb.ibm.kbank",ROW($B$4:$B$53)-ROW($B$4)+1),ROWS(R$2:R2))))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
- เซลล์ S2 คีย์สูตร
=IF(ROWS(S$2:S2)>$O$1,"",INDEX($F$4:$F$53,SMALL(IF($B$4:$B$53="lsb.ibm.kbank",ROW($B$4:$B$53)-ROW($B$4)+1),ROWS(S$2:S2))))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
]เซลล์ T2 คีย์สูตร
=IF(ROWS(T$2:T2)>$O$1,"",INDEX($H$4:$H$53,SMALL(IF($B$4:$B$53="lsb.ibm.kbank",ROW($B$4:$B$53)-ROW($B$4)+1),ROWS(T$2:T2))))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
- เซลล์ U2 คีย์สูตร
=IF(ROWS(U$2:U2)>$O$1,"",INDEX($I$4:$I$53,SMALL(IF($B$4:$B$53="lsb.ibm.kbank",ROW($B$4:$B$53)-ROW($B$4)+1),ROWS(U$2:U2))))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
- เซลล์ V2 คีย์สูตร
=IF(ROWS(V$2:V2)>$O$1,"",INDEX($M$4:$M$53,SMALL(IF($B$4:$B$53="lsb.ibm.kbank",ROW($B$4:$B$53)-ROW($B$4)+1),ROWS(V$2:V2))))
Ctrl+Shift+Enter > Copy ลงด้านล่าง
Note: Ctrl+Shift+Enter หมายถึงเมื่อคีย์สูตรแล้ว แทนที่จะกด Enter ให้กดแป้น Ctrl+Shift ค้างไว้แล้วกด Enter เพื่อสร้างเป็นสูตร Array หากกดแป้นถูกต้องสูตรนั้นจะมีเครื่องหมายปีกกาครอบ เช่น
{=YourFormulas(...)
} ปีกกานี้คีย์เข้าไปเองไม่ได้
ถ้ายังไม่เห็นปีกกาครอบสูตรแสดงว่ากดแป้นให้รับสูตรไม่ถูกต้อง
อ้อครับจะรีบทดลองเลยหละครับ........ แต่ก่อนอื่นผมขอมุตาจบก่อน

Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Tue Nov 13, 2012 11:04 pm
by tstc79tt
โอเคครับทดลองแล้วครับ จะหัดเรียนรู้ให้มากๆครับ หากมีคำถามไม่เข้าใจผมจะมาถามน่ะครับ
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Tue Nov 13, 2012 11:12 pm
by bank9597
แต่ก่อนอื่นผมขอมุตาจบก่อน
ขออนุญาตนอกเรื่องครับ ว่าแต่ มุตา เกี่ยวอะไรกับ VBA ครับเนี่ย

Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Fri Nov 16, 2012 9:31 am
by tstc79tt
ผมลองใช้กับ ไฟลจริงแล้วมันเรียกค่าออกมา แล้วมันมั่วไปหมด เพราะไฟล์จริงออกมาในลักษณะ log ไฟล์ ข้อมูลไม่ได้ถูกจัดเรียงเพราะว่าไฟล์มีบรรทัดแรกเป็นชื่อหัวข้อคอลัมแต่ละอัน หากเปิดlog ไฟล์นี้แบบธรรมดาใน excel แล้วปรับให้มันคัดแยกโดย delimited มันก็จะออกเป็นตารางให้ตามปกติ
Sub Macro2()
'
' Macro2 Macro
'
'
Workbooks.OpenText Filename:= _
"C:\Documents and Settings\Administrator\Desktop\IBM Working Resource\test text\bayecmcs_chkpackage.log" _
, Origin:=874, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=True, OtherChar:=":", FieldInfo:= _
Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1), Array(7 _
, 1), Array(8, 1), Array(9, 1), Array(10, 1), Array(11, 1), Array(12, 1), Array(13, 1), Array _
(14, 1), Array(15, 1), Array(16, 1), Array(17, 1), Array(18, 1)), TrailingMinusNumbers _
:=True
End Sub
ย่อมาโครยังไงหรือครับ ผมไม่เคยทำมาก่อน
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Fri Nov 16, 2012 11:41 am
by snasui

ที่ถามมานั้นปัญหาคืออะไรครับ สำหรับการย่อ Macro หากไม่จำเป็นก็ไม่ต้องเร่งรีบที่จะย่อครับ ศึกษาให้เข้าใจก่อนว่า Code ทำงานอย่างไร เมื่อคล่องแล้วจะสามารถย่อได้เองครับ
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Fri Nov 16, 2012 1:58 pm
by tstc79tt
ปัญหาคือนี่ครับ ผมจะทำยังไงให้เวลา import ไฟล์ เข้ามาแล้วเรียงเป็นตาราง โดยไม่ต้องลบ บรรทัดแรกของไฟล์ bayecmcs ได้บ้างครับ
คือผมเปิดปกติ และก็ delimited มันก็เรียงได้ แต่ หาก ผมทำimport ผ่าน vba มัน error ขึ้นรวมมั่วบรรทัดเดียวกันหมด
ผมแนบไฟล์มาให้ด้วยครับ
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Fri Nov 16, 2012 2:47 pm
by snasui

การ Import Text file แล้วเข้ามาเป็นตารางลองดูตัวอย่าง Code ตามด้านล่างครับ
Code: Select all
Sub ImportTextFile()
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Range("B1").Value & "\" & Range("B2").Value & ".txt", Destination:= _
Range("$A$4"))
.Name = Range("B2").Value
.TextFilePlatform = 874
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileOtherDelimiter = ":"
.Refresh BackgroundQuery:=False
End With
End Sub
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Fri Nov 16, 2012 4:55 pm
by tstc79tt
ขอบคุณครับ จะเอาไปลองทำๆดู หากติดขัดอะไรผมจะมาปรึกษาใหม่คับ
ผมชอบบอร์ดนี้มากหละ
ผมเคยไปบอร์ดอื่นๆ บางที่ก็โหด เกิน ผมอยากถามอยากอะไรเห็นคนมาตอบบางทีโหดเหลือเกิน ก็ผมไม่รุ้จะเริ่มศึกษายังไงก่อนนิ อ่านเองก็งงไปทำตามหนังสือไป แล้วหนังสือก็ไม่ได้ช่วยอะไรในระดับที่ผมทำอยู่เลย T^T
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Mon Nov 19, 2012 11:15 am
by tstc79tt
คือหลังจากทำการ กด import ไป 1 ครั้ง ไม่มีปัญหาอะไร แต่พอผมลอง กด อีกครั้ง มันกลับไม่ refresh ข้อมูลเก่าออกไป แต่กลับดันไปข้างๆแทน ทำให้เป็นปัญหาพอควรเลยครับผมลองแก้นู้นนี่ แต่ก็ยังไม่ได้ความครับ
แล้วก็ หลังจากใช้ data text ไฟล์จริง มันเกิดเหตุที่ว่า ไม่สามารถรับข้อมูลได้มันเกิน 400 บรรทัดหรืออะไร อะไรสักอย่างครับ
ขอคำแนะนำและอธิบายทีครับ
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Mon Nov 19, 2012 12:46 pm
by snasui
tstc79tt wrote:คือหลังจากทำการ กด import ไป 1 ครั้ง ไม่มีปัญหาอะไร แต่พอผมลอง กด อีกครั้ง มันกลับไม่ refresh ข้อมูลเก่าออกไป แต่กลับดันไปข้างๆแทน
ผมเข้าใจว่ามันไม่ได้ Delete ข้อมูลเก่าออกไปก่อนที่จะวางข้อมูลอันใหม่
ปกติแล้วในการดึงข้อมูลซึ่งมีการเปลี่ยนต้นแหล่งอยู่เสมอ ๆ เราควรลบข้อมูลที่เคยดึงมาแล้วทิ้งไปด้วย จาก Code ด้านบนให้แทรก Statement สำหรับการ Clear ข้อมูลเดิมทิ้งไปก่อน Code สำหรับดึงข้อมูล โดยลองปรับเป็นด้านล่างครับ
Code: Select all
Sub ImportTextFile()
Range("A4").CurrentRegion.Delete
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Range("B1").Value & "\" & Range("B2").Value & ".txt", Destination:= _
Range("A4"))
.Name = Range("B2").Value
.TextFilePlatform = 874
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileOtherDelimiter = ":"
.Refresh BackgroundQuery:=False
End With
End Sub
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Mon Nov 19, 2012 3:28 pm
by tstc79tt
ผมลองแล้วครับ รอบแรกก็โอเค พอลองกด import ใช้งานอีกครั้งมันดันขึ้น error ตามภาพน่ะครับ แล้ว มันก็ดีด ไอคอนและก็ 2 บรรทัดแรกไปด้านข้าง
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Mon Nov 19, 2012 3:53 pm
by snasui

ลองปรับ Code เป็นตามด้านล่างครับ
Code: Select all
Sub ImportTextFile()
Cells.Clear
Range("B1") = ThisWorkbook.Path
Range("B2") = "bayecmcs_chkpackage.log"
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & Range("B1").Value & "\" & Range("B2").Value & ".txt", Destination:= _
Range("$A$4"))
.Name = Range("B2").Value
.TextFilePlatform = 874
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileOtherDelimiter = ":"
.Refresh BackgroundQuery:=False
End With
End Sub
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Mon Nov 19, 2012 4:57 pm
by tstc79tt
โอเค ครับ แต่ ใช้โค๊ดไหนแทรกหรือ ครับ ที่จะทำให้ผม input ชื่อไฟล์ ผ่าน cell B2 แทนที่ผมจะไปเปลี่ยนใน VBE ทุกครั้งที่ต้องการเปลี่ยนไฟล์
ผมคงไปหัดสักพักก่อน เรื่องcode VBA ผมนี่เอ๋อจริงๆ
ขอบคุณครับ

> /|\ <
Re: การคัดกรอง txt ไฟล์ข้อมูล แล้วดึงข้อมูลต้องการนำมาสร้างต
Posted: Mon Nov 19, 2012 5:16 pm
by snasui

กรณีต้องการกรอกชือ Path ชื่อไฟล์ก่อนดึงข้อมูล ลองปรับเป็นด้านล่างครับ
Code: Select all
Sub ImportTextFile()
Dim rPaht As String
Dim rFileName As String
rPaht = Range("B1")
rFileName = Range("B2")
Cells.Clear
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & rPaht & "\" & rFileName & ".txt", Destination:= _
Range("$A$4"))
'... Other code
Range("B1") = rPaht
Range("B2") = rFileName
End Sub