2014-10-01 7 views
12

के साथ काम नहीं करता है जब मैं =arrayformula(split(input!G2:G, ",")) का उपयोग करता हूं तो विभाजन कॉलम पूरे कॉलम पर क्यों नहीं बढ़ता है?ARRAYFORMULA() SPLIT()

मुझे केवल इनपुट के लिए परिणाम मिलता है! जी 2 सेल, लेकिन शेष जी कॉलम में नहीं। =arrayformula(find(",", input!G2:G)) जैसे अन्य सूत्र कार्य करने लगते हैं और समस्याओं के बिना विस्तारित होते हैं।

उत्तर

15

एसपीएलआईटी एक लंबवत सरणी पर लागू होता है, अब काम करता है। (जनवरी 4 2017)

=ArrayFormula(SPLIT(input!G2:G,","))

या त्रुटि के लिए

मास्किंग

=ArrayFormula(IFERROR(SPLIT(input!G2:G,",")))

नोट: परिणामी सरणी splitted तत्वों की अधिकतम संख्या के रूप में के रूप में व्यापक है।


(जवाब अब लागू नहीं होता के शेष है, लेकिन के लिए ... ऐतिहासिक उद्देश्यों को बनाए रखा?)

यह एक बहुत बुरी जवाब के रूप में माना जाएगा, लेकिन: यह सिर्फ ऐसा नहीं करता ।

मुझे संदेह है कि ऐसा हो सकता है क्योंकि यह संभावित रूप से एक जंजीर सरणी (प्रत्येक पंक्ति में तत्वों की अलग-अलग संख्या) उत्पन्न करेगा, जिसे समस्याग्रस्त माना जा सकता है। हालांकि, एक "सरणी स्प्लिट" शीट्स के पिछले संस्करण में "काम" करने के लिए प्रयोग की जाती है (हालांकि एक बग के साथ जहां यह सरणी के पहले तत्व पर ठीक से काम नहीं करता है)।

एसपीएलआईटी एक ऐसे समारोह के रूप में अकेला नहीं है जिसे किसी सरणी (जैसे इंडेक्ट, इंडेक्स, SUMIFS) पर पुनरावृत्त नहीं किया जा सकता है।


का संभावित हल (संपादित जनवरी 4 2017):

=ArrayFormula(REGEXREPLACE(input!G2:G&REPT(",",6),REPT("([^,]*),",6)&",*","$"&COLUMN(OFFSET(A1,,,1,6))))

OFFSET में 6 (A1 ,,, 1,6) और REPT कार्यों में तत्वों की अधिकतम संख्या निर्धारित करता है विभाजन। आप एक अभिव्यक्ति इंजेक्ट कर सकते हैं जो डेटा के कॉलम से अधिकतम तत्वों की गणना करेगा, लेकिन फिर प्रदर्शन अधिक प्रभावित होगा।

इसके अलावा, यहां एक चेतावनी यह है कि यह केवल एक ही चरित्र (इस मामले में एक अल्पविराम) द्वारा विभाजित करने का समर्थन करेगा।

वैकल्पिक रूप से, आप Google Apps स्क्रिप्ट कस्टम फ़ंक्शन देख सकते हैं।


यह पिछले वैकल्पिक हल नहीं रह गया है, काम करता है के रूप में REGEXEXTRACT नहीं रह गया है दूसरा तर्क के लिए एक सरणी का समर्थन करने के लिए प्रकट होता है - के रूप में यह जनवरी 2017 में खड़ा है वैसे भी,।

=ArrayFormula(IFERROR(REGEXEXTRACT(","&input!G2:G,"^"&REPT(",+[^,]+",COLUMN(OFFSET(A1,,,1,6))-1)&",+([^,]+)")))

+0

उत्तर के लिए धन्यवाद। क्या आसपास कोई काम है? यदि वहां है और आप इसे यहां रखते हैं, तो मैं इसे असाधारण रूप से महान उत्तर के रूप में मानूंगा! :) – jakub

+2

मुझे लगता है कि "यह सिर्फ नहीं है" (एक विश्वसनीय स्रोत से!) की पसंद वास्तव में एक ** वास्तव में अच्छा ** उत्तर है। जो अस्तित्व में नहीं है/संभव नहीं है, खोजने/प्रयास करने में बहुत समय बचाता है - लेकिन लोगों का उल्लेख करने के लिए बहुत कुछ है। – pnuts

+1

मैं @ पनट्स से सहमत हूं - और इसलिए उत्तर स्वीकार करें। – jakub

6

आप इस स्क्रिप्ट का उपयोग कर सकते हैं:

function better_split(col, separator) { 
    var new_col = []; 
    for (var r = 0; r < col.length; r++) { 
    if (col[r]) { 
     new_col.push(col[r][0].split(separator)); 
    } 
    } 
    return new_col; 
} 

इसलिए की तरह उपयोग (प्रदर्शन के कारणों के लिए):

=better_split(filter(A2:A, len(A2:A)>0), "/") 
+0

प्रश्न के मूल शब्द को देखते हुए, मैं अभी भी @ एडमएल उत्तर के साथ जा रहा हूं। लेकिन यह एक शानदार विकल्प है! क्या आप कोई प्रश्न बनाने पर विचार नहीं करेंगे और फिर इसका जवाब देंगे? मुझे यकीन है कि बहुत से लोग इसे उपयोगी पाएंगे। मैं कम से कम upvote। – jakub

+0

@jakub क्या इसे स्वयं के सवालों के जवाब देने की अनुमति है? किसी भी मामले में मैं इस प्रश्न के लिए देखता हूं और फिर मुझे यह धागा देखें यदि मुझे कोई मिलता है। वैसे, वोट के लिए धन्यवाद। – Mario

0

एक और वैकल्पिक हल के लिए पहले अपने G2 शामिल हों होगा: जी ARRAYFORMULA का उपयोग कर अल्पविराम के साथ कॉलम। फिर आप इसे स्प्लिट कर सकते हैं। अंततः आप इसे वैकल्पिक रूप से एक कॉलम में ट्रांसपोर्ट कर सकते हैं (अन्यथा यह एक पंक्ति के रूप में आउटपुट होगा)।

=TRANSPOSE(SPLIT(ARRAYFORMULA(JOIN(",",FILTER(G2:G,NOT(ISBLANK(G2:G))))),",")) 
संबंधित मुद्दे