ต้องการเรียนรู้วิธีการใช้งาน ค้นหาฟังก์ชันใน VBA🇧🇷 ถ้าอย่างนั้นคุณก็มาถูกที่แล้ว!
ใครไม่รู้จักตัวเลือกการค้นหาใน Excel หากคุณใช้งาน Excel มาระยะหนึ่งแล้ว คุณอาจเคยใช้ฟังก์ชัน SEARCH หรือปุ่มลัดยอดนิยม Ctrl + L เพื่อค้นหาคำหรือเนื้อหาที่คุณต้องการค้นหาในเวิร์กชีตทั้งหมดของคุณ เช่นเดียวกับสมุดงานทั้งหมด
นอกจากนี้ ใน VBA เรามีฟังก์ชันที่เรียกว่า FIND ที่สามารถช่วยให้เราค้นหาค่าที่เราต้องการได้
ปฏิบัติตามรายละเอียดด้านล่างเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับคุณสมบัตินี้ผ่านตัวอย่างที่ใช้งานได้จริง
ฟังก์ชัน FIND ทำงานอย่างไรใน VBA
ฟังก์ชัน Excel VBA FIND จะค้นหาค่าเฉพาะภายในช่วงที่กำหนด ค้นหาการเกิดขึ้นครั้งแรกของค่านั้น และถ้าพบ ฟังก์ชันจะส่งกลับเซลล์ที่มีค่านั้น อย่างไรก็ตาม หากไม่พบรายการที่ตรงกัน ฟังก์ชันจะไม่คืนค่าใดๆ ฟังก์ชัน VBA FIND สามารถส่งคืนการจับคู่แบบตรงทั้งหมดหรือบางส่วน
ตัวอย่างเช่น รหัสต่อไปนี้ค้นหาข้อความ "นักบุญพอล» ในช่วงเวลา A1: A10 ใน "ใบงาน1🇧🇷
มีชีต("Sheet1").Range("A1:A10") ตั้ง Rng = .Find(อะไร:="เซาเปาโล")
วัตถุประสงค์ของการใช้ฟังก์ชัน FIND ใน VBA คือการค้นหาค่าที่ต้องการในชุดข้อมูลที่กำหนด ด้วยรหัส VBA คุณสามารถทำงานค้นหาค่าใน Excel ได้โดยอัตโนมัติ
ไวยากรณ์ของฟังก์ชัน VBA FIND
ไวยากรณ์ของฟังก์ชัน VBA FIND มีการประกาศดังนี้:
expression.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)
Dónde:
นิพจน์: เป็นวัตถุช่วงซึ่งอยู่ก่อนหน้าฟังก์ชัน FIND ในรหัส VBA ช่วงการค้นหาอาจเป็นแถว คอลัมน์ หรือทั้งสเปรดชีตตั้งแต่หนึ่งแถวขึ้นไป ฟังก์ชัน VBA FIND ยอมรับอาร์กิวเมนต์ต่อไปนี้:
- Qué: นี่คือคุณค่าที่ควรมองหา อาจเป็นตัวเลข ข้อความ หรือข้อมูลประเภทอื่นๆ ของ Excel อาร์กิวเมนต์นี้เหมือนกับตัวเลือกค้นหาของ "ค้นหาและแทนที่” จากเอ็กเซล
- แล้ว: ระบุเซลล์ที่จะเริ่มต้นการค้นหา มันถูกป้อนเป็นการอ้างอิงเซลล์เดียว หากไม่ระบุอาร์กิวเมนต์นี้ การค้นหาจะเริ่มต้นหลังจากเซลล์ที่มุมซ้ายบนของช่วงการค้นหาที่ระบุ
- ดูใน: นี่คือตำแหน่ง (หรือข้อมูล) ที่ควรค้นหาค่า อาจเป็นความคิดเห็น (xlComments) สูตร (xlFormulas) หรือค่า (xlValues) ค่าเริ่มต้นสำหรับอาร์กิวเมนต์นี้คือ xlFormulas นอกจากนี้ อาร์กิวเมนต์นี้เหมือนกับตัวเลือกค้นหาของ "ค้นหาและแทนที่” จากเอ็กเซล
- ดู: อาร์กิวเมนต์นี้กำหนดว่าจะจับคู่เนื้อหาของเซลล์ทั้งหมด (ตรงกันทุกประการ) หรือเนื้อหาของเซลล์บางส่วน (ตรงกันบางส่วน) ค่าคงที่คือ xlWhole และ xlPart สำหรับการจับคู่แบบตรงทั้งหมดและบางส่วน ตามลำดับ ค่าเริ่มต้นสำหรับอาร์กิวเมนต์นี้คือ xlPart
- ลำดับการค้นหา: อาร์กิวเมนต์นี้แนะนำลำดับการค้นหา คุณสามารถระบุว่าการค้นหาจะเป็นแถว (xlByRows) หรือคอลัมน์ (xlByColumns) ค่าเริ่มต้นสำหรับอาร์กิวเมนต์นี้คือ xlByRows นอกจากนี้ อาร์กิวเมนต์นี้เหมือนกับตัวเลือกค้นหาของ "ค้นหาและแทนที่” จากเอ็กเซล
- ค้นหาที่อยู่: ระบุที่อยู่ที่จะทำการค้นหา คุณสามารถค้นหาจากด้านล่างหรือไปยังเซลล์ถัดไปด้วยค่าคงที่ xlNext หรือคุณสามารถค้นหาย้อนหลัง (ขึ้น) หรือในเซลล์ก่อนหน้าด้วยค่าคงที่ xlPrevious ค่าเริ่มต้นสำหรับอาร์กิวเมนต์นี้คือ xlNext
- กรณีจับคู่: อาร์กิวเมนต์นี้ตัดสินว่าการค้นหาควรคำนึงถึงขนาดตัวพิมพ์หรือไม่ หากการค้นหาคำนึงถึงขนาดตัวพิมพ์ อาร์กิวเมนต์นี้จะถูกระบุเป็นจริง (TRUE) มิฉะนั้นจะเป็นเท็จ (FALSE) ค่าเริ่มต้นสำหรับอาร์กิวเมนต์นี้คือ False
- MatchByte: ควรใช้อาร์กิวเมนต์นี้หากมีคนติดตั้งหรือเลือกการสนับสนุนภาษาแบบสองไบต์ ต้องระบุเป็นจริงถ้าอักขระแบบไบต์คู่ตรงกับอักขระแบบไบต์คู่ ควรระบุเป็นเท็จหากต้องจับคู่อักขระแบบไบต์คู่กับค่าเทียบเท่าแบบไบต์เดียว
- รูปแบบการค้นหา: ระบุว่าค่าที่จะค้นหาควรอยู่ในรูปแบบเฉพาะ (เช่น ตัวหนาหรือตัวเอียง) หรือไม่ หากค่าการค้นหาต้องเป็นไปตามเทคนิคการจัดรูปแบบ อาร์กิวเมนต์นี้จะถูกระบุเป็นจริง มิฉะนั้นจะเป็นเท็จ ค่าเริ่มต้นของอาร์กิวเมนต์นี้เป็นเท็จ (FALSE)
เพียงแค่อาร์กิวเมนต์ สิ่งที่ มันจำเป็น. อาร์กิวเมนต์อื่น ๆ เป็นทางเลือก
ฟังก์ชัน FIND ส่งกลับหนึ่งในผลลัพธ์ต่อไปนี้:
- หากพบค่าที่ตรงกัน ฟังก์ชันจะส่งกลับเซลล์แรกที่พบค่านั้น
- หากไม่พบรายการที่ตรงกัน ฟังก์ชันจะไม่คืนค่าใดๆ เนื่องจากวัตถุฟังก์ชันถูกตั้งค่าเป็นค่าว่าง
อีกทางหนึ่ง หากไม่พบรายการที่ตรงกัน ข้อความที่กำหนดเองจะระบุผ่านทาง ฟังก์ชั่นกล่องข้อความ สามารถส่งคืนได้ (ดูตัวอย่างโค้ดด้านล่าง)
หมายเหตุ 1: การค้นหาเริ่มต้นหลังจากเซลล์ที่ระบุในอาร์กิวเมนต์ แล้วก็ และดำเนินการต่อไปยังเซลล์สุดท้ายในช่วงการค้นหา หากไม่พบค่าจนกระทั่งเซลล์สุดท้ายนี้ การค้นหาจะเริ่มต้นอีกครั้งจากเซลล์แรกในช่วงการค้นหาไปยังเซลล์ที่ระบุในอาร์กิวเมนต์ แล้วก็🇧🇷
ดังนั้นเซลล์ที่ระบุในอาร์กิวเมนต์ แล้วก็ มันถูกค้นหาเมื่อสิ้นสุดกระบวนการค้นหา สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับการใช้อาร์กิวเมนต์ แล้วก็ดูตัวอย่างที่สองในบทความนี้
หมายเหตุ 2: ทุกครั้งที่ใช้ฟังก์ชัน VBA FIND ไฟล์ มองเข้าไป🇧🇷 ดูที่🇧🇷 ลำดับการค้นหา y MatchByte จะถูกบันทึก ดังนั้นหากค่าเหล่านี้ถูกละเว้นในครั้งต่อไปที่ใช้ฟังก์ชัน Excel จะใช้ค่าที่บันทึกไว้ก่อนหน้านี้ ดังนั้น ขอแนะนำให้ประกาศอาร์กิวเมนต์ที่ให้ไว้อย่างชัดแจ้ง เมื่อใดก็ตามที่ทำการค้นหาโดยใช้ฟังก์ชัน VBA FIND
จะใช้ฟังก์ชัน FIND ใน Excel VBA ได้อย่างไร?
เพื่อให้คุณเข้าใจการใช้ฟังก์ชัน FIND ใน VBA เราได้แยกตัวอย่างที่ใช้งานได้จริงไว้ด้านล่าง
ตัวอย่างที่ 1: การเลือกเซลล์ที่มีค่าการค้นหาเกิดขึ้นครั้งแรก
ในตัวอย่างแรกนี้ สมมติว่าคุณมีรายการที่มีบางชื่อตามที่แสดงในรูปภาพด้านล่าง และคุณต้องการเรียกดูและเลือกเซลล์ที่มีชื่อนั้น เปโดร🇧🇷
จากนั้นทำตามขั้นตอนเหล่านี้:
1. เข้าถึงคำแนะนำ ผู้พัฒนา 🇧🇷 วิชวลพื้นฐาน🇧🇷 (หากคุณไม่ได้เปิดใช้งานแท็บนักพัฒนาใน Excel ของคุณ ตรวจสอบที่นี่ เป็นขั้นเป็นตอน).
ทั้งสอง บนหน้าจอ VBA ให้เลือกแผ่นงานที่ต้องการจากเมนูด้านซ้าย ในตัวอย่างนี้ เราจะเลือก ใบงาน1 ซึ่งเป็นใบงานที่มีรายชื่อ
3. หลังจากเลือกเวิร์กชีตที่ต้องการแล้ว ในพื้นที่ทางด้านขวา ให้ป้อนรหัสด้านล่าง:
ชื่อตำแหน่งย่อย () ช่วง("A1:A10").ค้นหา(อะไร:="ปีเตอร์").เลือก ย่อยสิ้นสุด
- โปรดสังเกตในโค้ดด้านบนว่าเราได้กล่าวถึงช่วงที่เราต้องการ (A1: A10🇧🇷
- หลังจากระบุช่วงแล้ว ให้ใส่จุด (.) แล้วพิมพ์ หา🇧🇷
- อาร์กิวเมนต์แรกของเราคือสิ่งที่เรากำลังมองหา เพื่อเน้นอาร์กิวเมนต์ เราสามารถส่งอาร์กิวเมนต์ อะไร:=สิ่งนี้จะเป็นประโยชน์ในการระบุว่าเรากำลังอ้างถึงพารามิเตอร์ใด
- ส่วนสุดท้ายคือหลังจากค้นหาคำที่เราต้องการจะทำ เราต้องเลือกคำ ดังนั้นส่งอาร์กิวเมนต์เป็น เลือก🇧🇷
- จากนั้นเรียกใช้รหัสนี้โดยใช้รหัส F5 หรือด้วยตนเองตามที่แสดงในภาพด้านล่างเพื่อเลือกเซลล์แรกที่มีชื่อ เปโดร🇧🇷
ตัวอย่างที่ 2: เลือกเซลล์ที่มีค่าการค้นหาเกิดขึ้นเป็นครั้งที่สอง
ในตัวอย่างที่สองนี้ โปรดทราบว่ารูปภาพต่อไปนี้มีชื่อบางชื่อในช่วง A1:A10 โปรดทราบว่าชื่อ "เปโดร” ปรากฏขึ้นสองครั้งในคอลัมน์ A
ในกรณีนี้ เราต้องการค้นหาและเลือก เกิดขึ้นครั้งที่สอง ของชื่อ “ปีเตอร์” ในคอลัมน์ A (นั่นคือเซลล์ A7) ในการทำเช่นนี้เราจะใช้รหัสต่อไปนี้:
ชื่อตำแหน่งย่อย () ช่วง("A1:A10").ค้นหา(อะไร:="ปีเตอร์", หลัง:=ช่วง("A2")).เลือก ย่อยสิ้นสุด
โปรดสังเกตในโค้ดด้านบนว่าการค้นหาเริ่มต้นหลังจากเซลล์ A2 และดำเนินต่อไปยังเซลล์สุดท้ายในคอลัมน์ A เนื่องจากมีการระบุช่วงการค้นหาเป็นคอลัมน์ A (A1:A10)
ดังนั้น เนื่องจากการค้นหาเริ่มต้นในเซลล์ A3 ค่า “เปโดร” อยู่ในเซลล์ A7 ให้ "สเปรดชีต2🇧🇷 ดังนั้น เซลล์ A7 จะถูกเลือกโดยฟังก์ชัน FIND เมื่อรันโค้ด
ถ้าชื่อ «เปโดรไม่พบ ” ในเซลล์ A3 จนกระทั่งเซลล์สุดท้ายในคอลัมน์ A การค้นหาอีกครั้งจะเริ่มต้นที่เซลล์ A1 และสิ้นสุดที่เซลล์ A2 ในครั้งนี้ ดังนั้น เซลล์ที่ระบุในอาร์กิวเมนต์ “แล้วก็” ถูกค้นหาเมื่อสิ้นสุดกระบวนการค้นหา
ตัวอย่างที่ 3: ค้นหาข้อความโดยระบุอักขระบางตัว
หากต้องการค้นหาข้อความโดยระบุเพียงบางส่วน ให้ป้อนอาร์กิวเมนต์ ดูที่ ในขณะที่ xlส่วน หรือละเว้นอาร์กิวเมนต์นี้ ตามค่าเริ่มต้น ฟังก์ชัน FIND จะจับคู่อักขระในค่าการค้นหากับสตริงทั้งหมด จากนั้นจะส่งกลับเซลล์ที่มีสตริงทั้งหมดนี้
ดูตัวอย่างด้านล่าง:
ชื่อตำแหน่งย่อย () ช่วง("A1:A10").ค้นหา(อะไร:="Ped", LookAt:=xlPart).เลือก ย่อยสิ้นสุด
รหัสนี้ค้นหาอักขระ "เป็ด” ในช่วง A1:A25 ของ “Sheet3” เซลล์ที่มีค่าจะถูกส่งคืน ซึ่งมีชื่อ การติดต่อบางส่วน🇧🇷 ดังนั้น ไม่ว่าอักขระค่าการค้นหาจะอยู่ที่จุดเริ่มต้น ตรงกลาง หรือจุดสิ้นสุดของสตริง Excel VBA จะส่งกลับค่าที่ตรงกัน
สังเกต: ค่าคงที่ xlส่วน สามารถตัดออกจากรหัสได้เนื่องจากเป็นค่าเริ่มต้นของฟังก์ชัน FIND แต่หากมีการระบุอาร์กิวเมนต์นี้ ตรวจสอบให้แน่ใจว่าไม่ได้อยู่ในอัญประกาศคู่
ตัวอย่างที่ 4: การค้นหาข้อความภายในความคิดเห็น
คุณยังสามารถใช้ฟังก์ชัน VBA FIND เพื่อค้นหาข้อความภายในความคิดเห็นของเซลล์ใน Excel
เพื่อความเข้าใจที่ดีขึ้น โปรดดูตัวอย่างด้านล่างซึ่งเรามีเวิร์กชีตที่มีสามเซลล์พร้อมความคิดเห็น (ระบุด้วยสามเหลี่ยมสีแดง) จากนี้เราต้องการค้นหาข้อความ “ค่าคอมมิชชั่นที่จ่าย” อยู่ภายในหนึ่งในความคิดเห็น ในกรณีนี้ เราจะใช้รหัสต่อไปนี้:
ค้นหาตำแหน่งย่อย () ช่วง("A1:B10").ค้นหา(อะไร:="ค่าคอมมิชชันที่จ่าย", LookIn:=xlComments).เลือก ย่อยสิ้นสุด
ด้วยเหตุนี้ Excel จะเลือกเฉพาะเซลล์ที่มีความคิดเห็นซึ่งมีข้อความระบุไว้ในโค้ดของเรา
ตัวอย่างที่ 5: การจัดการข้อผิดพลาดในฟังก์ชัน FIND ใน VBA
ในกรณีที่ข้อความที่เราต้องการไม่อยู่ในช่วงที่กำหนด VBA จะส่งกลับข้อผิดพลาดที่แสดงด้านล่าง:
เพื่อหลีกเลี่ยงข้อผิดพลาดนี้ เราสามารถใช้รหัสที่แสดงด้านล่าง:
ชื่อตำแหน่งย่อย () หรี่ผลลัพธ์เป็นตัวแปร เกี่ยวกับข้อผิดพลาดต่อไป ช่วง("A1:A10").ค้นหา(อะไร:="Cristina").เลือก เมื่อเกิดข้อผิดพลาด GoTo 0 ผลลัพธ์ = ActiveCell.Value ถ้าผลลัพธ์ = "" แล้ว MsgBox "ค่าที่คุณกำลังมองหาไม่มีอยู่ในช่วงที่กำหนด!" ออกจาก Sub End If ย่อยสิ้นสุด
สังเกตในโค้ดด้านบนว่าถ้า VBA พบค่า จะแสดงค่าที่พบ หรือมิฉะนั้นจะแสดงข้อความเป็น "ค่าที่คุณต้องการไม่มีอยู่ในช่วงที่กำหนด🇧🇷
สำหรับเคล็ดลับเพิ่มเติมเกี่ยวกับวิธีแก้ไขข้อผิดพลาด VBA โปรดดูบทความ: ข้อผิดพลาด Excel VBA: ทุกสิ่งที่คุณต้องรู้!
รายละเอียดที่ต้องจำ
- ฟังก์ชัน FIND เป็นส่วนหนึ่งของคุณสมบัติ RANGE และคุณควรใช้ FIND หลังจากเลือกเฉพาะช่วง
- ในฟังก์ชัน FIND อาร์กิวเมนต์แรก (สิ่งที่) และอย่างอื่นทั้งหมดเป็นตัวเลือก
- หากคุณพบค่าหลังจากเซลล์ใดเซลล์หนึ่ง คุณสามารถระบุเซลล์นั้นในพารามิเตอร์ได้ แล้วก็ ของไวยากรณ์การค้นหา
ดาวน์โหลดสเปรดชีตที่นี่ มีตัวอย่างที่นำเสนอในบทช่วยสอนนี้
ตรวจสอบเคล็ดลับ Excel ต่อไปนี้ด้วย:
คุณคิดอย่างไรกับฟังก์ชัน FIND ใน VBA หากคุณมีคำถามใด ๆ โปรดแสดงความคิดเห็นของคุณด้านล่าง ตรวจสอบเคล็ดลับ Excel และ VBA เพิ่มเติมบนเว็บไซต์ของเรา!