कौन सी एक्सेल वस्तुएं शून्य-आधारित हैं और कौन-सी एक-आधारित हैं?


20

वर्कशीट में पहली शीट तक पहुँचने के लिए VBA का उपयोग करना वर्कशीट (1) है। ListBox में पहला आइटम myListBox.List (0) है। मैंने सुना है कि संग्रह 1-आधारित हैं, लेकिन मुझे नहीं पता कि वे क्या हैं। VBA सरणियां 0-आधारित हैं। MID जैसे Excel स्ट्रिंग फ़ंक्शंस 1-आधारित हैं। क्या कोई सामान्य सिद्धांत है जो 0 या 1 पर आधारित है, या आप प्रत्येक की एक सूची प्रदान कर सकते हैं?


सेल (1,1) .चैचर्स (इंडेक्स, लंबाई) 1 आधारित है, लेकिन कुछ प्रकार की सीमा क्लिपिंग करता है ताकि (1,1) .चैकर्स (0, लंबाई) = सेल (1,1) .चैकर्स (1)। लंबाई) (एक्सेल 2013)
seanv507

जवाबों:


24

VBA में 3 मुख्य प्रकार के समूह निर्माण उपलब्ध हैं, जिनमें अनुक्रमित के बीच अंतर है

  • संग्रह - 1-आधारित सूचकांक

    • 0-आधारित अपवाद: उपयोगकर्ता संग्रह जैसे टैब, पृष्ठ, नियंत्रण (सूची बॉक्स, पाठ बॉक्स)
    • संग्रह मूल Excel ऑब्जेक्ट्स होते हैं जिनमें तार्किक रूप से संबंधित ऑब्जेक्ट्स के समूह (या सूचियाँ) होते हैं
    • आम तौर पर जटिल वस्तुओं को धारण करने के लिए उपयोग किया जाता है, लेकिन बुनियादी प्रकार भी पकड़ सकते हैं
    • एक्सेल संग्रह:

      • वर्कबुक, शीट, रेंज, आकृतियाँ
      • फ़ाइल में शीट्स (1) पहली है, सेल (1, 1) पहली पंक्ति में सेल और पहली कॉलम है
    • संग्रह का मुख्य लाभ नाम से तत्वों तक पहुंचने की सुविधा है

      • प्रत्येक लूप बहुत कुशल है (सरणियों के प्रत्येक प्रक्रमण की तुलना में)
      • इंडेक्स द्वारा अलग-अलग वस्तुओं को एक्सेस करना हालांकि, उन्हें नाम से एक्सेस करने से ज्यादा तेज है

  • एरेस - 0-डिफ़ॉल्ट रूप से आधारित, लेकिन पहला इंडेक्स किसी भी संख्या में बदला जा सकता है (सचित्र बॉलो)

    • सरणी वे चर हैं जिनमें संबंधित चर का एक सेट होता है
    • सामान्यतः बूलियन, इंटेगर, लॉन्ग, स्ट्रिंग, डबल आदि जैसे आदिम डेटा प्रकारों के लिए उपयोग किया जाता है
    • एक बार यह परिभाषित हो जाने के बाद यह केवल एक प्रकार की वस्तुओं को रखेगा: Dim x() As Long

      • अधिक जटिल वस्तुओं को रखने के लिए एक सरणी को परिभाषित किया जा सकता है Dim x() As Variant
      • वेरिएंट किसी भी प्रकार के ऑब्जेक्ट हो सकते हैं, जिसमें वर्कबुक, शीट्स, रेंज, एरेज़ शामिल हैं

        • Dim x As Variant: x = Array(1) '1 Variant variable containing 1 array
        • Dim y(2) As Variant '1 Variant array containing 3 arrays
        • y(0) = Array(1): y(1) = Array(2): y(2) = Array(3)
    • इंडेक्स द्वारा आइटम एक्सेस करते समय सरणियों का मुख्य लाभ प्रदर्शन है

      • For index=0 To 10छोरों की तुलना में तेजी रहे हैं For-Eachछोरों

  • शब्दकोश - अनुक्रमित नहीं है, लेकिन अनुक्रमित कुंजी के साथ अनुकरण किया जा सकता है

    • VB स्क्रिप्ट के मूल निवासी, VBA नहीं (बाहरी लाइब्रेरी का उपयोग करना चाहिए)
    • Arrays, Collections, या अन्य शब्दकोशों सहित किसी भी प्रकार की वस्तुओं को पकड़ सकते हैं

एक सूची बॉक्स एक जटिल वस्तु है और इसे नियंत्रणों के 0-आधारित संग्रह के माध्यम से एक्सेस किया जा सकता है

लिस्टबॉक्स की .List () संपत्ति 0-आधारित सरणी है

अन्य नोट

  • 0-आधारित सूचकांक अन्य भाषाओं के लिए मानक हैं

  • VBA ने नए उपयोगकर्ताओं के लिए इसे अधिक सहज बनाने के लिए 1-आधारित अवधारणा पेश की:

    • शीट 1 से शीट 3, संग्रह की गणना के साथ 3 का उपयोग करना आसान है
    • शीट 0 से शीट 2 तक, संग्रह की गणना 3 के साथ

उनके अनुक्रमित के बीच अंतर के कुछ व्यावहारिक उदाहरण:

Public Sub vbaCollections()
    Dim c As New Collection     '1-based index

    c.Add Item:="a", Key:="1"   'index 1; Key must a String
    c.Add Item:="b", Key:="2"   'index 2
    c.Add Item:="c", Key:="3"   'index 3

    Debug.Print c.Count         '3;   Items in index sequence: a,b,c, Keys: "1","2","3"
    Debug.Print c.Item(1)       'a;   not available for Dictionaries
    'Debug.Print c.Key("1")     'invalid, so is: c.Key(1)

    c.Remove Index:=2
    Debug.Print c.Count         '2;   items in index sequence: a,c, Keys: "1","3"
    'c.Remove Item:="c"         'invalid, so is: c.Remove Key:="3"

    'c.Add Item:="c", Key:="3", Before:=1   'Key must be unique - Error
    c.Add Item:="c", Key:="5", Before:=1    'allows duplicate Item
    Debug.Print c.Count         '3;   items in index sequence: c,a,c, Keys: "5","1","3"
End Sub

Public Sub vbaArrays()
    Dim a() As Long, b(3) As Long   'Arrays default to "Option Base {0 | 1}"
    Dim c(0 To 0)                   'if "Option Base" not defined, it defaults to 0
    Dim ar(1) As Worksheet: Set ar(0) = Worksheets(1)   'array with 1 Worksheets object

    ReDim a(3)          'creates an array of 4 elements; indexes 0,1,2,3
        Debug.Print "LB: " & LBound(a) & ", UB: " & UBound(a)   'LB: 0, UB: 3
        Debug.Print UBound(a) - LBound(a)                       '3, array b() is the same

    'even whith "Option Base 1", the following still default to 0
    Dim v As Variant:  v = Split("A B")         'array with 2 items: v(0) = "A", v(1) = "B"
    'UserForm1.ListBox1.List = Array("Test")    'array with 1 item: .List(0,0) = "Test"

    ReDim a(0 To 3)     'creates an array of 4 elements; indexes 0,1,2,3
    a(0) = 1:   a(1) = 2:   a(2) = 3    'a(3) defaults to 0

        Debug.Print "LB: " & LBound(a) & ", UB: " & UBound(a)   'LB: 0, UB: 3
        Debug.Print UBound(a) - LBound(a)                       '3; offset index by -1

    ReDim a(1 To 3)     'creates an array of 3 elements; indexes 1,2,3
    a(1) = 1:   a(2) = 2:   a(3) = 3

        Debug.Print "LB: " & LBound(a) & ", UB: " & UBound(a)   'LB: 1, UB: 3
        Debug.Print UBound(a) - LBound(a)                       '2; offset count by +1

    ReDim a(5 To 7)     'creates an array of 3 elements; indexes 5,6,7
    a(5) = 1:   a(6) = 2:   a(7) = 3

        Debug.Print "LB: " & LBound(a) & ", UB: " & UBound(a)   'LB: 5, UB: 7
        Debug.Print UBound(a) - LBound(a)                       '2; offset count by +1

    ReDim a(-3 To -1)   'creates an array of 3 elements; indexes -3,-2,-1
    a(-3) = 1:  a(-2) = 2:  a(-1) = 3

        Debug.Print "LB: " & LBound(a) & ", UB: " & UBound(a)   'LB: -3, UB: -1
        Debug.Print UBound(a) - LBound(a)                       '2; offset count by +1
End Sub

Public Sub vbsDictionaries()
    Dim d As Object         'not indexed (similar to linked lists)
    Set d = CreateObject("Scripting.Dictionary")    'native to VB Script, not VBA

    d.Add Key:="a", Item:=1 'index is based on Key (a, b, c)
    d.Add Key:="b", Item:=2
    d.Add Key:="c", Item:=3
    Debug.Print d.Count     '3; Keys: a,b,c, Items: 1,2,3

    Debug.Print d(1)        'output is empty ("") - adds new element: Key:="1", Item:=""
    Debug.Print d.Count     '4; Keys: a,b,c,1, Items: 1,2,3,Empty
    Debug.Print d("a")      '1
    Debug.Print d(1)        'output is Empty ("") from element with Key:="1"

    'd.Add Key:="b", Item:=2        'attempt to add existing element: Key:="b" - Error

    'd.Keys  - 0-based array (not available for Collections)
    'd.Items - 0-based array (not available for Collections)

    d.Remove d.Keys()(1)            'remove element Item:=2 (Key:="b")
        Debug.Print d.Count         '3; Keys: a,c,1, Items: 1,3,""
    d.Remove d.Items()(0)           'remove Items element 0 (Key:="1", Item:="")
        Debug.Print d.Count         '2; Keys: a,c, Items: 1,3
    d.Remove "c"                    'remove element Key:="c" (Item:=3)
        Debug.Print d.Count         '1; Keys: a, Items: 1

    d.Add Key:="c", Item:=3
        Debug.Print d.Count         '2; Keys: a,c, Items: 1,3

    'd.Remove d.Items()(0)          'invalid
    Debug.Print d.Items()(d.Count - 1)  '3
    d.Remove d.Keys()(d.Count - 1)  'remove last element; access last Key by Key
        Debug.Print d.Count         '1; Keys: a, Items: 1

    Debug.Print d.Exists("a")       'True (not available for Collections)
    Debug.Print d.Exists(2)         'False
End Sub

आगे की पढाई:

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