Hỏi về về cách sử dụng Redim

Liên hệ QC

tien2005

Thành viên mới
Tham gia
1/8/06
Bài viết
4
Được thích
1
Các Bác cho em hỏi: Em có các biến A, B, C, ... sử dụng theo kiểu Redim như sau:

........................
Dim A() As Integer, B() As Integer, C() As Integer
Redim A(5)
Redim B(5)
Redim C(5) ...........
Sau khi chạy chương trình theo vòng lặp For i=1 to 5 ... next i thì có kết quả sau:
A(1)=1, A(2)=3, A(3)=5, A(4)=2, A(5)=1
B(1)=2, B(2)=1, B(3)=2, B(4)=4, B(5)=2
C(1)=4, C(2)=2, C(3)=4, C(4)=2, C(5)=3

Vấn đề đặt ra ở đây là:
Em tìm được giá trị lớn nhất của A là 5 thì có cách nào để biết được giá trị i tương ứng không.
(ở ví dụ trên tương ứng với i=3). Mục đích của việc tìm giá trị i là để lấy được các giá trị B(i),
C(i), D(i) ...

Nếu Bác nào biết thì xin chỉ giúp, hoặc có cách làm nào khác hay không (em nghe nói có thể sử dụng
Collection làm được việc này, tuy nhiên em không biết tí gì về Collection)
Mong các Bác giúp em.
Thanks
 
Bạn có thể đặt 1 biến tên là Max, lúc đầu đặt Max=A(1)
Sau đó trong For .... Next bạn đặt thêm đk, đại loại như
if A(i) > max then
j=i
Max=A(j)
end if

Sau đó lấy B(j), C(j) là được.

Bạn thử làm xem có được không, có gì phản hồi để còn sửa nhé!
 
Cám ơn Bạn ThanhThao đã có câu trả giúp Tôi.
Tuy nhiên ý định của Tôi ở đây là tránh sử dụng hàm if ... end if nhiều lần trong vòng For...Next, sau khi vòng For ... Next kết thúc Tôi dùng Application.Worksheet.Function.Max(A) để tìm giá trị lớn nhất của A rồi từ đó tìm ra giá trị i tương ứng. Mặc khác nếu là A(i,j,k) thì muốn tìm max(A) tương ứng với j ,... thì làm như thế nào. Bạn có thể giúp mình được không.
Thật ra v/đ tìm max(A(i,j,k)) tương ứng với j,.. Tôi đã giải quyết được rồi nhưng tốc độ tính toán rất chậm, Tôi muốn sử dụng các giá trị của A(i,j,k) được lưu trong bộ nhớ của máy tính sau đó truy xuất ra thì sẽ nhanh hơn rất nhiều (dữ liệu của Tôi được lấy từ 1 chương trình khác xuất sang Access, khi chuyển qua Excel #65536 dòng)
 
Bạn thử xem cái này có giúp ích gì bạn k?

Lê Văn Duyệt
 

File đính kèm

  • ArrayFunction.rar
    26.1 KB · Đọc: 91
Chúng ta chỉ nên dùng For...Next nếu là bắt buộc.

Đây là cách làm nhanh nhất.

Sub TEST()
Dim A(2)
Dim nMax, nIndex

A(0) = 1: A(1) = 4: A(2) = 5

nMax = Application.WorksheetFunction.Max(A)
nIndex = Application.WorksheetFunction.Match(nMax, A)

MsgBox "Nằm ở dòng thứ " & nIndex & " trong mảng A", , "Giá trị lớn nhất = " & nMax

End Sub
 
Web KT
Back
Top Bottom