एक्सेल ड्रॉप डाउन सूची में मूल्य कैसे बदलें


1

मेरे पास एक कॉलम है जो डेटा सेट का उपयोग करके लागू किए गए पूर्वनिर्धारित सेट (एक ड्रॉप-डाउन सूची) से मूल्यों का उपयोग करता है । अब अगर मैं सूची में कुछ मूल्य बदलूं , तो ड्रॉप डाउन (जब खुला) तुरंत इस नए मूल्य की पेशकश करेगा। हालांकि, तालिका स्वयं को अपडेट नहीं करेगी , जिसका अर्थ है कि कॉलम के कुछ मान तब तक अमान्य होंगे जब तक कि मैं उन्हें मैन्युअल रूप से ठीक नहीं करता।

मैंने मैक्रोज़ / वीबीए पर आधारित समाधान देखे हैं लेकिन क्या एक्सेल यूआई में सीधे तौर पर कुछ चतुर तरीका नहीं है?


डेटा सत्यापन का उपयोग नहीं करना।
गंवार

@ कफ अगर मैं काम करता हूं तो कुछ अन्य दृष्टिकोण का उपयोग करने के लिए तैयार हूं, डेटा मान्यताओं की आवश्यकता नहीं है।
बोरक बर्नार्ड

1
सॉरी बोरक लेकिन मैक्रो या वीबीए के बिना यह संभव नहीं है। डेटा सत्यापन प्रविष्टि समय पर डेटा की जाँच करने के बारे में है। आपको उस मान के साथ कक्षों को अपडेट करने के लिए कुछ ट्रिगर करना होगा।
निक पर्किन्स

@NickPerkins और डेटा मान्यताओं के लिए कोई वैकल्पिक तरीका नहीं है? ड्रॉप डाउन बनाने का कोई और तरीका?
बोरक बर्नार्ड

1
@ बोरक आप कॉम्बोक्स नियंत्रण का उपयोग कर सकते हैं, लेकिन फिर वीबीए की भी आवश्यकता होती है।
निक पर्किंस

जवाबों:


2

जैसा कि मैंने टिप्पणियों में उल्लेख किया है, ऐसा करने का एकमात्र तरीका VBA के साथ होगा।

यहाँ एक विकल्प है। मैंने पूरे कोड में टिप्पणियां जोड़ी हैं। यह मानता है कि आप "सूची" नाम की सत्यापन सूची के लिए एक नामित सीमा का उपयोग कर रहे हैं और यह उसी शीट पर है जिस पर कोशिकाओं को मान्य किया गया है।

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim cell As Range
    Dim isect As Range
    Dim vOldValue As Variant, vNewValue As Variant


    Set isect = Application.Intersect(Target, ThisWorkbook.Names("List").RefersToRange)
    If Not isect Is Nothing Then
        ' Get previous value of this cell
        Application.EnableEvents = False
        With Target
            vNewValue = .Value
            Application.Undo
            vOldValue = .Value
            .Value = vNewValue
        End With

        ' For every cell with validation
        For Each cell In Me.UsedRange.SpecialCells(xlCellTypeAllValidation)
            With cell
                ' If it has list validation AND the validation formula matches AND the value is the old value
                If .Validation.Type = 3 And .Validation.Formula1 = "=List" And .Value = vOldValue Then
                    ' Change the cell value
                    cell.Value = vNewValue
                End If
            End With
        Next cell
        Application.EnableEvents = True
    End If
End Sub

आप उदाहरण स्प्रेडशीट डाउनलोड कर सकते हैं जो मैंने इसे परीक्षण करने के लिए एक साथ रखा था। (मैक्रोज़ शामिल हैं!)


क्या आप उस ड्रॉपबॉक्स लिंक को फिर से प्रदान कर सकते हैं?
दिगकर्म

0

लेकिन एक्सेल यूआई में सीधे तौर पर कुछ चतुर तरीका नहीं है?

मुझे लगता है कि मुझे एक पता है - कम से कम यह आपके सभी अनुरोधों को पूरा करता है:

  1. आपको डेटा वैलेडेशन के स्रोत के रूप में गतिशील रूप से परिवर्तित नाम क्षेत्र को सेट करने की आवश्यकता है । यह OFFSETफ़ंक्शन का उपयोग करके प्राप्त किया जा सकता है । मान लें कि आपके पास कॉलम A के ड्रॉप-डाउन बॉक्स Sheet1(केवल फॉर्मूले के लिए नाम मायने रखता है) के लिए मानों की सूची है , सेल A1में हेडर जैसे हैं List of values, और मानों को शुरू A2और नीचे रखा गया है, आपको निम्नलिखित कार्य करना चाहिए: रिबन जाएं Formulas > Name Manager, नया क्षेत्र बनाएं ( यह कॉल Items) और सेट अपने क्षेत्र नहीं कोशिकाओं की ओर इशारा करते, लेकिन इसके बजाय निम्न सूत्र का उपयोग कर: =OFFSET(Sheet1!$A$2;0;0;COUNTA(Sheet1!$A:$A)-1;1)
  2. डेटा सत्यापन नियम सेट करें : सूची के लिए कक्षों की ओर इशारा करने के बजाय, टाइप करें =Items- इस प्रकार आपका नाम क्षेत्र सूची आइटम स्रोत के रूप में उपयोग किया जाएगा।
  3. उपरोक्त के परिणामस्वरूप, आप वास्तव में गतिशील सूची प्राप्त करेंगे जो आपके सभी रीकों को पूरा करती है: आप कॉलम ए में स्वतंत्र रूप से आइटम बदल सकते हैं / जोड़ सकते हैं, और अगली बार जब आप इसका उपयोग करते हैं तो ये परिवर्तन तुरंत ड्रॉपडाउन में दिखाई देंगे। साथ ही पुराने मूल्य बरकरार रहेंगे।

मैं अपने काम में लगभग 2 साल के लिए इस समाधान का उपयोग करता हूं। आशा है कि आप इसे उपयोगी पाएंगे!

यहाँ PS वास्तविक नमूना फ़ाइल है: डायनेमिक ड्रॉपडाउन


ओह, मुझे लगता है कि मैंने इनपुट को गलत बताया है - ऐसा लगता है कि जैसे ही आप उन्हें बदलते हैं, आपको तालिका में अद्यतन किए जाने वाले परिवर्तित मानों की आवश्यकता होती है। मेरा समाधान गतिशील सूची प्रदान करता है, लेकिन पुराने मूल्य अपरिवर्तित रहेंगे। गलतफहमी के लिए खेद है।
पीटर एल।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.