2016-02-16 7 views
8

मैं वीबीए कोड देख रहा हूं जो कोशिकाओं की पूरी श्रृंखला लेता है और उन्हें लोअरकेस में परिवर्तित करता है।कोशिकाओं के माध्यम से लूपिंग के बिना पूरी रेंज को लोअरकेस में कनवर्ट करें अप्रत्यक्ष

[A1:A20] = [index(lower(A1:A20),)] 

यह एक निश्चित सीमा (पूरी तरह से वाक्य रचना समझ में नहीं आता के लिए ठीक काम करता है, लेकिन निम्नलिखित पोस्ट :)

Post detailing code above

मेरे समस्या पाया यह है::

मैं निम्नलिखित पाया

मैं श्रेणी को गतिशील रूप से सेट करने में सक्षम होना चाहता हूं क्योंकि मैं बदलती रेंज आकारों से निपट रहा हूं। हालांकि, निम्नलिखित काम नहीं करते हैं, और मैं वीबीए में अप्रत्यक्ष() का उपयोग करने में सक्षम नहीं प्रतीत होता।

Range("A1:A" & n) = [index(lower(Range("A1:A" & n)),)] 

क्या यह काम करने का कोई तरीका है? मैं वास्तव में पाश के लिए एक का उपयोग कर से बचने के लिए के रूप में मुझे लगता है कि यह एक बहुत तेजी से होना चाहिए चाहते हैं ..

+2

'&' और 'n' के बीच एक जगह छोड़ दें: 'रेंज (" ए 1: ए "और एन)' – findwindow

+0

वीबीए स्वचालित रूप से इसे सही तरीके से स्वरूपित करता है - मैंने बस रिक्त स्थान के साथ फिर से प्रयास किया है मुसीबत। मुझे अपनी शीट में #VALUE त्रुटियां मिलती हैं I – MartijndR

उत्तर

9

इस प्रयास करें:

Range("A1:A" & n) = Application.Evaluate("index(lower(A1:A" & n & "),)") 
+4

प्रश्न के आधार पर यह सही उत्तर है - स्क्वायर ब्रैकेट वीबीए में 'मूल्यांकन' के लिए शॉर्टेंड नोटेशन हैं, लेकिन केवल एक स्ट्रिंग अक्षर लेते हैं, जबकि 'मूल्यांकन' एक संयोजित स्ट्रिंग स्वीकार करेगा। –

+3

[लोअर] (https://goo.gl/GMzwTs) और [UPPER] (https://goo.gl/WXHHZ4) फ़ंक्शंस के बारे में बहुत अधिक विचलन हुआ है जो वास्तव में वीबीए के [एलसीएएस] के साथ paralelled हैं (https://msdn.microsoft.com/en-us/library/office/gg264497.aspx) और [यूकेज़] (https://msdn.microsoft.com/en-us/library/office/gg264252.aspx) फ़ंक्शंस । इसका उल्लेख नहीं किया गया है कि वीबीए वर्कशीट के देशी [PROPER] (https://goo.gl/9F1oDG) कार्यों के बराबर नहीं है और यह उपयोग करने के लिए एक उत्कृष्ट उम्मीदवार है। – Jeeped

6

वर्कशीट के सेल के माध्यम से लूपिंग इस धीमी हो जाएगी। सभी सेल डेटा को पकड़ें, इसे स्मृति में संसाधित करें और फिर परिणाम को वर्कशीट पर वापस डंप करें।

Sub makeLower() 
    Dim v As Long, vLWRs As Variant 

    With Worksheets("Sheet1") 
     With .Range(.Cells(1, 1), .Cells(Rows.Count, 1).End(xlUp)) 
      vLWRs = .Value2 
      For v = LBound(vLWRs, 1) To UBound(vLWRs, 1) 
       vLWRs(v, 1) = LCase(vLWRs(v, 1)) 
      Next v 
      .Cells = vLWRs 
     End With 
    End With 
End Sub 

0.3 सेकंड में 50 के सेल पर परीक्षण किया गया, 6 एम 8 सेकंड में 1 एम कोशिकाएं।

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