गैर-रिक्त कक्षों की श्रेणी समान है या नहीं, यह जांचने के लिए मूल सूत्र


2

मेरे पास तीन सेल हैं, जिनमें से कोई भी संयोजन रिक्त हो सकता है। मैं जांचना चाहता हूं कि क्या सभी गैर-रिक्त कोशिकाएं समान हैं। यदि कक्षों 1 और 2 का मान है और कक्ष 3 रिक्त है, तो मैं चाहता हूं कि सूत्र TRUE को वापस करें यदि कोशिकाएं 1 और 2 समान हैं।

यदि इसके लिए कोई मूल सूत्र नहीं है तो मैं सिर्फ VBA मैक्रो लिखूंगा।

अद्यतन : यह वास्तव में सिर्फ एक VBA मैक्रो लिखने के लिए तेज था। मैं एक .NET / c # डेवलपर हूं और दिन में वापस से अपने VBA का एक बहुत कुछ भूल गया हूं, इसलिए मैं अपने कोड में सुधार के लिए खुला हूं (विशेषकर रिटर्न वैल्यू सेट करने और फ़ंक्शन से बाहर निकलने)।

Public Function NonblankValuesAreEqual(cells As Range) As Boolean

Dim lastval As String

lastval = cells(1).Value

For i = 2 To cells.Count
    If lastval <> "" Then
        If cells(i).Value <> "" Then
            If cells(i).Value <> lastval Then
                NonblankValuesAreEqual = False
                Exit Function
            End If
        End If
    End If
    lastval = cells(i).Value
Next

NonblankValuesAreEqual = True

End Function

@Steven TRUE ठीक रहेगा क्योंकि सूत्र की गतिकी यह तय करेगी कि यह स्वयं के बराबर है।
oscilatingcretin

@ काइल गोगलिंग। मेरा अगला कदम VBA मैक्रो लिखना है।
oscilatingcretin

जवाबों:


3

आप पहले से ही अपने आप को एक मैक्रो के साथ जवाब दे चुके हैं, लेकिन यहां एक गैर-वीबीए समाधान है। यह एक सरणी सूत्र है, और इसे ctrl + shift + enter से पुष्टि की जानी चाहिए:

=(SUM(IFERROR(1/COUNTIF(A1:A3,A1:A3),0))=1)

यह सूत्र रिक्त कक्षों की अनदेखी करते हुए आपकी सीमा में अद्वितीय मानों की संख्या को गिनाता है। यदि अनन्य मानों की संख्या 1 है, तो प्रत्येक मान समान है और सूत्र TRUE लौटाता है। केवल एक चीज जो आपके प्रश्न में निर्दिष्ट नहीं की गई थी, यदि प्रत्येक सेल रिक्त है तो क्या करना है। अभी सूत्र TRUE लौटाएगा, लेकिन इसे बदलने के लिए कुछ अतिरिक्त तर्क जोड़ना आसान होगा।


ध्यान रखें कि यह समाधान स्थिति-असंवेदनशील है (यानी: a = A)।
स्टीवन

प्रभावशाली! यह काम करता हैं। मैंने सरणी कार्यों के आसपास अपना सिर लपेटने की कोशिश की है, लेकिन कोई फायदा नहीं हुआ। मैं उन्हें कॉपी / पेस्ट / संशोधित कर सकता हूं, लेकिन मैं उन्हें लिख नहीं सकता। शायद किसी दिन। मेरी विशेष जरूरतों को केस-सेंसिटिविटी की आवश्यकता नहीं है, लेकिन मुझे लगता है कि किसी और की संभवतः है। उत्तर के रूप में इसे चिह्नित करने से पहले मैं इसे एक स्पिन के लिए थोड़ी देर के लिए छोड़ दूंगा।
ऑसिलेटिंग क्रेटिन

@oscilatingcretin आपको यह पसंद है। त्वरित और गंदा यह है कि सरणी सूत्र एक या अधिक समान श्रेणी या सरणियों को लेते हैं, सूत्र की गणना कई बार करते हैं क्योंकि आपके सरणी / श्रेणी में उनके तत्व हैं, और समान आकार की एक सरणी भी लौटाते हैं। इसीलिए, आम तौर पर, आपको परिणामों को किसी चीज में फीड करना होगा जो स्वाभाविक रूप से सरणियों को संभालती है, जैसे कि एसयूएम ()।
काइल

2

जांचें कि क्या प्रत्येक स्तंभ-जोड़ी बिल्कुल समान (केस-संवेदी) या रिक्त है।

=OR(EXACT(A2,B2),ISBLANK(A2),ISBLANK(B2))
=OR(EXACT(A2,C2),ISBLANK(A2),ISBLANK(C2))
=OR(EXACT(B2,C2),ISBLANK(B2),ISBLANK(C2))

=AND(D2:F2)

उदाहरण:

A   B   C   AB      AC      BC      AND
1   1   1   TRUE    TRUE    TRUE    TRUE
1   1       TRUE    TRUE    TRUE    TRUE
A           TRUE    TRUE    TRUE    TRUE
    A       TRUE    TRUE    TRUE    TRUE
        A   TRUE    TRUE    TRUE    TRUE
a   A   a   FALSE   TRUE    FALSE   FALSE
a   a       TRUE    TRUE    TRUE    TRUE
a       2   TRUE    FALSE   TRUE    FALSE
    A   A   TRUE    TRUE    TRUE    TRUE
A       A   TRUE    TRUE    TRUE    TRUE
    A   B   TRUE    TRUE    FALSE   FALSE
A   B   C   FALSE   FALSE   FALSE   FALSE

नोट: बड़े सेटों के लिए, आसन्न कॉलम की संख्या बहुत बढ़ जाएगी: n! / २


यह केवल संख्यात्मक प्रकारों के लिए काम करता है। ए, बी, ए की कोशिश करो। यह सूत्र स्ट्रिंग्स के लिए भी काम करना चाहिए, हालांकि यह संख्यात्मक प्रकारों के लिए एक रचनात्मक तरीका है।
oscilatingcretin

@oscilatingcretin स्ट्रिंग्स और संख्याओं के लिए गैर-VBA समाधान के लिए अद्यतन उत्तर देखें।
स्टीवन

0

इस छोटे UDF () का प्रयास करें :

Public Function EqualTest(r1 As Range, r2 As Range, r3 As Range) As Variant
   Dim BlankCount As Long, v1 As Variant, v2 As Variant, v3 As Variant
   v1 = r1.Value
   v2 = r2.Value
   v3 = r3.Value
   BlankCount = 0
   If v1 = "" Then BlankCount = BlankCount + 1
   If v2 = "" Then BlankCount = BlankCount + 1
   If v3 = "" Then BlankCount = BlankCount + 1

   If BlankCount > 1 Then
      EqualTest = True
      Exit Function
   End If

   If BlankCount = 0 Then
      If v1 = v2 And v1 = v3 And v2 = v3 Then
         EqualTest = True
         Exit Function
      Else
         EqualTest = False
         Exit Function
      End If
   End If

   If v1 = v2 Or v1 = v3 Or v2 = v3 Then
      EqualTest = True
   Else
      EqualTest = False
   End If
End Function

यहां छवि विवरण दर्ज करें

ध्यान दें:

कोशिकाओं को सन्निहित होने की आवश्यकता नहीं है और यूडीएफ () संख्यात्मक कोशिकाओं और पाठ कोशिकाओं दोनों के लिए काम करेगा।


बहुत गतिशील समाधान नहीं है। क्या होगा यदि मेरी सीमा में चार कोशिकाएँ हैं? आपने इसे वैसे ही पोस्ट किया जैसे मैंने अपने उत्तर में VBA समाधान पोस्ट किया है, इसलिए एक नज़र डालें।
oscilatingcretin

2
@oscilatingcretin मेरा कोड 3 कोशिकाओं को निर्दिष्ट करने वाले मूल पोस्ट से मिलता है ।
स्टूडेंट

आपको हमेशा शाब्दिक दृष्टिकोण लेने के बजाय गतिशील रूप से सोचना चाहिए। साथ ही, देखें कि आपका कोड कितना अधिक है और यह स्केलेबल भी नहीं है।
oscilatingcretin

@oscilatingcretin मुझे आपका कोड भी पसंद है।
स्टूडेंट

0

प्रयत्न:

=COUNTA(A:A)=COUNTIF(A:A,A1)

मूल रूप से नॉनब्लांक कोशिकाओं की संख्या की गणना करें। पहली कोशिका से मेल खाने वाली कोशिकाओं की संख्या गिनें। यदि वे समान हैं, तो वे सभी समान होने चाहिए। यह वास्तव में मायने नहीं रखता है कि आप दूसरे COUNTIF के लिए किसकी गणना करते हैं ... क्योंकि यह संभवतः COUNTA के बराबर नहीं होगा यदि वे सभी समान नहीं हैं;)

[संपादित करें] यदि आपका पहला सेल रिक्त हो सकता है .. इसके बजाय यह प्रयास करें:

=COUNTA(A:A)=COUNTIF(A:A,VLOOKUP("*",A:A,1,FALSE))

यह COUNTIF में जाँच करने वाला पहला गैर-रिक्त कक्ष खोजने का प्रयास करेगा।


1
लेकिन क्या होगा अगर A1 खाली है?
ऑसिलेटिंग क्रेटिन

हम्म, प्यारा .. आम तौर पर रिक्त कोशिकाएं बाद में होती हैं, पहले वाली नहीं .. लेकिन हाँ, आपको पहली गैर रिक्त सेल
Ditto
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.