কোন এক্সেল অবজেক্টগুলি শূন্য-ভিত্তিক এবং কোনটি ভিত্তিক?


20

কোনও কার্যপত্রকের প্রথম শীটটি অ্যাক্সেস করতে ভিবিএ ব্যবহার করা হ'ল ওয়ার্কশিট (1)। লিস্টবক্সে প্রথম আইটেমটি হ'ল মাইলিস্টবক্স.লিস্ট (0)। শুনেছি সংগ্রহগুলি 1-ভিত্তিক তবে সেগুলি কী তা আমি জানি না। ভিবিএ অ্যারেগুলি 0-ভিত্তিক। এমআইডি এর মতো এক্সেল স্ট্রিং ফাংশনগুলি 1-ভিত্তিক। 0 বা 1 এর উপর ভিত্তি করে কী আছে সে সম্পর্কে কোনও সাধারণ নীতি আছে, বা আপনি প্রতিটিটির একটি তালিকা সরবরাহ করতে পারেন?


ঘর (1,1) .চ্যারাক্টর (সূচক, দৈর্ঘ্য) 1 ভিত্তিক তবে কিছু বাউন্ডারি ক্লিপিং করে যাতে সেল (1,1) .চারাটার (0, দৈর্ঘ্য) = সেল (1,1) .চক্র্যাক্টর (1, দৈর্ঘ্য) (এক্সেল 2013)
seanv507

উত্তর:


24

সূচকের মধ্যে পার্থক্য সহ ভিবিএতে 3 টি মূল ধরণের গ্রুপিং কনস্ট্রাক্ট রয়েছে

  • সংগ্রহ - 1-ভিত্তিক সূচক

    • 0-ভিত্তিক ব্যতিক্রম: ট্যাবস, পৃষ্ঠাগুলি, নিয়ন্ত্রণগুলি (তালিকাবক্স, টেক্সটবক্স) এর মত ব্যবহারকারীফর্ম সংগ্রহগুলি
    • সংগ্রহগুলি হ'ল স্থানীয় এক্সেল অবজেক্ট যা যুক্তিসঙ্গতভাবে সম্পর্কিত বস্তুর গোষ্ঠী (বা তালিকা) ধারণ করে
    • সাধারণত জটিল বস্তু ধরে রাখতে ব্যবহৃত হয় তবে মূল ধরণের পাশাপাশি ধরে রাখতে পারে
    • এক্সেল সংগ্রহ:

      • ওয়ার্কবুক, শিটস, রেঞ্জ, আকার
      • পত্রক (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লুপ

  • অভিধান - ইনডেক্সড নয়, তবে ইনডেক্সগুলি কীগুলির সাথে অনুকরণ করা যায়

    • ভিবি স্ক্রিপ্টে নেটিভ, ভিবিএ নয় (অবশ্যই একটি বাহ্যিক গ্রন্থাগার ব্যবহার করা উচিত)
    • অ্যারে, সংগ্রহ বা অন্যান্য অভিধানগুলি সহ যেকোন ধরণের অবজেক্ট ধরে রাখতে পারে

একটি তালিকাবক্স একটি জটিল অবজেক্ট এবং নিয়ন্ত্রণের 0-ভিত্তিক সংগ্রহের মাধ্যমে অ্যাক্সেস করা যায়

তালিকাবক্সের .List () বৈশিষ্ট্যটি 0-ভিত্তিক অ্যারে

অন্যান্য নোট

  • 0-ভিত্তিক সূচকগুলি অন্যান্য ভাষার জন্য মান

  • ভিবিএ নতুন ব্যবহারকারীদের জন্য এটি আরও স্বজ্ঞাত করতে 1-ভিত্তিক ধারণাটি চালু করেছে:

    • ব্যবহারের চেয়ে 3 টির সহজ গণনা সহ শীট 1 থেকে শীট 3
    • পত্রক 3 থেকে শীট 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

আরও পড়া:

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.