Excel 2010 - किसी कक्ष से वर्णों को निकालें, वर्णों की संख्या बदलती रहती है


0

मेरे पास दूसरे एप्लिकेशन से निर्यात की गई सूची है। परिणाम उनके बीच अतिरिक्त पात्रों के साथ वापस आ जाते हैं।

जो मैं समझता हूं:

Mary One;#123;#Bob Two;#2345;#Charles Three;#445

मैं क्या चाहता हूँ:

Mary One; Bob Two; Charles Three

सेल में सूचीबद्ध किए जा सकने वाले उपयोगकर्ताओं की संख्या सुसंगत नहीं है। अधिक जटिल कारक यह है कि संख्या 3 और 4 वर्णों के बीच भिन्न होती है।

मैं इसे बहुत जटिल होने से रोकने की कोशिश कर रहा हूं। आदर्श रूप में, यह एक ऐसा फॉर्मूला होगा जिसे मैं अपने विभाग के बाकी हिस्सों में आवश्यकतानुसार उपयोग करने के लिए संवाद करूँगा।

मैं SUBSTITUTE और LEN का उपयोग करने जा रहा हूं, लेकिन मैं इसे साफ रखने में कुछ मदद का उपयोग कर सकता हूं।


यह एक फार्मूला होना चाहिए? RegEx का उपयोग करके एक उपयोगकर्ता परिभाषित फ़ंक्शन बनाना समस्या से निपटने का एक आसान तरीका होगा। हालाँकि, UDF वितरित करने में कठिनाइयाँ आ सकती हैं।
B540Glenn

क्या आप एक सेल में या कई सेल में जवाब चाहते हैं? (यानी ए 1 = लंबी स्ट्रिंग, बी 1 = "मैरी वन?", सी 1 = "बॉब टू?", इत्यादि
bvaughn

जवाबों:


2

मैं यहां से चुनने के लिए कुछ विकल्पों को प्रस्तुत करने जा रहा हूं, लेकिन उनमें से सभी नियमित अभिव्यक्तियों पर निर्भर हैं। यह संभव है कि रेगेक्स का उपयोग न किया जाए लेकिन मुझे लगता है कि इसमें थोड़ा और समय लग सकता है।

[विकल्प 1 - https://regex101.com/]
पृष्ठ पर जाएं https://regex101.com/
स्वाद को 'pcre (php)' पर सेट करें - यह डिफ़ॉल्ट विकल्प है
नियमित अभिव्यक्ति: (?<=;)(#\d+;#)|(;#\d+$)झंडा: g
परीक्षण स्ट्रिंग: Mary One;#123;#Bob Two;#2345;#Charles Three;#445
प्रतिस्थापन: // एक स्थान (या इसे खाली छोड़ा जा सकता है)
आउटपुट: Mary One; Bob Two; Charles Three

आउटपुट को ट्रिम करने की आवश्यकता है क्योंकि अंत में एक अतिरिक्त स्थान है।

[विकल्प 2 - लिब्रे ऑफिस Calc (पोर्टेबल)]
Calc 'ढूँढें और बदलें' विंडो नियमित अभिव्यक्ति का उपयोग करने की अनुमति देती है।

Ctrl + H
ढूँढें: इसके (?<=;)(#\d+;#)|(;#\d+$)
साथ बदलें: एक स्थान या रिक्त
अनुभाग में 'अन्य विकल्प' की जाँच करें 'नियमित अभिव्यक्तियाँ'
'सभी को बदलें' बटन पर क्लिक करें।

[विकल्प 3 - नोटपैड ++]
मैं एन ++ का उल्लेख यहां कर रहा हूं क्योंकि यह कई प्रकार के ग्रंथों के साथ काम करते हुए वास्तव में शक्तिशाली उपकरण है। इसकी शक्ति मोटे तौर पर कई प्लगइन्स में बैठती है। लेकिन यहां मैं एक मानक प्रतिस्थापन विंडो का उल्लेख करूंगा। रेगेक्स पाठ के मिलान भागों को विभाजित करने की अनुमति देता है। इसे समूहीकरण कहा जाता है। प्रत्येक समूह का एक नाम हो सकता है और प्रतिस्थापन में उस नाम का उपयोग किया जा सकता है।

Ctrl + H → बदलें टैब
लपेटें: जाँच की गई
खोज मोड: नियमित अभिव्यक्ति
खोजें: क्या (?'name_surname'[^;#]+\s[^;#]+;)(#\d+(;#|$))
बदलें: इसके साथ बदलें: $+{name_surname}
बटन पर क्लिक करें 'सभी को बदलें'

भावार्थ:
text जो मिल जाए ’वह सब कुछ पा लेता है - वांछित और अवांछित पाठ।
कच्चे पाठ को केवल वांछित भागों के साथ प्रतिस्थापित करें।

[विकल्प 4 - एक्सेल - उपयोगकर्ता परिभाषित फ़ंक्शन (VBA)]
ओपन विज़ुअल बेसिक एडिटर (Alt + F11)
संदर्भ जोड़ें:
टूल्स -> संदर्भ -> Microsoft VBScript रेगुलर एक्सप्रेशंस 5.5

Option Explicit
Function leaveNames(CellValue As Variant)
    Dim RegEx As RegExp
    Dim Expr As String
    Set RegEx = New RegExp
    Expr = "(#\d+;#)|(;#\d+$)"
    RegEx.Global = True
    RegEx.IgnoreCase = False
    RegEx.MultiLine = False
    RegEx.Pattern = Expr
    leaveNames = RegEx.Replace(CellValue, "")
End Function


[सारांश]
मैंने इसके बजाय त्वरित लेकिन पूरी तरह कार्यात्मक समाधान पर ध्यान केंद्रित करने की कोशिश की ताकि मुझे लगता है कि sth को इससे लिया जा सकता है।


विकल्प 4 ठीक साबित हुआ है कि मेरे उपयोगकर्ताओं को क्या चाहिए। आपका बहुत बहुत धन्यवाद!
डेनाएल

दुर्भाग्य से, मैंने इसे केवल एक नई रिपोर्ट पर चलाया, और यदि 2 से अधिक नाम हैं तो यह टूट जाता है। एक तीसरे नाम के साथ सेल में मुझे मिला: टॉम केंट; जूली वाई बससे; # 562; डेना लीवरेंट्ज़
डीएनएएलएल

मुझे लगता है कि प्रश्न और टिप्पणी से स्ट्रिंग के बीच महत्वपूर्ण अंतर यह है कि उत्तरार्द्ध में सभी नाम हैश से शुरू नहीं होते हैं। मैंने प्रश्न चिह्न जोड़कर नियमित अभिव्यक्ति को संशोधित किया है जो हैश को वैकल्पिक बनाता है Expr = "(#\d+;#?)|(;#\d+$)":। नई अभिव्यक्ति अभी भी पिछले स्ट्रिंग्स के साथ काम करती है। यदि आपको कुछ और नकारात्मक परिदृश्य मिलते हैं, तो संभवत: मूल कारण regex में बैठेगा, लेकिन सौभाग्य से इसे आसानी से बदला जा सकता है।
wlod

धन्यवाद! मुझे कोई अन्य नकारात्मक परिदृश्य नहीं मिला है!
डेनाएल

0

मैंने सूत्र का प्रयास किया। यह सुंदर नहीं था। हालांकि, मुझे यकीन है कि ऐसा करने के अन्य तरीके हैं।

यह सूत्र सेल A1 में अपने स्ट्रिंग लेने के लिए और निकाल देंगे #123और #2345तार। आप हमेशा तकनीक का और अधिक विस्तार कर सकते हैं यदि आप चाहें। यह "#" की घटनाओं का पता लगाता है, फिर स्ट्रिंग को छोटे टुकड़ों में तोड़ देता है।

=LEFT(A1,SEARCH("#",A1,1)-1) &  MID(RIGHT(A1,LEN(A1)-SEARCH("#",A1,1)),SEARCH("#",RIGHT(A1,LEN(A1)-SEARCH("#",A1,1)),1)+1,SEARCH("#",MID(RIGHT(A1,LEN(A1)-SEARCH("#",A1,1)),SEARCH("#",RIGHT(A1,LEN(A1)-SEARCH("#",A1,1)),1)+1,LEN((A1))),1)-1)

यह न तो साफ है और न ही आसानी से संचार योग्य है।

मैं एक उपयोगकर्ता परिभाषित कार्य का सुझाव देता हूं। यहां एक लेख बताया गया है कि उपयोगकर्ता फ़ंक्शन कैसे सेट करें और वितरित करें। यूडीएफ को दें और यदि आपके पास प्रक्रिया के बारे में प्रश्न हैं, तो कृपया पूछें।

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