Saya berpengalaman dalam MATLAB tetapi mendapati diri saya bekerja di VBA akhir-akhir ini karena MATLAB kurang dapat diakses oleh saya dan saya kesulitan mencoba melakukan hal-hal dalam VBA (seperti vektorisasi) yang dapat saya tangani dengan mudah di MATLAB.
Katakanlah saya memiliki tabel data di excel dengan bentuk berikut:
record startDate endDate count
1 100 103 10
2 98 102 5
3 101 104 4
Saya ingin melakukan semua pemrosesan saya di memori (menghindari loop) dan kemudian menampilkan file hasil yang terlihat seperti ini:
1 2 3 Sum
98 0 5 0 5
99 0 5 0 5
100 10 5 0 15
101 10 5 4 19
102 10 5 4 19
103 10 0 4 14
104 0 0 4 4
Pada dasarnya, saya memulai dengan tanggal paling awal dan mengulang tanggal terbaru dan kemudian memeriksa apakah setiap tanggal disertakan dalam jendela tanggal untuk setiap catatan dan jika ya, saya menerapkan jumlah catatan pada hari itu dan kemudian menjumlahkannya.
Saya membuat keluaran yang disertakan menggunakan fungsi lembar kerja sederhana, tetapi saya ingin dapat mereplikasi proses di VBA secara khusus menghindari perulangan, setidaknya mengurangi menjadi 1 perulangan, bukan perulangan yang tertanam.
Jika saya berada di MATLAB saya akan menemukan array logis yang memenuhi suatu kondisi, misalnya:
numDays = 7;
numRecords = 3;
startDate = [100; 98; 101];
endDate = [103; 102; 104];
dateVector = [98; 99; 100; 101; 102; 103; 104];
count = [10; 5; 4];
dateLogic = logical(numDays,numRecords);
for d = 1:numDays
dateLogic(d,:) = dateVector(d) >= startDate(:,1) & dateVector(d) <= endDate(:,1)
end
countMatrix = dateLogix * count';
Sum = sum(countMatrix,2);
Ini akan memberi saya matriks logis dari nol dan satu yang dapat saya kalikan silang dengan vektor hitungan untuk mendapatkan jumlah saya dan akhirnya vektor Jumlah saya. Saya yakin saya bahkan bisa menggunakan bsxfun untuk menghapus loop pada hari-hari tertentu.
Mohon maafkan potensi kesalahan sintaksis karena saya tidak memiliki akses ke MATLAB saat ini.
Lagi pula, bagaimana saya bisa melakukan hal serupa di VBA. Apakah ada notasi titik dua yang setara untuk mereferensikan seluruh rentang kolom atau baris dalam array. Saya akan menerapkan kumpulan data yang besar sehingga efisiensi adalah yang terpenting. Semakin banyak yang bisa saya lakukan dalam memori sebelum menempelkannya, semakin baik.
Terima kasih sebelumnya.
GetRow
atau fungsiGetColumn
. Ada juga banyak fungsi pembantu yang berguna di sini: www.cpearson.com/excel/array.htm - person David Zemens   schedule 24.07.2014