นับค่าสูงสุดเปรียบเทียบกับอาร์เรย์ก่อนหน้า


1

ฉันพยายามนับจำนวนค่าในแถวที่เท่ากันมีค่ามากกว่า MAX () ค่าของ (ส่วนหนึ่ง) ของคอลัมน์ด้านบน

ตัวอย่างเช่น: เมื่อเปรียบเทียบกับ 3 เซลล์ด้านบนนั้นเอง ใน E มา 'นับ' ฉันทำเครื่องหมายเซลล์ที่ควรนับด้วย *

enter image description here

อาร์เรย์สุดท้ายของฉันประมาณ 200x5000 ... ฉันได้ลอง (ตัวอย่างเซลล์ E4) แล้วเช่น:

{=SUM(IF(A4:D4>=MAX(OFFSET(A1,ROW($1:$4)-1,0,3,1)),1,0))}

{=COUNTIF(A4:D4,">="&MAX(OFFSET(A1,0,ROW($1:$4)-1,3,1)))}

หวังว่า ROW () & amp; OFFSET () ฟังก์ชั่นจะแยกฟังก์ชั่น MAX มากกว่าคอลัมน์ ... แต่ไม่มีใครให้ผลลัพธ์ที่ดี แน่นอนฉันสามารถแยก MAX () มากกว่า 200 คอลัมน์ที่แตกต่างกันในแผ่นงานที่แตกต่างกัน แต่ฉันฝันร้ายเพราะฉันทำมันไม่ได้ในสูตรอาเรย์เดี่ยว

คำตอบ:


2

หากคุณกำลังมองหาวิธีที่ใช้ฟังก์ชันแผ่นงานอย่างเคร่งครัดอาจเป็นไปได้ว่านี่อาจไม่ใช่โซลูชันที่แนะนำ แต่ที่นี่ฉันใช้ UDF ขนาดเล็ก (ฟังก์ชันที่กำหนดโดยผู้ใช้) เพื่อทำให้งานง่าย

UDF นี้ใช้ในช่วงและส่งกลับอาร์เรย์ของ Max ของแต่ละคอลัมน์ในช่วงนั้น

กด ALT + F11 เพื่อเข้าถึงตัวแก้ไข VBA แทรกโมดูลจากเมนูแทรก ตอนนี้ใส่รหัสต่อไปนี้ลงไป

Function Ret_Arr(inpt As Range) As Variant


Dim v As Variant

ReDim v(1 To inpt.Columns.Count)

For i = 1 To inpt.Columns.Count

    v(i) = Application.Max(inpt.Columns(i))

Next i

Ret_Arr = v


End Function

โปรดทราบว่าไม่มีการตรวจสอบมากใส่ไว้ในรหัสพื้นฐานนี้เพื่อให้มีประสิทธิภาพในกรณี

สิ่งนี้ใช้ในช่วงและส่งกลับอาร์เรย์ของ Max จากแต่ละคอลัมน์ที่คุณสามารถใช้ในสูตรอาร์เรย์ของคุณ

บันทึกรหัส VBA และแผ่นงานเป็นแผ่นงานที่เปิดใช้งานแมโคร XLSM ในกรณีที่คุณใช้ Excel 2007 ขึ้นไป

ในตัวอย่างข้อมูลตัวอย่างนี้อยู่ในเซลล์ A1: D8 ใน E2 ให้ใส่สูตรต่อไปนี้แล้วกด CTRL + SHIFT + ENTER จากภายในแถบสูตรเพื่อสร้างสูตรอาร์เรย์

สูตรจะต้องอยู่ในเครื่องหมายปีกกาเพื่อแสดงว่าเป็นสูตรอาร์เรย์

=SUM(IF($A2:$D2>=Ret_Arr($A$1:D1),1,0))

ตอนนี้สำหรับแต่ละช่วงข้างบน Ret_Arr จะส่งคืนอาร์เรย์ของ Max ของแต่ละคอลัมน์ หากคุณไม่ผ่านช่วงที่ถูกต้องไปยัง Ret_Arr คุณอาจได้รับผลลัพธ์ที่ผิดพลาด ดังนั้นหากคอลัมน์ที่มีปัญหาของคุณคือ A ถึง D โปรดตรวจสอบให้แน่ใจว่าส่งผ่านช่วงของคอลัมน์ A ถึง D ไปที่ UDF

enter image description here


ทำงานได้สมบูรณ์ 10 ☺
Rajesh S

ขอบคุณ ฉันจะไปกับ VBA มันเป็นทางออกที่สง่างาม แต่ฉันก็ยังประหลาดใจที่ไม่สามารถทำตามสูตรได้
R.T.

0

ใน E4, สูตรอาร์เรย์ **:

=COUNT(1/(MMULT(TRANSPOSE(ROW(A$1:D3)^0),N(A4:D4>=A$1:D3))=ROWS(A$1:D3)))

คัดลอกลงตามต้องการ

ความนับถือ

** ไม่ได้ป้อนสูตรอาร์เรย์ในวิธีเดียวกับสูตร 'มาตรฐาน' แทนที่จะกดแค่ ENTER คุณต้องกด CTRL และ SHIFT ค้างไว้ก่อนแล้วกด ENTER หากคุณทำอย่างถูกต้องคุณจะสังเกตเห็นว่า Excel ใส่เครื่องหมายวงเล็บปีกกา {} ไว้รอบสูตร

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.