2017-08-02 26 views
8

VBA में, Evaluate() और [] तरीकों दोनों सरणियों वापस जाने के लिए इस्तेमाल किया जा सकता:कैसे मूल्यांकन विधि के साथ सरणी सूत्रों का मूल्यांकन करने के

Dim i As Variant 
i = Evaluate("{1,2;3,4}") 
i = [{1,2;3,4}] 

दोनों लाइनों i सेट एक 2D सरणी संख्या 1-4 से युक्त होने के लिए । (- [...](1,2) इस बीच त्रुटियों अर्थात 2)

मैं सोच रहा हूँ वहाँ एक ही तरीके से एक सरणी-लौटने कार्यपत्रक समारोह के मूल्यांकन के लिए किसी भी वाक्य रचना है, चाहे, जैसे एक अतिरिक्त कार्यक्षमता Evaluate(...)(1,2) सरणी के R1C2 अनुक्रमित तत्व देता है

i = Evaluate("LEN(A1:A5)>3") 'or similar like [{LEN(A1:A5)>3}] 

अगर मैं A4 & A5 में 3 अक्षरों से पाठ अब हमारे पास जो {False,False,False,True,True} तरह -1 डी सरणी लौट जाना चाहिए, लेकिन ऐसा नहीं है।

यदि नहीं, तो क्या पूर्ण सरणी को वापस करने के लिए सरणी-सूत्र का मूल्यांकन करने का एक और 1-लाइनर तरीका है? मैं देख रहा हूं कि जो भी दृष्टिकोण सबसे छोटा चरित्र-गिनती देता है।

+0

'मैं = मूल्यांकन (" पंक्ति (A1: A5)> 3 ") ' – SJR

+0

@ एसजेआर, विचित्र यह काम करता है, लेकिन' i = मूल्यांकन ("एलईएन (ए 1: ए 5)> 2") नहीं। मैं उम्मीद करता हूं कि एक सरणी वापस करने के लिए, लेकिन यह केवल एक ही बुलियन लौटाता है, क्या वहां कुछ अस्पष्टता है जो मैं देख रहा हूं? – Greedo

+2

वास्तव में विचित्र। मुझे यकीन नहीं है कि क्यों, लेकिन कुछ कार्यों को सही तरीके से काम करने के लिए "मजबूर" होना चाहिए, उदा। यह काम करता है 'i = मूल्यांकन (" अगर (पंक्ति (ए 1: ए 5), एलईएन (ए 1: ए 5)> 2) ")' – SJR

उत्तर

3

एक सरणी वापस करने के लिए, आपको एक फ़ंक्शन का उपयोग करने की आवश्यकता है जो परिणामस्वरूप सरणी का समर्थन करता है।

समारोह आमतौर पर VBA के साथ इस्तेमाल किया एक सरणी के लिए एक अभिव्यक्ति का मूल्यांकन करने के INDEX है, क्योंकि यह मान में परिवर्तन नहीं करता:

Dim data() 
data = Evaluate("INDEX(LEN(A1:A5)>3,)") 
+1

यह मजेदार है कि इनपुट के आधार पर, यह एक या दो आयामी सरणी देता है। जैसे 'ए 1: ए 5' 2 आयामों के साथ है, 'ए 1: जी 1' एक के साथ है। – Vityata

+0

'ए 1: ए 5' एक कॉलम वेक्टर है जबकि 'ए 1: जी 1' एक पंक्ति वेक्टर है। तो विभिन्न सरणी परिणामों के बारे में आश्चर्य इतना बड़ा नहीं होना चाहिए। –

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