Page 1 of 2

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Sat Aug 28, 2010 10:42 pm
by snasui
:D ไฟล์ SPAO ที่ใ้ช้ Import ข้อมูลลองใช้ Code ตามด้านล่างครับ

Code: Select all

Sub Import()
    Dim rTarget As Range
    Dim TextFileImport As String
    TextFileImport = Application.GetOpenFilename("Text Files (*.txt),*.txt", , _
           "Select Text Data File")
    Set rTarget = Worksheets("School").Range("C65536").End(xlUp).Offset(1, 0)
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & TextFileImport, _
        Destination:=rTarget)
                .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlOverwriteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = False
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 874
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = True
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Sub

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Sun Aug 29, 2010 8:38 am
by snasui
:D ผมปรับ Code เพื่อให้สามารถเลือก Import ได้ทีละหลาย ๆ ไฟล์พร้อมกันในคราวเดียว ตามด้านล่างครับ

Code: Select all

Sub Import()
    Dim rTarget As Range
    Dim i As Integer
    Dim TextFileImport As Variant
    On Error GoTo MsgError
    TextFileImport = Application.GetOpenFilename("Text Files (*.txt),*.txt", , _
           "Select Text Data File", , True)
    For i = 1 To UBound(TextFileImport)
    Set rTarget = Worksheets("School").Range("C65536").End(xlUp).Offset(1, 0)
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & TextFileImport(i), _
        Destination:=rTarget)
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlOverwriteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = False
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 874
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = True
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    Next i
    Exit Sub
MsgError:
    MsgBox "Please select a file"
    Exit Sub
End Sub

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Sun Aug 29, 2010 12:49 pm
by tigerwit
ขอบคุณครับ
มีปัญหาให้ช่วยแก้อีกครับ
พวกค่า #N/A #Value ไม่อยากให้มันแสดงผล
รบกวนตามไฟล์ที่แนบมานะครับ

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Sun Aug 29, 2010 3:13 pm
by snasui
:D ลองตามนี้ครับ

1. ที่ I2 คีย์

=IF(ISNA(LOOKUP(D2,Salary!$A$48:$K$48,J2:T2)),0,LOOKUP(D2,Salary!$A$48:$K$48,J2:T2))

Entter > Copy ลงด้านล่าง

2. ที่ H2 คีย์

=IF(I2=0,0,G2-E2)

Enter > Copy ลงด้านล่าง

3. ที่ G2 คีย์

=IF(I2=0,0,INDEX(Salary!$A$1:$K$47,I2-(F2*2),D2))

Enter > Copy ลงด้านล่าง :mrgreen:

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Tue Aug 31, 2010 11:37 pm
by tigerwit
ขอบพระคุณอย่างสูง
สำหรับคำแนะนำทุกอย่าง
ผมเองไม่ค่อยจะรู้เรื่องสูตร excel เท่าไหร่
อาศัยจากเว็บนี้ ทำให้มีความรู้ขึ้นมาก
แต่ถึงอยางไรก็ตามผมก็เป็นคนประเภท Copy And Copy
สูตรบางสูตรก็ลอกเขาจากหลาย ๆ ที่
แล้วก็ใช้แบบไม่เข้าใจ

ยกตัวอย่างตามไฟล์ที่แนบมานี้
สูตรนี้ (ในชีท Apil)

=IF(M5=0,0,INDEX(Money!$A$1:$F$63,M5-(I5*2),E5))

อยากเรียนถามว่า ผู้ที่เขียนสูตร มีหลักการใด จึงใช้ INDEX(Money!$A$1:$F$63,M5-(I5*2) แล้วทำให้ excel ไปดึงค่าในชีท Money มาแสดงผล
ที่สงสัย คือทำไม ต้อง M5-(I5*2)

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Wed Sep 01, 2010 7:00 am
by snasui
:D ฟังก์ชั่น Index เป็นการนำข้อมูลในพื้นที่ที่ระบุไว้ล่วงหน้ามาแสดงครับ

โดยมีไวยากรณ์คือ

=Index(ช่วงข้อมูลที่ต้องการนำมาแสดง, บรรทัดของข้อมูล, คอลัมน์ของข้อมูล)

เช่น มีข้อมูลดังนี้

.....A.....B.....C
1...5.....8.....3
2...4.....0.....1
3
4
5

หากเราเขียนสูตร

=Index(A1:B5,1,2)

หมายถึงว่าจากช่วงข้อมูล A1:B5 ให้นำบรรทัดที่ 1 และคอลัมน์ที่ 2 ของช่วงข้อมูลมาแสดง คำตอบคือ 8 ซึ่งเป็นค่าใน B1

ในทุกส่วนประกอบของฟังก์ชั่น Index สามารถใช้สูตรแทนได้ครับ ไม่ว่าจะตรงช่วงข้อมูล ตรงบรรทัดที่ และคอลัมน์ที่ก็ตาม

จากสูตร

INDEX(Money!$A$1:$F$63,M5-(I5*2),E5)

หมายความว่า จากช่วงข้อมูล Money!$A$1:$F$63 ให้นำข้อมูลในบรรทัดที่ได้จากผลการคำนวณ M5-(I5*2) และคอลัมน์ที่เป็นค่าใน E5 มาแสดง

ส่วนที่ว่าทำไมต้องเป็นสูตรต่าง ๆ ก็ขึ้นอยู่หลักการ วิธีการในการระบุตำแหน่งข้อมูลของผู้เขียนสูตรครับ

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Wed Sep 01, 2010 8:34 am
by tigerwit
มาลงเวลาเรียนครับผม

จากไฟล์ PP2.xls ที่แนบมานี้
ถ้าในชีท Money ผมลองเปลี่ยนตัวเลขในเซล A64:F64 เป็น 0 1 2 3 4 5 (ไฟล์เดิม pp1.xls เป็น 1 2 3 4 5 6)
แล้วสูตร =IF(M5=0,0,INDEX(Money!$A$1:$F$63,M5-(I5*2),E5)) ยังคงเดิม
ปรากฎว่า การแสดงผล ไม่เป็นไปตามที่ต้องการ (อยากให้ ได้อย่าง PP1.xls คือถ้า เงินเดือน 26170 เพิ่มขั้น 0.5 ขั้น ก็จะเป็น 26690)

เราจะเปลี่ยนสูตร =IF(M5=0,0,INDEX(Money!$A$1:$F$63,M5-(I5*2),E5)) อย่างไรครับ

ยังงงคลำเป้าไม่ถูก

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Wed Sep 01, 2010 10:00 am
by snasui
:D สำหรับฟังก์ชั่น Index ไม่น่าจะมีปัญหาอะไร คงจะมีปัญหาจากสูตรที่เกี่ยวข้อง หากจะปรับให้กระชับขึ้น, ตรงกับความต้องการและใช้เวลาน้อยผมคงต้องทราบเงื่อนไขทั้่งหมด เพื่อเขียนสูตรให้ใหม่เลยครับ :mrgreen:

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Wed Sep 01, 2010 11:12 am
by tigerwit
อธิบายแนวคิดอย่างนี้ครับ
ที่ทำตอนนี้เป็นการทำโปรแกรมเลื่อนขั้นเงินเดือนข้าราชการครู
มี ชีท Money เก็บฐานข้อมูลเงินเดือน ซึ่งมี 5 แท่ง ประกอบด้วย...
แท่งครูผู้ช่วย (คลอลัมน์ A) 0
แท่งคศ.1 (คลอลัมน์ B) 1
แท่งคศ.2 (คลอลัมน์ C) 2
แท่งคศ.3 (คลอลัมน์ D) 3
แท่งคศ.4 (คลอลัมน์ E) 4
แท่งคศ.5 (คลอลัมน์ F) 5

ชีท Apil เป็นข้อมูลข้าราชการครู มีชื่อ คศ. เงินเดือนของมีนาคม ......ฯลฯ

ที่ต้องการคือ ที่ชีท Apil
ในเซล F5 เป็นเงินเดือนของเดือน มีนาคม (ก่อนเลื่อนขั้นเงินเดือน)
ในเซล G5 เป็นเงินเดือน ณ วันที่ 1 เมษายน ที่ได้รับการเลื่อนขั้นแล้ว (อาจจะ 0.0 0.5 ขั้น หรือ 1.0 ขั้น แล้วแต่การพิจารณาของกรรมการ)
ซึ่งในเซล G5 นี้ เกิดจากการคำนวณ โดยให้อ่านค่าจากเซล I5 ว่า มีค่าเป็น 0.0 0.5 หรือ 1.0
ถ้า I5 เป็น 0.0 ก็ให้แสดงค่า F5
ถ้า I5 มีค่า 0.5 ให้ไปดูว่า E5 และ F5 มีค่าเท่าไหร่ (ตัวอย่างตามไฟลที่แนบ E5 คือ 2 และ F5 คือ 26170)
แล้วไปดูข้อมูลจาก ชีท Money ว่า ค่า 26170 ที่อยู่ในแท่งเลข 2 มีหรือไม่
ถ้ามี ให้ดึงค่าที่อยู่ เหนือ 26170 ขึ้นไป 1 แถวมาแสดง (คือค่า 26690)
ถ้า I5 เป็น 1.0 ดึงค่าเหนือขึ้นไป 2 แถวมาแสดง (27200)

อธิบายไป ก็งงไป

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Wed Sep 01, 2010 1:04 pm
by snasui
:D ลองตามนี้ครับ

ที่ G5 คีย์

=INDEX(Money!$A$1:$F$63,MATCH($F5,INDEX(Money!$A$1:$F$63,0,$E5+1),-1)-$K5*2,E5+1)

Enter > Copy ลงด้านล่าง

หากไม่ถูกต้องช่วยระบายสีเซลล์พร้อมระบุค่าที่ถูกต้องมาด้วยครับ :lol: :mrgreen:

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Wed Sep 01, 2010 2:22 pm
by tigerwit
โป๊ะเชะเลยครับ ตามต้องการเลยครับ
สงสัยว่า ทำไมต้อง K5*2 และ E5+1
ถ้าเพิ่มเงื่อนไขอีกนอกเหนือจาก K5 มีค่า 0.0 0.5 1.0 ให้ K5 มีค่า 2% หรือ 4% ด้วย (0.02 หรือ 0.04)
ถ้า K5 มีค่า 2% หรือ 4% (0.02 หรือ 0.04) ให้ดึงค่าจากเซล F5 แสดงผล
จะต้องปรับสูตรอย่างไรครับ

วันนี้ขออนุญาต อ้าปากรับการป้อนอย่างเดียว
คิดอะไรไม่ออกเลย มึนตึ๊บ

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Wed Sep 01, 2010 4:59 pm
by snasui
:D สามารถใช้สูตรง่าย ๆ ได้เลยครับ เช่น G5 คีย์

=IF(K5<0.5,F5,INDEX(Money!$A$1:$F$63,MATCH($F5,INDEX(Money!$A$1:$F$63,0,$E5+1),-1)-$K5*2,E5+1))

Enter > Copy ลงด้านล่าง

ที่ต้องคูณด้วย 2 เพราะต้องการให้เข้าเงื่อนไขตามด้านล่างครับ
tigerwit wrote:อธิบายแนวคิดอย่างนี้ครับ...ถ้ามี ให้ดึงค่าที่อยู่ เหนือ 26170 ขึ้นไป 1 แถวมาแสดง (คือค่า 26690)
ถ้า I5 เป็น 1.0 ดึงค่าเหนือขึ้นไป 2 แถวมาแสดง (27200)

อธิบายไป ก็งงไป
ส่วนที่ต้องบวก E5 ด้วย 1 เนื่องจากนำไปใช้เป็นส่วนประกอบของฟังก์ชั่น Index ในส่วนที่เป็นคอลัมน์ และกรณีนี้ใช้กับหลายคอลัมน์จึงต้องกำหนดให้คอลัมน์แรกของ Index เป็น 1 เสมอ

ซึ่งในคอลัมน์ E เลข 0 หมายถึง 1, เลข 1 หมายถึง 2, เลข 2 หมายถึง 3...

ลองค่อย ๆ ทบทวนฟังก์ชั่น Index ที่ผมอธิบายไปจะทำให้เข้าใจขึ้นครับ :mrgreen:

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Thu Oct 20, 2011 2:35 pm
by bank9597
จะนำไปประยุกต์ใช้อีกครับ

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Tue Nov 13, 2012 8:05 pm
by tigerwit
จากกระทู้นี้ ผมต้องการให้ไฟล์ Sch.xls ส่งข้อมูลของไฟล์ออกเป็น text
และให้ไฟล์ SPAO.xls (ชีท school) นำเข้าข้อมูลจาก text ไฟล์ ที่ส่งออกมา
ซึ่งตอนนั้น ได้รับคำแนะนำ และปรับโค๊ดให้ จนสามารถใช้ได้ ตามความต้องการ

มาถึงวันนี้ ผมลองประยุกต์ใช้งานกับไฟล์อื่น ๆ
ก็เลยมาแกะโค๊ดดู เพื่อจะนำไปใช้
ผมทดลองจากไฟล์เดิม ที่สามารถส่งออกและรับเข้าข้อมูลได้เป็นอย่างดี
ปรากฎว่ามีปัญหาครับ
การส่งออกเป็น text ไม่มีปัญหาใด ๆ
แต่การนำเข้ามีปัญหา ไม่สามารถนำเข้าได้
รบกวนช่วยดูไฟล์ที่ส่งมานี้ด้วยว่าเกิดจากปัญหาใด

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Tue Nov 13, 2012 8:31 pm
by snasui
:D ยกเลิกการ Mark .Refresh BackgroundQuery:=False เป็น Comment ครับ

Re: Excel lมารถส่งออกข้อมูล เป็น Text ได้หรือไม่ครับ

Posted: Tue Nov 13, 2012 9:36 pm
by tigerwit
ครับผมได้แล้ว
แก้ไปแก้มา
ลืมซะนี้