ฉันจะค้นหาแบบสองมิติที่ส่วนหัวของคอลัมน์และแถวเป็นช่วงได้อย่างไร


0

ฉันมีสเปรดชีตที่มีตารางที่คล้ายกับโครงสร้างนี้:

      | 1-2 | 3-4 | 5-6 | 7+
-------------------------------
18-20 |  7  |  2  |  9  |  4  |
21-25 |  1  |  0  |  6  |  3  |
26-30 |  1  |  4  |  6  |  9  |
31+   |  3  |  8  |  5  |  0  |

ดังนั้นพูดเช่นปัจจัยการผลิตที่ฉันได้รับจากผู้ใช้ที่มีการค้นหาควรกลับ2, 19 7หรือถ้าปัจจัยการผลิตที่มีการค้นหาควรกลับ9, 299

ฉันรู้ว่าคุณสามารถทำสองมิติการค้นหาเมื่อคุณมีเพียงค่าเดียวในแถวและหัวข้อคอลัมน์โดยการรวมและVLOOKUP MATCHแต่ฉันจะค้นหาเมื่อส่วนหัวเป็นช่วงของค่าได้อย่างไร

ฉันต้องการเพียงแค่เขียนฟังก์ชั่น VBA ที่กำหนดเองหรือ Excel มีวิธีการทำเช่นนี้หรือไม่?

คำตอบ:


1

INDEX()สามารถทำการค้นหาสองมิติ INDEX(array,row_num,[col_num],[area_num])ไวยากรณ์ มันต้องใช้อาร์เรย์ 2D และส่งกลับจุดตัดของ row_num และ column_num

ปัญหาของคุณค่อนข้างยุ่งยากเพราะมีช่วงอยู่ในส่วนหัว แต่มีบางส่วนที่ทำงานได้รวดเร็วTRUNC()และIF()ทำงานได้ สูตรนี้เติมลงมาจาก D8 ในภาพหน้าจอด้านล่างแสดงผลลัพธ์:

=INDEX(B$2:E$5,IF(C8>31,4,TRUNC((C8-11)/5)),IF(B8>7,4,TRUNC((B8+1)/2)))

ป้อนคำอธิบายรูปภาพที่นี่

หากคุณต้องการดูวิธีการTRUNC()ทำงานของส่วนใส่=TRUNC((ROW()-11)/5)ในแถว 18 หรือTRUNC((ROW()+1)/2)ในแถว 1 และกรอกลงไป

ฉันหวังว่าสิ่งนี้จะช่วยและขอให้โชคดี


0

ระบุว่าคุณกำลังค้นหาในช่วงที่ไม่เหมือนกันและสมบูรณ์ (อย่างน้อยสำหรับค่า> = 18) ช่วงของคุณสามารถกำหนดโดยค่าแรกในแต่ละเซลล์ ตัวอย่างเช่นตารางที่คุณระบุสามารถอธิบายได้อย่างเท่าเทียมกันโดย:

ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นคุณสามารถค้นหาค่าของคุณโดยการรวม vlookup และการจับคู่ ตัวอย่างเช่นหากค่าตารางและการค้นหาของคุณถูกจัดเรียงตามภาพต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

ค่าที่คุณต้องการจะอยู่ในเซลล์ที่เน้นซึ่งจะมีสิ่งต่อไปนี้: = VLOOKUP (B $ 8, $ A $ 1: $ E $ 5, MATCH ($ A8, $ A $ 1: $ E $ 1,1), TRUE)


1
สันนิษฐานว่า OP มีช่วงอยู่ในส่วนหัวของเขาด้วยเหตุผลและต้องการให้พวกเขาอยู่ที่นั่น แต่งานที่ดีโดยใช้ MATCH type 1 และ VLOOKUP () พร้อมการจับคู่โดยประมาณเพื่อจัดการกรณีและปัญหาเมื่อค่าการค้นหาอยู่นอกช่วง
Bandersnatch

@Bandersnatch ขอบคุณ ฉันชอบแนวทางของคุณเช่นกัน ฉันเคยเห็นมาก่อนโพสต์คำตอบหรือไม่ฉันอาจไม่โพสต์ ปัญหาก็คือ OP จะต้องทำการคำนวณและซ้อนกันถ้าคำสั่งถ้ามีช่วงมากกว่าที่ไม่ได้มีขนาดเทียบเท่า อย่างไรก็ตามฉันคิดว่าหนึ่งหรือทั้งสองวิธีสามารถใช้โดย OP ขึ้นอยู่กับสถานการณ์ของพวกเขา
AlRacoon

0

เนื่องจากเลเบลมีรูปแบบที่ดีซึ่งในกรณีของเลเบลหมายถึงโดยทั่วไปพวกมันจะถูกเรียงลำดับราวกับว่าพวกเขาเรียงลำดับจากน้อยไปมากโดยใช้รหัสอักขระของอักขระตัวแรกจึงสามารถใช้ประโยชน์จากอาร์กิวเมนต์สุดท้ายใน VLOOKUP () และ HLOOKUP () โดยเลือกตัวเลือก "การจับคู่โดยประมาณ"

คุณทำสิ่งนี้เพื่อสร้างค่าการค้นหาและคอลัมน์เพื่อค้นหา VLOOKUP () ซึ่งจะทำงานสุดท้าย

ในท้ายที่สุดคุณจะมี VLOOKUP () ง่ายๆ มีอะไรให้ค้นหาบ้าง สมมติว่าตารางที่คุณแสดงคือ A1: E5 พร้อมป้ายชื่อแถวใน A2: A5 (ไม่รวมแถวแรกนั้น) และป้ายชื่อคอลัมน์อยู่ใน B1: E1 (ไม่รวมคอลัมน์แรกนั้น) และข้อมูลจริงใน B2 : E5 หากคุณรวมแถวและคอลัมน์แรก (A1) ไว้คุณจะได้รับข้อผิดพลาด # N / A และสมมติว่าคุณจัดการกับการรับค่าอินพุตด้วยตัวเองดังนั้นอย่างไรก็ตามวัสดุ "2, 19" ถูกสร้างขึ้นอย่างไรก็ตามมันก็มีให้ใช้งาน (ฉันจะเรียกมันว่า "คอลัมน์เพื่อค้นหา" และ "แถวเพื่อดู") :

=HLOOKUP( "Row to look in" , A1:A5 , 1, TRUE )

จะส่งคืน "18-20" ซึ่งเราจะใช้โดยตรงเป็นค่าการค้นหาและ

=VLOOKUP( "Column to look in" , A1:E1 , 1 , TRUE )

จะกลับมา "1-2" และนี่คือที่ "เคล็ดลับเล็กน้อย" เข้ามา

ถ้าเราตัดฟังก์ชั่นสุดท้ายนั้นในฟังก์ชั่น MATCH () มันจะใช้ "1-2" เพื่อค้นหาหมายเลขคอลัมน์เพื่อดูว่า VLOOKUP สุดท้าย () ต้องการอะไร (บุคคลนิรนามบนไซต์ UserVoice ของ Excel แสดงสิ่งนี้ให้ฉัน)

ตอนนี้คุณต้องใช้ช่วงที่เราเพิ่งหลีกเลี่ยง A1: E1 เพื่อรับหมายเลขคอลัมน์โดยตรง หากคุณเริ่มต้นด้วย B1 คุณต้องเพิ่ม "1" ลงในผลลัพธ์ดังนั้นการอ่านและทำความเข้าใจจะง่ายกว่า:

=MATCH(  VLOOKUP( "Column to look in" , A1:E1 , 1 , TRUE )  , A1:E1 )

ซึ่งส่งกลับค่า "2" สำหรับคอลัมน์ (โดยบังเอิญไม่มีอะไรเพิ่มเติมเหมือนกับข้อมูลของเรา แต่ไม่ยอมรับความสับสนในเกมของคุณ!) ดังนั้นในที่สุดคุณจะรวมทั้งหมดเป็น:

=VLOOKUP( HLOOKUP( "Row to look in" , A1:A5 , 1, TRUE ) , A1:E5 , MATCH( VLOOKUP( "Column to look in" , A1:E1 , 1 , TRUE ) , A1:E1 ) , FALSE )

ใช้ "FALSE" เพราะคุณมีคู่ที่ตรงกันหรือมีบางอย่างผิดพลาดเล็กน้อย

(ถ้าเฉพาะคอลัมน์หรือแถวที่แก้ไขได้เท่านั้นคุณยังสามารถปรับได้ที่นี่คุณมีเวลาที่ยากขึ้นเพราะมีเพียงครึ่งเดียวเท่านั้นที่แก้ไขได้ด้วยสิ่งนี้ แต่นั่นก็เพียงพอแล้วฉันได้พบฉันใช้แล้ว อาจจะเป็น 6-8 ครั้งตั้งแต่ฉันได้เรียนรู้แนวคิด MATCH () เพื่อให้ได้ส่วนหัวของแถว / คอลัมน์กลับมาเป็นฟังก์ชั่นป้ายกำกับและครึ่งหนึ่งของพวกเขามีเพียงคนเดียวเท่านั้นที่ "ruly")


(1) มันจะค่อนข้างมีประโยชน์ถ้าคุณพูดชัดแจ้งอย่างชัดเจนภายใต้เงื่อนไขที่ว่าเลเบลช่วงนั้นหรือมีรูปแบบไม่ดีและให้ตัวอย่างของเลเบลที่ไม่ได้มีรูปแบบที่ดี (2) คุณสามารถอธิบายได้ชัดเจนขึ้นอีกเล็กน้อยว่าจะจัดการกับฉลากที่ไม่ได้ขึ้นรูปได้ดีหรือไม่?
สกอตต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.