Hàm vba, số liệu đầu vào là 2 mãng? (1 người xem)

  • Thread starter Thread starter pmhoang
  • Ngày gửi Ngày gửi

Người dùng đang xem chủ đề này

pmhoang

Thành viên thường trực
Tham gia
4/7/08
Bài viết
269
Được thích
83
1. Làm sao để đếm số phần tử trong mãng
2. Trong VBA Mình có 2 mãng pr_a, pr_y, mình muốn đưa 2 mãng đó vào 1 hàm vba để sử lý tính toán, nhưng làm chưa được, mong các bạn giúp đở, cảm ơn các bạn nhiều.
Code này chỉ là thuật toán, chứ nó bị báo lỗi không chạy được, mình đang cần các bạn giúp nó chạy.
[GPECODE=vb]
Option Explicit
Sub Y_trungbinh()
Dim pr_y(0 To 2, 0 To 1) As Double
Dim pr_a(0 To 2, 0 To 1) As Double
'-array pr_a co 6 phan tu, lam sao de dung vba dem duoc 6 phan tu do
pr_y(0, 0) = 0: pr_y(0, 0) = 2
pr_y(0, 0) = 4: pr_y(0, 0) = 1
pr_y(0, 0) = 3: pr_y(0, 0) = 0


pr_a(0, 0) = 1: pr_a(0, 0) = 0
pr_a(0, 0) = 2: pr_a(0, 0) = 2
pr_a(0, 0) = 0: pr_a(0, 0) = 1


kq = tinh_y(pr_y, pr_a)
Debug.Print kq '-hien kq o Immediate
End Sub


Function tinh_y(ByVal pr_y As Double, ByVal pr_a As Double) As Double
'-thuc hien phep tinh nhu sau:
'Y = tong (phan tu pr_y*phan tu pr_a)/(tong pr_a)
'-nghia la:
tongya = pr_y(0, 0) * pr_a(0, 0) + pr_y(0, 1) * pr_a(0, 1) + _
pr_y(1, 0) * pr_a(1, 0) + pr_y(1, 1) * pr_a(1, 1) + _
pr_y(2, 0) * pr_a(2, 0) + pr_y(2, 1) * pr_a(2, 1)
tonga = pr_a(0, 0) + pr_a(0, 1) + _
pr_a(1, 0) + pr_a(1, 1) + _
pr_a(2, 0) + pr_a(2, 1)
tinh_y = tongya / tonga '=10/6
End Function
[/GPECODE]
 

File đính kèm

Lần chỉnh sửa cuối:
1. Làm sao để đếm số phần tử trong mãng
2. Trong VBA Mình có 2 mãng pr_a, pr_y, mình muốn đưa 2 mãng đó vào 1 hàm vba để sử lý tính toán, nhưng làm chưa được, mong các bạn giúp đở, cảm ơn các bạn nhiều.
Code này chỉ là thuật toán, chứ nó bị báo lỗi không chạy được, mình đang cần các bạn giúp nó chạy.
[GPECODE=vb]
Option Explicit
Sub Y_trungbinh()
Dim pr_y(0 To 2, 0 To 1) As Double
Dim pr_a(0 To 2, 0 To 1) As Double
'-array pr_a co 6 phan tu, lam sao de dung vba dem duoc 6 phan tu do
pr_y(0, 0) = 0: pr_y(0, 0) = 2
pr_y(0, 0) = 4: pr_y(0, 0) = 1
pr_y(0, 0) = 3: pr_y(0, 0) = 0


pr_a(0, 0) = 1: pr_a(0, 0) = 0
pr_a(0, 0) = 2: pr_a(0, 0) = 2
pr_a(0, 0) = 0: pr_a(0, 0) = 1


kq = tinh_y(pr_y, pr_a)
Debug.Print kq '-hien kq o Immediate
End Sub


Function tinh_y(ByVal pr_y As Double, ByVal pr_a As Double) As Double
'-thuc hien phep tinh nhu sau:
'Y = tong (phan tu pr_y*phan tu pr_a)/(tong pr_a)
'-nghia la:
tongya = pr_y(0, 0) * pr_a(0, 0) + pr_y(0, 1) * pr_a(0, 1) + _
pr_y(1, 0) * pr_a(1, 0) + pr_y(1, 1) * pr_a(1, 1) + _
pr_y(2, 0) * pr_a(2, 0) + pr_y(2, 1) * pr_a(2, 1)
tonga = pr_a(0, 0) + pr_a(0, 1) + _
pr_a(1, 0) + pr_a(1, 1) + _
pr_a(2, 0) + pr_a(2, 1)
tinh_y = tongya / tonga '=10/6
End Function
[/GPECODE]
1.Nếu là mảng 2 chiều : Số phần tử =(ubound(mảng)-lbound(mang)+1)*(ubound(mảng,2)-lbound(mảng,2)+1)
2.Thử khai báo thêm vài thứ xem sao
PHP:
Option Explicit
Sub Y_trungbinh()
Dim kq                         '<---khai báo kq
Dim pr_y(0 To 2, 0 To 1) As Double
Dim pr_a(0 To 2, 0 To 1) As Double
'-array pr_a co 6 phan tu, lam sao de dung vba dem duoc 6 phan tu do
pr_y(0, 0) = 0: pr_y(0, 1) = 2
pr_y(1, 0) = 4: pr_y(1, 1) = 1
pr_y(2, 0) = 3: pr_y(2, 1) = 0

pr_a(0, 0) = 1: pr_a(0, 1) = 0
pr_a(1, 0) = 2: pr_a(1, 1) = 2
pr_a(2, 0) = 0: pr_a(2, 1) = 1

kq = tinh_y(pr_y, pr_a)
 
Debug.Print kq '-hien kq o Immediate
End Sub

Function tinh_y(pr_y() As Double, pr_a() As Double) As Double '<---khai báo lại pr_y,pr_a là mảng
Dim tongya, tonga                                            '<---khai báo tongya,tonga
'-thuc hien phep tinh nhu sau:
'Y = tong (phan tu pr_y*phan tu pr_a)/(tong pr_a)
'-nghia la:
tongya = pr_y(0, 0) * pr_a(0, 0) + pr_y(0, 1) * pr_a(0, 1) + _
        pr_y(1, 0) * pr_a(1, 0) + pr_y(1, 1) * pr_a(1, 1) + _
        pr_y(2, 0) * pr_a(2, 0) + pr_y(2, 1) * pr_a(2, 1)
tonga = pr_a(0, 0) + pr_a(0, 1) + _
        pr_a(1, 0) + pr_a(1, 1) + _
        pr_a(2, 0) + pr_a(2, 1)
tinh_y = tongya / tonga '=10/6
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
Có hai cách để khai báo tham mảng cho hàm tinh_y

1. cách lười: dùng nguyên tắc cái gì cũng có thể là Variant tuốt
Function tinh_y(byval m1 as varriant, byval m2 as varriant) as double

2. cách chuẩn mực: khai rõ rệt là mảng có kiểu
Function tinh_y(m1() as double, m2() as double) as double
m1() xác định rằng tham phải là mảng, as double xác định phần tử của mảng là kiểu douible

Cả hai cách: muốn biết mảng cho vào bao lớn thì dùng hàm ubound và lbound
Số dòng = ubound(a, 1) - lbound(a, 1) + 1
Số cột = ubound(a, 2) - lbound(a, 2) + 1
Số phần tử = (ubound(a, 1) - lbound(a, 1) + 1) * (ubound(a, 2) - lbound(a, 2) + 1)

Chú ý: tôi có từ khoá điều kiện byval cho cách thứ nhất. Đây là cách cần thiết nếu muốn chuyển tham số byVal. Nếu hàm khai tham số mảng thì bắt buộc phải chuyển byRef.
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom