:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
pichetppp
Member
Member
Posts: 15
Joined: Fri May 27, 2011 3:36 pm

ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#1

Post by pichetppp »

สวัสดีครับทุกท่านครับ
รบกวนขอความช่วยเหลือด้วยครับ
คือมีโจทย์ว่า
ผมต้องการเอาเอกสาร มาค้นหาข้อมูล File 1 และ File 2 เป็นไฟล์ที่จะนำตัวเลข 10 หลักในแต่ละเซลล์ไปหาในไฟล์ฐานข้อมูลชื่อ "DATA"
เมื่อหาเจอให้นำข้อมูลที่หามาได้แสดงไว้ในไฟล์ทั้งคู่ หากไม่มีข้อมูลให้เปลี่ยนสีตัวอักษรเป็นสีแดง
โดยทำอีกไฟล์เป็น Text box 2 อัน ไว้กรอกชื่อไฟล์และกำหนดให้เอาไฟล์ไปไว้ใน folder เดียวกันโดยชื่อว่า data เมื่อกรอกข้อมูลแล้วกดปุ่มดำเนินการค้นหา จะดำเนินการดังที่ได้กล่าวมาแล้วครับ
แสดงภาพตัวอย่างในเอกสาร View ครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#2

Post by snasui »

:D การคลิกปุ่มแล้วให้โปรแกรมทำงานค้นหาข้อมูลตามต้องการนั้น จำเป็นต้องใช้ VBA ครับ ซึ่งจำเป็นต้องเขียนมาก่อนเสมอ ติดตรงไหนสามารถถามกันได้เรื่อย ๆ ครับ
pichetppp
Member
Member
Posts: 15
Joined: Fri May 27, 2011 3:36 pm

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#3

Post by pichetppp »

สวัสดีอีกครั้งครับ
คือผมไม่ค่อยจะเก่งในการทำ vba นะครับ ขอคำแนะนำการเริ่มต้นได้ไหมครับ
เพราะผมไม่ค่อยมีความชำนาญเท่าที่จะทำได้หมดนะครับ เริ่มต้นก็ยังติดว่า
ทำอย่างไรถึงจะรับค่าจาก text box แล้วดำเนิกการได้นะครับ
แต่มีคนแนะนำมาว่าน่าจะลองดู แต่ก็ยังทำไม่ได้สักที เลยอยากรู้ว่าถ้า อาจารย์
จะพอแนะว่าควรต้องเขียนอย่างไรดี เพราะผมไม่ค่อยมีตัวอย่างและมีเวลาที่จำกัด
เลยศึกษาได้ไม่หมดนะครับ
ผมเลยได้แต่คิดว่า vba น่าจะทำได้ แต่ก็ทำไม่ถูกสักที
ผมก็แค่มีพื้นฐานทำให้แสดงตัวอักษร และใช้ macro เท่านั้นนะครับ

แนะนำด้วยครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#4

Post by snasui »

:lol: กรณีไม่เคยเขียนมีทางเลือกคือให้ผู้ที่เข้าใจและเขียนได้เขียนมาก่อนครับ ติดตรงไหนสามารถถามมาได้เรื่อย ๆ เนื่องจากผมเน้นตอบเฉพาะที่เป็นปัญหา และจะบอกกับเพื่อนสมาชิกทุกคนเช่นนี้เท่าเทียมกันครับ การสอนให้เขียน VBA ได้นั้นต้องใช้เวลามากเนื่องจากเป็น Programming คือเป็นภาษาในการเขียนโปรแกรมคอมพิวเตอร์ หากจำเป็นต้องใช้งาน VBA ควรเริ่มศึกษาจากหนังสือและการฝึกบันทึก Macro เพื่อดู Code ที่ได้และนำมาปรับใช้งานครับ
pichetppp
Member
Member
Posts: 15
Joined: Fri May 27, 2011 3:36 pm

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#5

Post by pichetppp »

ขอบคุณครับ

คงต้องใช้วิธีเดิมๆต่อไปก่อน
ปัญญาน้อยไม่พอ เวลาก็ไม่มี กรรมจริงๆ

ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#6

Post by snasui »

:D อย่าเพิ่งท้อถอยครับ การศึกษา VBA อาศัยความอดทนเป็นที่ตั้งเพราะต้องฝึกฝนเยอะ ลำพังการอ่านอย่างเดียวนั้นไม่ได้ช่วยอะไรครับ ผมและเพื่อนสมาชิกทั้งหลายก็ล้วนมีงานประจำเช่นกัน ที่ผมตอบได้เร็วอาศัยประสบการณ์เป็นหลักเนื่องจากคลุกคลีกับ Excel มานานครับ (อ่านเพิ่มเติม...)
pichetppp
Member
Member
Posts: 15
Joined: Fri May 27, 2011 3:36 pm

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#7

Post by pichetppp »

ขอบคุณครับ

ถ้าสงสัย ทำไม่ได้ จะมาถามเพิ่มนะครับ

ตอนนี้ขอหาวิธีแก้โดยความสามารถเท่าห่างอึงก่อนนะครับ

ขอบคุณครับ
pichetppp
Member
Member
Posts: 15
Joined: Fri May 27, 2011 3:36 pm

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#8

Post by pichetppp »

สวัสดีครับ
ช่วยแนะนำการเขียน Code เมื่อเราหาค่าในเซลล์ที่มีตัวเลข 10 ตัว แล้วเจอรายการที่ซ้ำกัน
ให้ลบทิ้งในแถวที่ซ้ำกันทั้งแถว และหาต่อจนกว่าจะไม่ซ้ำกันหมดนะครับ
ผมลองทำดู
Dim c, d
c = 1
d = 2
For singleC= 1 To ActiveSheet.Cells.Count
If Cells(c, 1) = Cells(d, 1) Then
Rows("d").Select
Selection.Delete Shift:=xlUp
c = c + 1
d = d + 1
End If
Next singleC
มันไม่ได้นะครับ งงอยู่นานแล้วครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#9

Post by snasui »

:D แนบไฟล์ตัวอย่างมาด้วยจะได้สะดวกในการทดสอบครับ
pichetppp
Member
Member
Posts: 15
Joined: Fri May 27, 2011 3:36 pm

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#10

Post by pichetppp »

สวัสดีครับ
เอกสารตัวอย่างที่ทำอยู่ครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#11

Post by snasui »

:D ลองเปลี่ยนจาก
pichetppp wrote:

Code: Select all

Dim c, d
c = 1
d = 2
For singleC= 1 To ActiveSheet.Cells.Count
If Cells(c, 1) = Cells(d, 1) Then
Rows("d").Select
Selection.Delete Shift:=xlUp
c = c + 1
d = d + 1
End If
Next singleC
เป็นด้านล่างครับ

Code: Select all

i = 1
Do While Cells(i, "C") <> ""
    If Cells(i, "C") = Cells(i + 1, "C") Then
        Cells(i, "C").EntireRow.Delete
    Else
        i = i + 1
    End If
Loop
pichetppp
Member
Member
Posts: 15
Joined: Fri May 27, 2011 3:36 pm

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#12

Post by pichetppp »

สวัสดีครับ
ทดลองแล้วครับ
ไม่เปลี่ยนแปลงครับ
แถวที่ซ้ำกันไม่ถูกลบออกไปครับ
ไม่แน่ใจว่าต้องแก้อะไรเพิ่มหรือเปล่าครับ
User avatar
tupthai
Bronze
Bronze
Posts: 302
Joined: Sat Feb 04, 2012 2:49 pm

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#13

Post by tupthai »

ลองแบบนี้บ้างครับผม
Public Sub find()
Dim R, singleCell, ws, rangeToUse, LastRow
Worksheets(1).Cells.ClearContents
Worksheets(1).Columns(1).NumberFormat = "@"
R = 1
For ws = 2 To Worksheets.Count
For Each singleCell In Worksheets(ws).UsedRange
If singleCell.Value Like "##########" Then
R = R + 1
Worksheets(1).Cells(R, 1).Value = singleCell.Value
Worksheets(1).Cells(R, 2).Value = singleCell.Offset(0, 1).Value
Worksheets(1).Cells(R, 3).Value = singleCell.Offset(0, 2).Value
End If
Next singleCell
Next ws

LastRow = Range("A" & Rows.Count).End(xlUp).Row
With Range("E2:E" & LastRow)
.FormulaR1C1 = "=IF(COUNTIF(R1C1:RC[-4],RC[-4])>1,NA())"
.SpecialCells(xlCellTypeFormulas, 16).EntireRow.Delete
.ClearContents
End With

End Sub
pichetppp
Member
Member
Posts: 15
Joined: Fri May 27, 2011 3:36 pm

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#14

Post by pichetppp »

ขอบคุณครับ คุณ tupthai
แต่ผมลองใช้ในข้อมูลขนาดใหญ่ที่ต้องทำงานจริง
แล้ว ค้างที่หน้าจอขาวไปต่อไม่ได้ครับ
คงต้องลองหาวิธีแก้ไข

ขอบคุณนะครับ ได้ไอเดียเพิ่มอีกวิธี
User avatar
tupthai
Bronze
Bronze
Posts: 302
Joined: Sat Feb 04, 2012 2:49 pm

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#15

Post by tupthai »

pichetppp wrote:ขอบคุณครับ คุณ tupthai
แต่ผมลองใช้ในข้อมูลขนาดใหญ่ที่ต้องทำงานจริง
แล้ว ค้างที่หน้าจอขาวไปต่อไม่ได้ครับ
คงต้องลองหาวิธีแก้ไข

ขอบคุณนะครับ ได้ไอเดียเพิ่มอีกวิธี
ขอสอบถามเพิ่มเติมนิดนึงครับ ที่ว่าข้อมูลขนาดใหญ่ มีประมาณกี่ชีท และกี่แถวครับ
จะได้ประเมินถูกครับผม :D
pichetppp
Member
Member
Posts: 15
Joined: Fri May 27, 2011 3:36 pm

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#16

Post by pichetppp »

ข้อมูลเพิ่มเติมครับ
โดยที่ใช้กับข้อมูล 1,000 แถวเป็นอย่างต่ำ
แต่ไม่น่าถึง 10,000 ในตอนนี้ แต่อนาคตบอกไม่ได้ข้อมูลเพิ่มตลอดครับ
ส่วนที่เกิดปัญหาที่พบจากการลองรันดูที่ละขั้นตอนพบว่าจะค้างที่ขั้นตอนการลบ
โดยขึ้นข้อความ FALSE ที่ column E แล้วจะค้างไปเลย
User avatar
snasui
Site Admin
Site Admin
Posts: 31176
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#17

Post by snasui »

:D กรณีที่ข้อมูลเรียงตามคอลัมน์ C แล้ว Code ด้านล่างนี้ทำงานถูกต้องแน่นอนครับ
snasui wrote:

Code: Select all

i = 1
Do While Cells(i, "C") <> ""
    If Cells(i, "C") = Cells(i + 1, "C") Then
        Cells(i, "C").EntireRow.Delete
    Else
        i = i + 1
    End If
Loop
แต่หากข้อมูลไม่ได้จัดเรียง ลองดูตัวอย่างการปรับ Code ตามด้านล่างครับ

Code: Select all

    i = 1
    For i = 1 To Range("C" & Rows.Count).End(xlUp).Row
        If Application.CountIf(Range("C1:C" & i), Cells(i, "C")) > 1 Then
            Cells(i, "C").Clear
        End If
    Next i
    If Application.CountIf(Range("C:C"), "") > 0 Then
        Range("C:C").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    End If
pichetppp
Member
Member
Posts: 15
Joined: Fri May 27, 2011 3:36 pm

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#18

Post by pichetppp »

สวัสดีครับ อาจารย์
ผมลองแก้ไขนิดหน่อย คือว่าผมต้องการ column A แทน C
และผลที่ได้ใช่เลยครับ
ทั้งข้อมูลที่จะใช้จริงด้วยครับ
สุดยอดเลย :o
ผ่านไปอีกขั้นแล้วครับ
ยังมีอีกหลาย step
ขอบคุณครับ :D

แล้วจะเข้ามาถามอีกครับ
(ในห้วข้อนี้ครับ)
pichetppp
Member
Member
Posts: 15
Joined: Fri May 27, 2011 3:36 pm

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#19

Post by pichetppp »

สวัสดีครับ
ขอถามเพิ่มเติมครับ
ผมลองหาวิธีเอาตัวเลข 10 หลักที่อยู่ใน sheet 1 เอกสารแรก
มาทำการหาต่อว่ามีอยู่ใน เอกสารที่สองหรือไม่
ถ้ามีให้นำรายการใน column B ในเอกสารที่สอง
มาเพิ่มใน column D ของเอกสารแรก
และถ้าไม่มีให้แสดงค่าว่า NO DATA ใน column D ของเอกสารแรก และเปลี่ยนสีเป็นสีแดง
ผมลองใช้แมโครแล้ว และลองแก้ไข code แล้วไม่สามารถทำได้นะครับ อยู่ใน Module 2

Code: Select all

Dim i As Integer
    i = 1
    For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
    Selection.Copy.Range("A" & i).Value
    Workbooks.Open Filename:= _
        "C:\Documents and Settings\T02083\My Documents\ref.xls"
    Windows("ref.xls").Activate
     If Workbooks("test yes0 t1.xls").Range("A" & i).Value = Range("A" & i).Value Then
     Selection.Copy.Range("B" & i).Value
     Windows("test yes0 t1.xls").Activate
     Range("D" & i).Select
    ActiveSheet.Paste
    Else
    ActiveCell.FormulaRiCi = "no data"
    Rows("i:i").Select
    Selection.Font.ColorIndex = 3
    End If
    Next i
End Sub
ช่วยแนะนำด้วยครับ
You do not have the required permissions to view the files attached to this post.
User avatar
tupthai
Bronze
Bronze
Posts: 302
Joined: Sat Feb 04, 2012 2:49 pm

Re: ขอความช่วยเหลือการเขียนโปรแกรมหาข้อมูลครับ

#20

Post by tupthai »

Code: Select all

Dim wb1, wb2 As Workbook

Application.ScreenUpdating = False
Set wb1 = ActiveWorkbook
LastRow1 = wb1.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row
Set wb2 = Workbooks.Open("C:\Documents and Settings\My Documents\ref.xls", False, False)
LastRow2 = wb2.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row

For i = 1 To LastRow1
    For j = 1 To LastRow2
        If wb2.Sheets(1).Range("A" & j).Value = wb1.Sheets(1).Range("A" & i).Value Then
           wb1.Sheets(1).Range("D" & i).Value = wb2.Sheets(1).Range("B" & j).Value
           f = 1
        End If
    Next j
   If f = 0 Then
        wb1.Sheets(1).Range("D" & i).Value = "no data"
        wb1.Sheets(1).Range("D" & i).Font.ColorIndex = 3  
   End If
   f = 0
Next i

wb2.Close False
Application.ScreenUpdating = True

Post Reply