2008-08-29 14 views
5

द्वारा लक्षित सूची श्रेणियां हमारे पास कई दर्जनों के साथ कुछ बहुत बड़ी एक्सेल वर्कबुक (टैब के दर्जनों, प्रत्येक एमबी पर बहुत जटिल गणनाएं हैं), शायद सैकड़ों सूत्र हैं जो डरावने इंडेक्ट फ़ंक्शन का उपयोग करते हैं। ये सूत्र पूरे कार्यपुस्तिका में फैले हुए हैं, और मूल्यों के लिए डेटा देखने के लिए कई तालिकाओं को लक्षित करते हैं।एक्सेल: इंडेक्स फॉर्मूला

अब मुझे एक ही कार्यपुस्तिका में एक अलग स्थान पर इन सूत्रों द्वारा लक्षित डेटा की श्रेणियों को स्थानांतरित करने की आवश्यकता है।

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

क्या उन सभी अप्रत्यक्ष सूत्रों का पता लगाने का कोई तरीका है जो वर्तमान में उन तालिकाओं को संदर्भित करते हैं जिन्हें हम स्थानांतरित करना चाहते हैं?

मुझे यह ऑनलाइन करने की आवश्यकता नहीं है। मैं खुशी से कुछ ले जाऊंगा जो लंबे समय तक चलने में 4 घंटे लगते हैं।

ध्यान रखें कि। प्रेसेन्टेंट, पर निर्भर, आदि विधियां केवल प्रत्यक्ष सूत्रों को ट्रैक करती हैं।

(साथ ही, में स्प्रेडशीट को फिर से लिखना जो भी हमारे लिए एक विकल्प नहीं है)।

धन्यवाद!

+1

उत्सुकता के लिए, परियोजना पूरी हो गई (सफलतापूर्वक)। इसमें सभी स्प्रेडशीटों का मैन्युअल रूप से विश्लेषण, संशोधन और पुन: प्रयास करने के लिए 100 से अधिक मानव-घंटे लगे (मैंने कहा था कि वे बड़े थे!)। खैर, यह उतना बुरा नहीं है जितना मैंने इसे अभी बनाया है: हम परवाह किए बिना व्यापक रीस्टेस्टिंग करना चाहते थे। –

उत्तर

5

आप VBA का उपयोग करके संपूर्ण कार्यपुस्तिका से अधिक पुनरावृति सकता है (मैं @PabloG से और @ यूरो-micelli कोड को शामिल किया है):

Sub iterateOverWorkbook() 
For Each i In ThisWorkbook.Worksheets 
    Set rRng = i.UsedRange 
    For Each j In rRng 
     If (Not IsEmpty(j)) Then 
      If (j.HasFormula) Then 
       If InStr(oCell.Formula, "INDIRECT") Then 
        j.Value = Replace(j.Formula, "INDIRECT(D4)", "INDIRECT(C4)") 
       End If 
      End If 
     End If 
    Next j 
Next i 
End Sub 

यह उदाहरण substitues की प्रत्येक पुनरावृत्ति "अप्रत्यक्ष (D4)" के साथ "अप्रत्यक्ष (सी 4)"। यदि आपके पास अधिक जटिल अप्रत्यक्ष-फ़ंक्शन हैं, तो आप आसानी से प्रतिस्थापन-फ़ंक्शन को और अधिक परिष्कृत के साथ स्वैप कर सकते हैं। बड़ी वर्कबुक के लिए भी प्रदर्शन खराब नहीं है।

+0

मैं इस उत्तर को स्वीकार कर रहा हूं क्योंकि यह एकमात्र उत्तर है जिसे वोट प्राप्त हुए हैं और यह हमें प्राप्त एकमात्र ज्ञात विधि प्रदान करता है। पूरा जवाब होगा * "नहीं, एक्सेल आपके लिए अप्रत्यक्ष सूत्रों का पता लगाने का समर्थन नहीं करता है और आपको ** ** स्वयं को स्कैन करने के लिए वीबीए का उपयोग करना होगा।" *। खेद है कि मुझे दो साल से अधिक समय लगे ... –

+1

आप उपरोक्त कोड में 4 लाइनें (और कुछ समय) को सहेज सकते हैं, लाइनों को 4,5,6 (प्लस 2 मिलान अंत अगर) को प्रतिस्थापित कर सकते हैं: प्रत्येक जे में आरआरएनजी। विशेष कैल्स (xlCellTypeFormulas) –

0

आप VBA में कुछ इस तरह उपयोग कर सकते हैं: अपने स्वाद सूट करने के लिए

0

दुर्भाग्य से, के तर्कों अप्रत्यक्ष आमतौर पर अधिक जटिल हैं

Sub ListIndirectRef() 

Dim rRng As Range 
Dim oSh As Worksheet 
Dim oCell As Range 

For Each oSh In ThisWorkbook.Worksheets 
    Set rRng = oSh.UsedRange 
    For Each oCell In rRng 
     If InStr(oCell.Formula, "INDIRECT") Then 
      Debug.Print oCell.Address, oCell.Formula 
     End If 
    Next 
Next 

End Sub 
Debug.Print के बजाय आप कोड जोड़ सकते हैं

से अधिक। यहाँ चादरों की एक से एक वास्तविक सूत्र, नहीं सबसे जटिल सूत्र हमारे पास है:

=IF(INDIRECT("'"&$B$5&"'!"&$O5&"1")="","",INDIRECT("'"&$B$5&"'!"&$O5&"1"))

एचएम, आप पात्रों में से अधिकांश की अनदेखी करके एक सरल पार्सर लिख सकता है और बस की तलाश में प्रासंगिक भागों (इस उदाहरण में: "ए..जेड", "0..9" और "!:" इत्यादि) लेकिन यदि आप "अप्रत्यक्ष" में तर्क कार्य करते हैं तो आप परेशानी में भाग लेंगे।

शायद एक सुरक्षित दृष्टिकोण तीसरे शीट में "अप्रत्यक्ष" के हर अवसर को मुद्रित करना होगा। फिर आप वांछित आउटपुट जोड़ सकते हैं और एक छोटी सी खोज लिख सकते हैं और अपने परिवर्तनों को वापस लिखने के लिए प्रोग्राम को प्रतिस्थापित कर सकते हैं।

यदि आप "मिल" एक विशाल स्प्रेडशीट में हर कोशिका आप स्मृति के राक्षसी मात्रा की आवश्यकता होगी, खत्म हो सकता है। मैं अभी भी जोखिम लेने की कोशिश करने के लिए तैयार हूं।

उपयोग की गई सीमा का चयन करने के पाब्लोग की विधि जाने का तरीका है (इसे मेरे मूल कोड में जोड़ा गया)। गति बहुत अच्छी है, खासकर यदि आप जांचते हैं कि वर्तमान सेल में सूत्र है या नहीं। जाहिर है, यह सब आपकी कार्यपुस्तिका के आकार पर निर्भर करता है।

1

प्रश्न: "क्या उन सभी अप्रत्यक्ष सूत्रों का पता लगाने का कोई तरीका है जो वर्तमान में उन तालिकाओं को संदर्भित करते हैं जिन्हें हम स्थानांतरित करना चाहते हैं?"

जैसा कि मैंने इसे पढ़ा है, आप रुचि के क्षेत्रों के संदर्भ के लिए अप्रत्यक्ष के तर्कों को देखना चाहते हैं। ओटोम मैं एक नियमित अभिव्यक्ति पार्सर का उपयोग करने के लिए वीबीए लिखूंगा, या यहां तक ​​कि एक सरल INSTR को INDIRECT (मिलान करने के लिए आगे पढ़ें) खोजने के लिए लिखूंगा, फिर स्ट्रिंग के अंदर स्ट्रिंग को वास्तविक पते में परिवर्तित करने के लिए, फिर भी दोहराएं, दोहराने के लिए दोहराएं अप्रत्यक्ष (...) एक सूत्र में सूत्र और उसके अनुवाद को दो स्तंभों पर कॉल और डंप करें।

0

मुझे यकीन नहीं है कि एसओ का शिष्टाचार उन उत्पादों के उल्लेख से संबंधित है, जिनके साथ लेखक जुड़ा हुआ है, लेकिन ओके, एक एक्सेल ऐड-इन, ऑपरिस विश्लेषण किट, सेल संदर्भों से अप्रत्यक्ष कार्यों को प्रतिस्थापित कर सकता है हल करने के लिए। फिर आप एक्सेल के ऑडिट टूल का उपयोग यह निर्धारित करने के लिए कर सकते हैं कि प्रत्येक श्रेणी के आश्रित क्या हैं।

आप निश्चित रूप से कार्यपुस्तिका की अस्थायी प्रतिलिपि में ऐसा करेंगे।

अधिक

  • http://www.operisanalysiskit.com/oakpruning.htm
  • http://www.operisanalysiskit.com/help/2007/index.html?oakconceptpruning.htm
  • पर

इस प्रश्न की उम्र को देखते हुए आपको एक वैकल्पिक समाधान या समाधान मिल सकता है।

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