Saya melihat pertanyaan ini yang menunjukkan dengan baik cara membuat hard code array 1D. Namun saya mencoba membuat kode keras array 2D dan berbagai upaya saya gagal.

Inilah yang saya coba sejauh ini

Points = Array(Array(2, 1, -2), Array(8, -7, 8), Array(-1, -10, 5), Array(5, -3, 3))
Points = Array(2, 1, -2 ; 8, -7, 8 ; -1, -10, 5 ; 5, -3, 3)
Points = Array(2, 1, -2 : 8, -7, 8 : -1, -10, 5 : 5, -3, 3)
Points = Array((2, 1, -2), (8, -7, 8), (-1, -10, 5), (5, -3, 3))

Apakah ada cara untuk melakukan ini atau apakah saya harus pergi dan menetapkan setiap entri satu per satu?

Yaitu saya mencoba untuk menghindari yang berikut

 Points(1,1) = 2
 Points(1,2) = 1
 Points(1,3) = -2

 Points(2,1) = 8
 Points(2,2) = -7
 Points(2,3) = 8

 Points(3,1) = -1
 Points(3,2) = -10
 Points(3,3) = 5

 Points(4,1) = 5
 Points(4,2) = -3
 Points(4,3) = 3
1
Forward Ed 8 Januari 2021, 13:43

2 jawaban

Jawaban Terbaik

VBA tidak menawarkan dukungan untuk menginisialisasi array pada titik pembuatan dengan nilai selain nilai default 0/nothing.

Pendekatan paling sederhana untuk membuat array kecil adalah dengan menggunakan metode Array.

Misalnya untuk larik 1 Dimensi

Dim myArray as Variant
myArray = array(1,2,3,4,5)

Array dengan lebih dari satu dimensi dapat dicapai dengan menyusun pernyataan Array.

Dim myArrayUniform as Variant
myArrayUniform = Array(Array(2, 1, -2), Array(8, -7, 8), Array(-1, -10, 5), Array(5, -3, 3))

Saat membuat Array dengan pernyataan Array bersarang, Anda mendapatkan array array, atau dikenal sebagai array bergerigi. Array bergerigi berbeda dari array multidimensi normal karena memiliki nomenklatur yang sedikit berbeda untuk mengakses item individual. Masuk akal juga untuk dicatat bahwa deklarasi di bawah ini sangat sah untuk array bergerigi

Dim myArrayUneven as Variant
myArrayUneven = Array(Array(2,  -2), Array(8), Array(-1, -10, 5), Array( 3))

Item individual dari array bergerigi diakses menggunakan satu set tanda kurung untuk setiap level pernyataan Array.

myArray(x)
MyArrayUniform(x)(y)  ' NOT myArrayUniform(x,y)
etc.

Mengapa nomenklatur ini digunakan? myArrayUniform dideklarasikan sebagai array 1 dimensi yang setiap itemnya merupakan array. Oleh karena itu untuk mengakses setiap item, pertama-tama kita memilih item dalam array satu dimensi awal mis. myArrayUniform(x). Ini mengembalikan array dalam dirinya sendiri yang kemudian kita pilih item yang kita inginkan mis. (y). Oleh karena itu myArray(x)(y).

'Fitur' lain yang harus diperhatikan adalah bahwa variabel yang dideklarasikan sebagai Varian dapat berisi array. Akibatnya deklarasi variabel untuk array yang dideklarasikan menggunakan pernyataan Array tidak memerlukan tanda kurung asalkan variabel dideklarasikan sebagai Varian.

2
freeflow 8 Januari 2021, 14:29

Anda dapat membuat lingkaran:

Option Explicit
Option Base 1
Sub mkArr()
    Dim Points(4, 3)
    Dim i As Long, j As Long, k As Long
    Dim v, w
    
v = Array(2, 1, -2, 8, -7, 8, -1, -10, 5, 5, -3, 3)

k = 0
For i = 1 To 4
    For j = 1 To 3
        Points(i, j) = v(k + i + j - 1)
    Next j
    k = k + j - 2
Next i
        
Stop
   
End Sub
1
Ron Rosenfeld 8 Januari 2021, 12:04