snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
trin
Member
Posts: 3 Joined: Mon Jan 23, 2017 4:57 pm
#1
Post
by trin » Fri Feb 10, 2017 2:19 pm
มือใหม่ขอสอบถามครับผมต้องการทำฟอร์มค้นหาข้อมูลในชีตแล้วให้ข้อมูลที่ค้นหาทั้งหมดที่มีในคำค้น มาแสดงทั้งแถว
ตามใน code ต้องการให้พิมพ์คำค้นเป็นชื่อหรือนามสกุลใน TextBox1 แล้วให้แสดงผลการค้นหาใน TextBox2 ต้องเขียนคำสั่งอย่างไรครับ
ตอนนี้ผลยังแสดงอยู่ที่ชีต data อยู่เลยครับ ตามไฟล์ที่แนบครับ
Code: Select all
Private Sub TextBox1_Change()
Sheets("data").Range("$A$2:$B$" & Range("C65536").End(xlUp).Row).AutoFilter Field:=2, Criteria1:="*" & TextBox1.Value & "*"
End Sub
Private Sub TextBox2_Change()
End Sub
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#2
Post
by snasui » Fri Feb 10, 2017 7:10 pm
ตัวอย่าง Code ครับ
Code: Select all
Private Sub TextBox1_Change()
Dim data as Range
On Error Resume Next
With Sheets("data")
Set data = .Range("a2", .Range("b" & .Rows.Count).End(xlUp))
If Application.CountIf(data, TextBox1.Text) > 0 Then
TextBox2.Text = Application.VLookup(TextBox1.Text, data, 2, 0)
Else
TextBox2.Text = ""
End If
End With
End Sub
trin
Member
Posts: 3 Joined: Mon Jan 23, 2017 4:57 pm
#3
Post
by trin » Fri Feb 10, 2017 10:08 pm
ลองปรับ code ตามอาจารย์แล้ว คราวนี้พอพิมพ์คำค้นในช่อง Textbox1 แล้วเหมือนโปรแกรมไม่ยอมค้นหาให้เลยครับ ไม่มีข้อความอะไรขึ้นที่ Textbox2 เลย ผมเอาไฟล์แนบมาด้วยแล้วครับ ผมใส่ code ผิดตรงใหนบ้างหรือเปล่า รบกวนช่วยชี้แนะด้วยครับ (มือใหม่จริงๆ)
Code: Select all
'Êͧá¶Ç¢éÒ§ÅèÒ§à»ç¹ code à¡èÒ
'Private Sub TextBox1_Change()
'Sheets("data").Range("$A$2:$B$" & Range("C65536").End(xlUp).Row).AutoFilter Field:=2, Criteria1:="*" & TextBox1.Value & "*"
End Sub
Private Sub TextBox1_Change()
Dim data As Range
On Error Resume Next
With Sheets("data")
Set data = .Range("a2", .Range("b" & .Rows.Count).End(xlUp))
If Application.CountIf(data, TextBox1.Text) > 0 Then
TextBox2.Text = Application.VLookup(TextBox1.Text, data, 2, 0)
Else
TextBox2.Text = ""
End If
End With
End Sub
Attachments
img1234.png (130.42 KiB) Viewed 371 times
ค้นหาหมายเลข.xlsm
(22.53 KiB) Downloaded 18 times
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#4
Post
by snasui » Fri Feb 10, 2017 10:49 pm
คำค้นที่ว่านั้นคือค่าใดบ้างครับ
ตาม Code นั้นคอลัมน์ A จะต้องเป็น Text ทั้งหมดจึงจะนำไปค้นหาได้ครับ
ในไฟล์ที่แนบมา A2 ไม่ใช่ Text แต่เป็น Number จะต้องทำให้เป็น Text เหมือนเซลล์อื่น ๆ ครับ
trin
Member
Posts: 3 Joined: Mon Jan 23, 2017 4:57 pm
#5
Post
by trin » Sat Feb 11, 2017 10:35 am
ขอบคุณครับอาจารย์ ผมได้ปรับที่ชีตของexcel ให้เป็น text ทั้งหมดแล้วสามารถค้นหาได้โดยพิพม์เลขสมาชิกที่ Textbox1 ถ้าพิมพ์ถูก ชื่อและนามสกุลของสมาชิกก็จะมาแสดงที่ Textbox1
****
แต่ความต้องการไม่ใช่แบบนี้ครับ ที่ต้องการคือ สมมุติว่ามีสมาชิกมาติดต่อ แต่เขาจำหมายเลขสมาชิกตัวเองไม่ได้ เลยต้องการค้นหาจากชื่อหรือนามสกุล โดยผู้ใช้ excel จะค้นด้วยการพิมพ์ชื่อหรือนามสกุล แล้วให้ Textbox2 แสดงทุกแถวที่มีคำ ในคำค้นนั้นๆ ตัวอย่างเช่น สมาชิกชื่ออำนาจ พิมพ์คำว่า อำนาจ ลงในช่อง Textbox1 แล้วช่อง Textbox2 จะแสดงสมาชิกทุกคนที่ชื่อหรือนามสกุลมีคำว่า "อำนาจ" อยู่
(ก็คือจะค้นหาหมายเลขสมาชิกจากชื่อหรือนามสกุลก็ได้) โดย Box ที่จะแสดงจะต้องแสดงหมายเลขสมาชิกกับชื่อและนามสกุล คล้ายกับรูปที่ผมแนบมาครับ
Attachments
23.png (64.57 KiB) Viewed 361 times
ค้นหาหมายเลข.xlsm
(21.14 KiB) Downloaded 38 times
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#6
Post
by snasui » Sat Feb 11, 2017 11:07 am
การทำเช่นนั้นไม่จำเป็นต้องใช้ VBA ให้ยุ่งยาก ใช้สูตรก็เพียงพอแล้วครับ
หากจะใช้ VBA จำเป็นต้องปรับมาเองก่อนเสมอ ติดตรงไหนค่อยถามกันต่อครับ
kedsinee
Member
Posts: 2 Joined: Sat Feb 11, 2017 10:40 am
#7
Post
by kedsinee » Sat Feb 11, 2017 12:11 pm
สอบถามการใส่สูตร
ดิฉันมีปัญหาเกี่ยวกับการใช้สูตรนะค่ะ พอดีดิฉันมีไฟล์งานตัวนึงมาทำซึ่งโจทย์ที่ได้คือการคำนวณหาคะแนนโดยมีเงื่อนไขที่ว่า
หากทำยอดได้ 100%เต็ม จะได้คะแนนอยู่ที่ 30 คะแนน แต่ถ้ายอดที่ทำได้ตั้งแต่80%ลงมาจะไม่มีคะแนน ซึ่งโจทย์จะอยู่ที่ว่าถ้าทำได้อยู่ในช่วง 80-100 % จะได้คะแนนเท่าไหร่ เช่น ได้ 78% เราจะใช้สูตรแบบไหนในการคำนวณค่ะ
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#8
Post
by snasui » Sat Feb 11, 2017 12:15 pm
คุณ kedsinee กรุณาตั้งกระทู้ใหม่เนื่องจากว่าเป็นปัญหาที่ไม่เกี่ยวกับกระทู้นี้
การตั้งกระทู้ดูที่หัวข้อโปรดทราบหัวข้อที่ 4 ด้านบนครับ
pong2532
Member
Posts: 29 Joined: Wed Jun 29, 2016 4:14 pm
Excel Ver: 2007,2016
#9
Post
by pong2532 » Sat Feb 11, 2017 2:34 pm
ลองใช้คำสั่ง Find ดูครับ แล้วเปลี่ยนจาก Textbox2 เป็น Listbox แทน