Excel में किसी श्रेणी की प्रत्येक पंक्ति के माध्यम से लूप


116

यह उन चीजों में से एक है जो मुझे यकीन है कि इसके लिए एक अंतर्निहित फ़ंक्शन है (और मुझे अच्छी तरह से इसे अतीत में बताया जा सकता है), लेकिन मैं इसे याद करने के लिए अपना सिर खरोंच कर रहा हूं।

मैं एक्सेल VBA का उपयोग करते हुए मल्टी-कॉलम रेंज की प्रत्येक पंक्ति के माध्यम से कैसे लूप कर सकता हूं? मेरे द्वारा खोजे जा रहे सभी ट्यूटोरियल केवल एक-आयामी सीमा के माध्यम से काम करने का उल्लेख करते हैं ...


जवाबों:




8

बस इस पर ठोकर खाई और मुझे लगा कि मैं अपने समाधान का सुझाव दूंगा। मैं आमतौर पर एक बहु-मंद सरणी में एक सीमा को निर्दिष्ट करने की कार्यक्षमता में निर्मित का उपयोग करना पसंद करता हूं (मुझे लगता है कि यह मेरे लिए जेएस प्रोग्रामर भी है)।

मैं अक्सर इस तरह कोड लिखता हूं:

Sub arrayBuilder()

myarray = Range("A1:D4")

'unlike most VBA Arrays, this array doesn't need to be declared and will be automatically dimensioned

For i = 1 To UBound(myarray)

    For j = 1 To UBound(myarray, 2)

    Debug.Print (myarray(i, j))

    Next j

Next i

End Sub

VBA में डेटा को हेरफेर करने के लिए वेरिएबल्स को रेंज असाइन करना एक बहुत शक्तिशाली तरीका है।


मुझे यह तरीका सबसे अच्छा लगता है!
एथोस

2
इसका पक्ष लेने के दो मुख्य लाभ: 1) सरणी विधि हमेशा एक सीमा के माध्यम से लूपिंग की तुलना में तेज़ होती है, 2) यह सरल है और आप इसे दोनों दिशाओं में उपयोग कर सकते हैं और कुछ गणनाओं के बाद सरणी वापस लिख सकते हैं Range("A1:D4") = myarray:। नोट: Dim myarray संस्करण के रूप में; इस तथ्य पर ध्यान दें कि यह डिफ़ॉल्ट रूप से 1based 2dim सरणी है
TM

7

लूप्स में, मैं हमेशा आर 1 सी 1 Cellsसंदर्भ पद्धति का उपयोग करके कक्षा का उपयोग करना पसंद करता हूं , जैसे:

Cells(rr, col).Formula = ...

यह मुझे कोशिकाओं की एक सीमा से अधिक आसानी से और आसानी से लूप करने की अनुमति देता है :

Dim r As Long
Dim c As Long

c = GetTargetColumn() ' Or you could just set this manually, like: c = 1

With Sheet1 ' <-- You should always qualify a range with a sheet!

    For r = 1 To 10 ' Or 1 To (Ubound(MyListOfStuff) + 1)

        ' Here we're looping over all the cells in rows 1 to 10, in Column "c"
        .Cells(r, c).Value = MyListOfStuff(r)

        '---- or ----

        '...to easily copy from one place to another (even with an offset of rows and columns)
        .Cells(r, c).Value = Sheet2.Cells(r + 3, 17).Value


    Next r

End With
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.