VBA ReDim | จัดการอาร์เรย์แบบไดนามิกโดยใช้ VBA ReDim Preserve

คำสั่ง ReDim ของ Excel VBA

คำสั่งVBA Redimคล้ายกับคำสั่ง dim แต่ความแตกต่างคือใช้เพื่อจัดเก็บหรือจัดสรรพื้นที่จัดเก็บเพิ่มเติมหรือลดพื้นที่จัดเก็บที่ตัวแปรหรืออาร์เรย์มีอยู่ตอนนี้มีสองประเด็นสำคัญที่ใช้กับคำสั่งคือ Preserve ถ้าใช้ preserve กับคำสั่งนี้มันจะสร้างอาร์เรย์ใหม่ที่มีขนาดแตกต่างกันและถ้าไม่ใช้ preserve กับคำสั่งนี้ก็แค่เปลี่ยนขนาดอาร์เรย์ของตัวแปรปัจจุบัน

อาร์เรย์เป็นส่วนสำคัญของการเข้ารหัส VBA การใช้อาร์เรย์เราสามารถเก็บค่าได้มากกว่าหนึ่งค่าในตัวแปรเดียวกับที่เรากำหนด เช่นเดียวกับการที่เราประกาศตัวแปรโดยใช้คำว่า "Dim" ในทำนองเดียวกันเราก็ต้องประกาศชื่ออาร์เรย์โดยใช้ "Dim" เช่นกัน

ในการประกาศชื่ออาร์เรย์เราต้องระบุชนิดของอาร์เรย์ที่เราจะกำหนดก่อน ในอาร์เรย์เรามี 5 ประเภท

  1. อาร์เรย์แบบคงที่
  2. ไดนามิกอาร์เรย์
  3. อาร์เรย์หนึ่งมิติ
  4. อาร์เรย์สองมิติ
  5. อาร์เรย์หลายมิติ

ในอาร์เรย์แบบคงที่ใน excel เราจะตัดสินใจค่าที่ต่ำกว่าและค่าบนของอาร์เรย์ล่วงหน้าในขณะที่ประกาศตัวแปร ตัวอย่างเช่นดูตัวอย่างด้านล่าง

รหัส:

 Sub ReDim_Example1 () Dim MyArray (1 ถึง 5) เป็น String End Sub 

ในที่นี้MyArrayคือชื่อของอาร์เรย์ที่สามารถเก็บค่าได้ตั้งแต่ 1 ถึง 5 MyArray สามารถเก็บผลลัพธ์ที่แตกต่างกันได้ 5 รายการเช่นเดียวกับด้านล่าง

รหัส:

 Sub ReDim_Example1 () Dim MyArray (1 ถึง 5) As String MyArray (1) = "Hi" MyArray (2) = "Good" MyArray (3) = "Morning" MyArray (4) = "Have a" MyArray (5) = "วันที่ดี" End Sub 

อาร์เรย์แบบไดนามิกพร้อมคำสั่ง ReDim

แต่ในอาร์เรย์แบบไดนามิกไม่เป็นเช่นนั้นเราจะไม่ตัดสินใจค่าต่ำกว่าและค่าบนล่วงหน้า แต่เราแค่กำหนดชื่ออาร์เรย์และกำหนดประเภทข้อมูล

 Sub ReDim_Example1 () Dim MyArray () เป็น String End Sub 

ในการสร้างชื่ออาร์เรย์แบบไดนามิกเราจำเป็นต้องประกาศด้วยคำว่า "Dim" ก่อน แต่อย่าตัดสินใจขนาดของอาร์เรย์ล่วงหน้า เราเพียงแค่ตั้งชื่ออาร์เรย์ด้วยค่าว่างภายในวงเล็บ () เมื่ออาร์เรย์ไม่รวมขนาดจะถือว่าเป็นอาร์เรย์แบบไดนามิก

Dim MyArray () เป็นสตริง

เมื่อคุณพูดถึงขนาดของอาร์เรย์ภายในวงเล็บมันจะกลายเป็นอาร์เรย์แบบคงที่ Dim MyArray (1 ถึง 5) เป็น String

ในอาร์เรย์แบบไดนามิกเราจะปรับขนาดขนาดอาร์เรย์โดยใช้คำว่า“ ReDim” ในบรรทัดถัดไปของโค้ด

ReDim MyArray (1 ถึง 6) เป็นสตริง

ค่าใด ๆ ที่เก็บไว้ในชื่ออาร์เรย์ในขั้นตอนก่อนหน้านี้เช่นการใช้คำสั่ง“ Dim” เป็นค่าว่างและขนาดที่เราประกาศโดยใช้“ ReDim” จะกลายเป็นขนาดใหม่ของอาร์เรย์

ตัวอย่างการใช้ VBA Redim Statement

คุณสามารถดาวน์โหลด VBA ReDim Excel Template ได้ที่นี่ - VBA ReDim Excel Template

ตัวอย่าง # 1

ดูตัวอย่างการใช้คำสั่ง“ ReDim” ในทางปฏิบัติ ทำตามขั้นตอนด้านล่างเพื่อใช้“ ReDim”

ขั้นตอนที่ 1:สร้างชื่อมาโครก่อน

ขั้นตอนที่ 2:ประกาศชื่ออาร์เรย์เป็นสตริง

รหัส:

 Sub ReDim_Example1 () Dim MyArray () เป็น String End Sub 

ขั้นตอนที่ 3:ตอนนี้ใช้คำว่า“ Redim” และกำหนดขนาดของอาร์เรย์

รหัส:

 Sub ReDim_Example1 () Dim MyArray () เป็น String ReDim MyArray (1 ถึง 3) End Sub 

ขั้นตอนที่ 4:ตอนนี้ชื่ออาร์เรย์“ MyArray” สามารถเก็บได้ถึง 3 ค่าที่นี่ กำหนดค่าให้กับ 3 อาร์เรย์ดังต่อไปนี้

รหัส:

 Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 ถึง 3) MyArray (1) = "ยินดีต้อนรับ" MyArray (2) = "to" MyArray (3) = "VBA" End Sub 

ดังนั้นอาร์เรย์แรกจึงเท่ากับคำว่า "ยินดีต้อนรับ" อาร์เรย์ที่สองเท่ากับคำว่า "ถึง" และอาร์เรย์ที่สามเท่ากับคำว่า "VBA"

ขั้นตอนที่ 5:ตอนนี้เก็บค่าอาร์เรย์เหล่านี้ในเซลล์

รหัส:

 Sub ReDim_Example1 () Dim MyArray () As String ReDim MyArray (1 ถึง 3) MyArray (1) = "ยินดีต้อนรับ" MyArray (2) = "ถึง" MyArray (3) = "VBA" ช่วง ("A1") ค่า = MyArray (1) Range ("B1"). Value = MyArray (2) Range ("C1"). Value = MyArray (3) End Sub 

ขั้นตอนที่ 6:หากคุณเรียกใช้โค้ดนี้เราควรมีค่าเหล่านี้ในเซลล์ A1, B1 และ C1 ตามลำดับ

ตัวอย่าง # 2 - ปรับขนาดขนาดอาร์เรย์ในขณะที่จดจำค่าเก่า

เมื่อชื่ออาร์เรย์กำหนดค่าแล้วเรายังสามารถปรับขนาดได้ตลอดเวลาในขั้นตอนโดยใช้คำว่า“ ReDim Preserve”

สมมติว่าคุณได้ประกาศชื่ออาร์เรย์และกำหนดค่าให้กับชื่ออาร์เรย์เหล่านั้นแล้วเช่นด้านล่าง

ตอนนี้คุณต้องการเพิ่มความยาวอาร์เรย์เป็น 2 เช่น 5 ในกรณีนี้เราสามารถใช้คำว่า VBA“ ReDim Preserve” เพื่อปรับขนาดความยาวอาร์เรย์เพื่อจำค่าเก่าได้เช่นกัน

รหัส:

 Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub 

Now we can assign two more values to the array.

Code:

 Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub 

Now store these values in cells.

Code:

 Sub ReDim_Example2() Dim MyArray() As String ReDim MyArray(3) MyArray(1) = "Welcome" MyArray(2) = "to" MyArray(3) = "VBA" ReDim Preserve MyArray(4) MyArray(4) = "Character 1" Range("A1").Value = MyArray(1) Range("B1").Value = MyArray(2) Range("C1").Value = MyArray(3) Range("D1").Value = MyArray(4) End Sub 

Now run the macro and see what happens

So we got the new word in the D1 cell.

The reason why we need to use the word “preserve” because array should remember the old array values in the procedure.

The moment you ignore the word “preserve” it will not remember old values.

Things to Remember Here

  • ReDim can only hold the last value of the array, not the many values. For example, we cannot use this code “ReDim Preserve MyArray(4 to 5)”, this will throw the error.
  • We cannot ReDim static arrays. The moment you assign the size of the array inside the parenthesis it becomes a static array.
  • Using ReDim we cannot change the data type. The array can hold whatever the data type we have assigned while declaring the array.