นับค่าที่ไม่ว่างหลังจากผลิตภัณฑ์คาร์ทีเซียนใน excel


2

ฉันหวังว่าคำอธิบายของฉันจะถูกต้อง; ยินดีต้อนรับการปรับปรุง
ฉันมี 2 ตารางใน Excel ในตารางที่ 1 มี 2 คอลัมน์ A และ B ความสัมพันธ์แบบหลายต่อหลายอาจเป็นไปได้
ในตารางที่ 2 มี 2 คอลัมน์คือ A และ B เหล่านี้เป็นรายการที่แตกต่างกัน
Table1-ColumnB และ Table2-ColumnA เป็นค่าเดียวกัน - เป็น foreign key ถ้าคุณต้องการ

ฉันมีรายการค่าความแตกต่างจาก Table1-ColumnA ในรายการผลลัพธ์ ฉันจำเป็นต้องรู้ว่าสำหรับแต่ละรายการในรายการนี้ถ้าหลังจากการเข้าร่วมในต่างประเทศที่สำคัญถ้าทุกค่าที่เกี่ยวข้องใน Table2-Column2 ว่างเปล่า (ฉันไม่จำเป็นต้องรู้ว่ามีเนื้อหาอะไรเฉพาะเมื่อมีเนื้อหา)

ทั้งหมดนี้ต้องทำในเซลล์เดียวใน excel

ตารางและผลลัพธ์


คุณสามารถเพิ่มตัวอย่างพื้นฐานของข้อมูลและผลลัพธ์ที่ต้องการได้หรือไม่? คอลัมน์ใดของคุณมีข้อ จำกัด ที่เป็นเอกลักษณ์หรือไม่?
freekvd

@fanvd ฉันลองสกรีนช็อตมีคะแนนไม่พอ ... จะลองแก้ไขและเพิ่มตาราง
tithij

ผมหวังว่าฉันสามารถปรับตัวเข้ากับสูตรที่พบที่นี่ผลรวมของ VLOOKUP ใช้สูตรอาร์เรย์ คำตอบแรกขึ้นอยู่กับการจัดลำดับข้อมูลที่ถูกต้องซึ่งฉันไม่สามารถทำได้ และฉันสามารถทำให้ชิ้นที่สองทำงานได้ - ฉันคิดว่าเกี่ยวข้องกับส่วน ISNUMBER แต่ฉันไม่แน่ใจ
tithij

คำตอบ:


1

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

Option Explicit
Function Results(cell As Range, table_1 As Range, table_2 As Range) As String
Dim aTable1() As Variant
Dim aTable2() As Variant
aTable1 = table_1.Value
aTable2 = table_2.Value
Dim i As Long, j As Long 'counters

For i = 1 To UBound(aTable1, 1)
    If aTable1(i, 1) = cell.Value Then
        For j = 1 To UBound(aTable2, 1)
            If aTable1(i, 2) = aTable2(j, 1) Then
                If Not IsEmpty(aTable2(j, 2)) Then
                    Results = Results & aTable2(j, 1) & " has content, "
                Else
                    Results = Results & aTable2(j, 1) & " has no content, "
                End If
            End If
        Next
        If Results = vbNullString Then
            Results = aTable1(i, 2) & " NOT FOUND"
            GoTo Ending
        End If
    End If
Next
Results = Left(Results, Len(Results) - 2)
If (Len(Results) - Len(Replace(Results, "has", ""))) / 3 = _
(Len(Results) - Len(Replace(Results, "no", ""))) / 2 Then
    Results = "BLANK - " & Results
End If

Ending:
End Function

นี้เป็นผลที่คุณจะได้รับ: UDF คุณยังสามารถใช้การอ้างอิงช่วงปกติเช่นในฉันจะได้ยังแทรกสูตรนี้I3=Results(H3,B$3:C$13,E$3:F$10)

วางรหัสลงใน VBA Editor ( Alt + F11 ) ในโมดูล "Module1" ที่เพิ่งแทรก (ไม่ใช่ในโมดูล "ThisWorkbook" หรือ "Sheet")


ขอบคุณสำหรับข้อมูล. เมื่อวางในเครื่องมือแก้ไข VBA ฉันจะให้มันทำงานบนข้อมูลของฉันได้อย่างไร นอกจากนี้ฉันยังได้รับปัญหาการอ้างอิงแบบวงกลมด้วยรหัสResults(H3,B$3:C$13,E$3:F$10)ที่คุณวาง ความคิดใด ๆ
tithij

ขอบคุณ @ZygD; ฉันพบสิ่งที่คุณทำในตารางผลลัพธ์ เหมาะสมแล้ว ... สเปรดชีตของฉันถูกตั้งค่าแตกต่างกันดังนั้นฉันจึงมีข้อผิดพลาด! ขอบคุณ
tithij

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