2009-06-16 23 views
7

में नियमित अभिव्यक्ति सबस्ट्रिंग प्रतिस्थापन मैं अंतरराष्ट्रीय संस्करण "447" के साथ स्ट्रिंग्स (मोबाइल टेलीफोन नंबर) की सूची के "07" भाग को प्रतिस्थापित करना चाहता हूं।माइक्रोसॉफ्ट एक्सेल

स्ट्रिंग्स की सूची वर्तमान में एक्सेल स्प्रेडशीट में कॉलम बनाती है।

मैं नियमित अभिव्यक्ति संशोधन की आवश्यकता होती है तार मिलान करने के लिए है:

^07[0-9]{9}$ 

... लेकिन मैं कैसे प्रतिस्थापन है कि मैं जरूरत है ऐसा करने के लिए पता नहीं है।

डेटा एक्सेल स्प्रेडशीट में है, लेकिन निश्चित रूप से निर्यात किया जा सकता है।

पसंदीदा समाधान माइक्रोसॉफ्ट एक्सेल में डेटा रखना होगा, लेकिन इसे निश्चित रूप से निर्यात किया जा सकता है और फिर फिर से आयात किया जा सकता है। मुझे पता है कि टेक्स्टमैट में नियमित अभिव्यक्ति की सुविधा है। क्या यह मेरी मदद कर सकता है?

उत्तर

17

मैं के बारे में सुरुचिपूर्ण VBA समाधान या जो कुछ भी की तलाश में बंद होने के लिए था, तो मैंने सोचा था कि: 'रुको पर। हम सिर्फ एक स्प्रेडशीट में कुछ डेटा छेड़छाड़ करना चाहते हैं। चीजों को जटिल क्यों करें?'

कैसे करता है आप के लिए इस विचार ध्वनि:

  • सिर्फ मौजूद डेटा के साथ स्तंभ के बाद एक नया स्तंभ सम्मिलित

  • के साथ नए कॉलम भरने (मान लेते है कि स्तंभ सी है) इस सूत्र: ="447" & RIGHT(C1, 9)

  • चयन स्तंभ डी (जो अब नए मूल्यों शामिल हैं) और पेस्ट मान स्तंभ सी पर (जो विशेष पेस्ट संवाद में है), मौजूदा मूल्यों

    की जगह
  • 'काम कर रहे' कॉलम डी

यह प्रोग्रामिंग नहीं कर रहा है, है ना हटा देते हैं लेकिन अगर आप केवल यह करने के लिए एक बार आप एक प्रोग्राम की आवश्यकता नहीं है?

+6

सवाल यह फ़ोन नंबरों का नहीं सभी की तरह लगता है से परिवर्तित करने की जरूरत है (यानी वे सब शुरू नहीं 07 के साथ)। इसके साथ निपटने के लिए बस उपरोक्त सूत्र को लपेटने की आवश्यकता है: = IF (LEFT (C1,2) = "07", "447" और दाएं (सी 1, 9), सी 1) – barrowc

9

आप अपने शीट (एक संदर्भ के रूप में जोड़ने) में माइक्रोसॉफ्ट रेगुलर एक्सप्रेशन शामिल करने के लिए

तो निम्नलिखित की तरह एक त्वरित मैक्रो बनाने के लिए, होगा, इसका इस्तेमाल करने के लिए:

Dim reg As New RegExp 
Public Function RegMatch(Source As Range, Pattern As String, Optional IgnoreCase As Boolean = True, Optional MultiLine As Boolean = True) As Long 
    Dim rng As Range, i As Long, j As Long 

    reg.IgnoreCase = IgnoreCase 
    reg.MultiLine = MultiLine 
    reg.Pattern = Pattern 

    i = 0: j = 0 
    For Each rng In Source 
     i = i + 1 
     If reg.test(rng.Value) Then 
      j = i 
      Exit For 
     End If 
    Next 
    RegMatch = j 
End Function 

फिर, बस (उदाहरण के लिए) अपने पत्र में एक मैक्रो के रूप में यह कहते हैं:

=INDEX(B6:B15, RegMatch($A$6:$A$15, $A$3)) 

पहला तर्क कहाँ अपने रेंज है, और दूसरा तर्क अपने पैटर्न है (जैसा कि ऊपर के रूप में)

+0

अच्छा संकेत है, पुस्तकालय का पूरा नाम 'है माइक्रोसॉफ्ट VBScript रेगुलर एक्सप्रेशन 5.5' – jeb

11

एक्सेल वीबीए का उपयोग करें। "माइक्रोसॉफ्ट वीबीस्क्रिप्ट नियमित अभिव्यक्ति 5.5" का संदर्भ लें।

फिर एक नई नियमित VBA मॉड्यूल में, कार्य करें:

Sub ReplaceMobileNumbers 
    Dim re as New RegExp 

    re.Pattern = "^0(?=7[0-9]{9}$)" ''# look-ahead 

    Dim cell As Range 
    For Each cell In ActiveSheet.Range("Your Range Address in A1:B1 notation") 
    cell.Value = re.Replace(cell.value, "44") 
    Next cell 
End Sub 

और तत्काल विंडो में इस उप कहते हैं। उपर्युक्त फेंकने वाला कोड है, जो दिमाग में पुनः उपयोगिता के साथ डिज़ाइन नहीं किया गया है। मुझे पता है, तो मुझे मत बताओ। ;-)

हालांकि आप शायद एक सेल समारोह के साथ भाग प्राप्त कर सकते हैं:

=IF(AND(LEN(A1) = 11;LEFT(A1; 2) = "07"); "44" & RIGHT(A1; 10); A1) 
+0

+1 अधिक पूर्ण और व्यावहारिक –

संबंधित मुद्दे