2008-11-04 9 views
7

मैंने कुछ गुगलिंग किया है, और कुछ भी नहीं मिला है, हालांकि शायद मैं गलत जगहों पर देख रहा हूं। मैं भी वीबीए पर बहुत कुशल नहीं हूं, लेकिन मुझे यकीन है कि मैं इसे सही पॉइंटर्स के साथ समझ सकता हूं :)Excel के साथ स्ट्रिंग मैनिपुलेशन - यदि कोई अन्य भाग है तो स्ट्रिंग के हिस्से को कैसे निकालें?

मेरे पास एक स्ट्रिंग है जो मैं विभिन्न स्थितियों के आधार पर विभिन्न कोशिकाओं का एक संयोजन है। मैंने इन क्रम में मारा।

=IF(A405<>A404,G405,G405&H404) 

मुझे क्या करना चाहते हैं मेरी concatenated सूची के माध्यम से वापस जाने के लिए, एक अधिक्रमण मूल्य को हटाने अगर superseder सूची में है।

A, D, G, Y, Z 

मैं Dदूर करने के लिए करता है, तो और केवलअगरY मौजूद है चाहता हूँ:

उदाहरण के लिए, निम्न सूची देखें।

मैं इसके बारे में कैसे जाऊं? (वीबीए या इन-सेल, हालांकि मैं इन-सेल पसंद करूंगा)

उत्तर

0

मेरे पास है इसे ईमेल के माध्यम से एक संभावित समाधान के रूप में मिला:

=IF(A15<>A14,G15,IF(OR(AND(G15="CR247, ",ISNUMBER(FIND("CR247, ",H14))),AND(G15="CR149, ",ISNUMBER(FIND("CR215, ",H14))),AND(G15="CR149, ",ISNUMBER(FIND("CR180, ",H14))),AND(G15="CR180, ",ISNUMBER(FIND("CR215, ",H14))),G15="CR113, "),H14,G15&H14)) 

(इसमें प्राथमिकता नियमों के साथ "वास्तविक" मान हैं)

यह @Joseph के उत्तर के समान अपेक्षाकृत दिखता है।

क्या कोई बेहतर समाधान है?

+0

fwiw: यह वह जवाब है जिसका उपयोग मैंने समाप्त किया - अन्य सुझावों के लिए धन्यवाद !! – warren

0

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

2

सबसे पहले, जब आप सभी कोशिकाओं के माध्यम से जाते हैं तो स्ट्रिंग सरणी क्यों न रखें, फिर अंत में इसे समेकित करें?

अन्यथा, आप INSTR और मध्य की तरह स्ट्रिंग कार्यों का उपयोग किया जाएगा की तरह कुछ करने के लिए:

start1 = instr(myLongString,"Y, ") 
if start1 > 0 Then 
    start2 = instr(myLongString,"D, ") 
    if start2 > 0 then 
     newLongString = left(myLongString, start2 - 1) & _ 
         mid(myLongString, start2 + 3) 
    end if 
end if 

लेकिन, जैसा कि मैंने कहा, मैं एक सरणी के माध्यम से पाश के लिए आसान है, आप एक बार रखेंगे तो आपके पास उपयोग किए जाने वाले सभी मूल्यों का उपयोग करें, बस उन्हें अंत में संयोजित करें।

0

मुझे लगता है कि विकास कहीं भी दिखाई देते सकता है, तो कैसे के बारे में:

If InStr(strString, "Y") > 0 Then 
    strString = Replace(strString, "d", "") 
    strString = Replace(strString, " ", "") 
    strString = Replace(strString, " ,", "") 
    strString = Replace(strString, ",,", ",") 
End If 
5

प्रयास करें:

=IF(ISERROR(FIND("Y",A1)),A1,SUBSTITUTE(A1,"D, ","")) 

लेकिन वह मानता है कि आप हमेशा अल्पविराम और अंतरिक्ष निम्नलिखित डी

+0

आपको FIND कथन पर ISERROR या ISNUMBER का उपयोग करने की आवश्यकता है, क्योंकि यह वह नहीं ढूंढता है जो यह ढूंढ रहा है (और इसलिए आपको दो मामलों को स्विच करना होगा)। –

0

यदि इनमें से बहुत से संयोजन नहीं हैं जिन्हें आप निकालना चाहते हैं, तो आप = IF (FIND ("D"; A2)> 0; स्थान (ए 2; 1; 3; ""); ए 2) का उपयोग कर सकते हैं। ।

1

वीबीए: आप हमेशा regexp ऑब्जेक्ट का उपयोग कर सकते हैं। मुझे लगता है कि जब तक आप सही अभिव्यक्ति को सही ढंग से बनाते हैं, तब तक आपको अपनी स्क्रिप्ट पर कुछ भी परीक्षण करने की क्षमता मिलती है।

चेक आउट: http://msdn.microsoft.com/en-us/library/yab2dx62(VS.85).aspx (regexp संदर्भ के लिए)
और अपने regexps परीक्षण करने के लिए एक सरल उपकरण: http://www.codehouse.com/webmaster_tools/regex/

सेल-: आप एक अधिक उत्कृष्टता के अनुकूल तरीके से यह कर सकता है:
पर लगता है कॉलम ए: आपके पास मूल्य हैं।
आप एक नया कॉलम जोड़ सकते हैं जहां आप चेक
if(indirect("A"&row()) <> indirect("A"&row()-1), indirect("G"&row()), indirect("G"&row())& indirect("H"&row()))
या जो भी मान हैं। मुझे लगता है कि अगर बयान के एक शाखा पर मूल्य खाली होना चाहिए। इसके बाद आप केवल बी: बी कॉलम मानों को संयोजित करते हैं (यदि आवश्यक हो तो रिक्त स्थान)।

उम्मीद है कि इससे मदद मिलती है।