Hàm tra dữ liệu (1 người xem)

Liên hệ QC

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

binhpt69

Thành viên mới
Tham gia
30/9/13
Bài viết
9
Được thích
0
Em mới tập tò VBA và có một đề bài thế này:
Lập hàm Xác định giá trị A biết:
A(i,j) " Ứng với mỗi giá trị i và j có một giá trị A"
i=1-->5
j=1-->1.55
i là các giá trị: 1,2,3,...5 ( số nguyên)
j là các giá trị: 1,1.05,1.1,1.15,1.2,1.25 -->1.55)
j=x/y; x, y là các số thực
Cú pháp của hàm cần lập là: A(i,x,y)
Nhờ các bậc tiền bối về VBA trợ giúp.
 
Lần chỉnh sửa cuối:
Em mới tập tò VBA và có một đề bài thế này:
Lập hàm Xác định giá trị A biết:
A(i,j) " Ứng với mỗi giá trị i và j có một giá trị A, A là các giá trị đã biết"
i=1-->5
j=1-->1.55
i là các giá trị: 1,2,3,...5 ( số nguyên)
j là các giá trị: 1,1.05,1.1,1.15,1.2,1.25 -->1.55)
j=x/y; x, y là các số thực
Nhờ các bậc tiền bối về VBA trợ giúp.
Bài này có vẻ giống bài toán, tuy nhiên chỉ biết i,j còn A, x, y là gì thì chịu.
 
Upvote 0
A(i,x,y)
1. j=x/y mà j chạy từ 1-->1.55 => lỡ người nhập nhập vào x/y nó không bằng bất cứ giá trị nào của j thì làm sao ?
2. Giả sử tính được j => lúc này có i, j thì dựa vào đâu để tra ra giá trị A ?
 
Upvote 0
Em mới tập tò VBA và có một đề bài thế này:
Lập hàm Xác định giá trị A biết:
A(i,j) " Ứng với mỗi giá trị i và j có một giá trị A"
i=1-->5
j=1-->1.55
i là các giá trị: 1,2,3,...5 ( số nguyên)
j là các giá trị: 1,1.05,1.1,1.15,1.2,1.25 -->1.55) --> trọng tâm nằm ở chỗ này
j=x/y; x, y là các số thực --> và chỗ này
Cú pháp của hàm cần lập là: A(i,x,y)
Nhờ các bậc tiền bối về VBA trợ giúp.

Xem hai điểm tọng tâm:
(a) j là phần tử của tập hợp { 1,1.05,1.1,1.15,1.2,1.25 -->1.55 }
(b) j được tính từ con toán x/y

Như vậy, phải có thêm một phép hàm tham chiếu để x/y -> { 1,1.05,1.1,1.15,1.2,1.25 -->1.55 }. Ví dụ x/y = 20 thì ứng với trị nào trong tập hợp?
Đại khái LookUp gì gì đó. Nhưng không có chi tiết hàm thám chiếu thì có thánh mà giải.

tb. Viết A(i,x,y) là sai. A(i, j(x,y)) mới đúng
 
Lần chỉnh sửa cuối:
Upvote 0
Đây là file tham chiếu, nhờ mọi người giúp đỡ.

Xem hai điểm tọng tâm:
(a) j là phần tử của tập hợp { 1,1.05,1.1,1.15,1.2,1.25 -->1.55 }
(b) j được tính từ con toán x/y

Như vậy, phải có thêm một phép hàm tham chiếu để x/y -> { 1,1.05,1.1,1.15,1.2,1.25 -->1.55 }. Ví dụ x/y = 20 thì ứng với trị nào trong tập hợp?
Đại khái LookUp gì gì đó. Nhưng không có chi tiết hàm thám chiếu thì có thánh mà giải.

tb. Viết A(i,x,y) là sai. A(i, j(x,y)) mới đúng[/QUOTE



Nhờ viết hàm tính anpha1,2,3,4


i: là các số nguyên dương đến 5
j: là các số thực,
Anpha 1, 2, 3, 4 phụ thuộc vào (i,j) " với mỗi (i,j) có anpha 1, 2,3,4"
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Xem hai điểm tọng tâm:
(a) j là phần tử của tập hợp { 1,1.05,1.1,1.15,1.2,1.25 -->1.55 }
(b) j được tính từ con toán x/y

Như vậy, phải có thêm một phép hàm tham chiếu để x/y -> { 1,1.05,1.1,1.15,1.2,1.25 -->1.55 }. Ví dụ x/y = 20 thì ứng với trị nào trong tập hợp?
Đại khái LookUp gì gì đó. Nhưng không có chi tiết hàm thám chiếu thì có thánh mà giải.

tb. Viết A(i,x,y) là sai. A(i, j(x,y)) mới đúng[/QUOTE



Nhờ viết hàm tính anpha1,2,3,4


i: là các số nguyên dương đến 5
j: là các số thực,
Anpha 1, 2, 3, 4 phụ thuộc vào (i,j) " với mỗi (i,j) có anpha 1, 2,3,4"

Bạn thử hàm sau
PHP:
Function Alpha(a As String, i As Integer, j)
m = Columns(1).Find(j, lookat:=xlWhole).Row
n = Rows(2).Find(i, lookat:=xlWhole).Column
x = Rows(1).Find(a, lookat:=xlWhole).Column
Do While x < n
x = x + 4
Loop
Alpha = Cells(m, x)
End Function
cú pháp
Mã:
=Alpha(a,i,j)
a="a1"..."a4"
i=1...5
j=1,1.05....
 
Upvote 0
Mở rộng đề bài với j là các giá trị có thể chạy từ 1--> 1,5 ( có thể nội suy được)

Bạn thử hàm sau
PHP:
Function Alpha(a As String, i As Integer, j)
m = Columns(1).Find(j, lookat:=xlWhole).Row
n = Rows(2).Find(i, lookat:=xlWhole).Column
x = Rows(1).Find(a, lookat:=xlWhole).Column
Do While x < n
x = x + 4
Loop
Alpha = Cells(m, x)
End Function
cú pháp
Mã:
=Alpha(a,i,j)
a="a1"..."a4"
i=1...5
j=1,1.05....
Thanks Bạn!
Nhưng hàm Alpha(" ";i;j) với j là các số thực lại không chạy được, chỉ chạy được với j là các số nguyên thôi.
Và mình muốn mở rộng như sau:
Mở rộng đề bài với j là các giá trị có thể chạy từ 1--> 1,5 ( có thể nội suy được)
 
Upvote 0
Thanks Bạn!
Nhưng hàm Alpha(" ";i;j) với j là các số thực lại không chạy được, chỉ chạy được với j là các số nguyên thôi.
Và mình muốn mở rộng như sau:
Mở rộng đề bài với j là các giá trị có thể chạy từ 1--> 1,5 ( có thể nội suy được)
Bạn thử cái này coi sao
PHP:
Function Alpha(a As String, i As Integer, j)
Set x = [B1:U1]
Set y = [A3:A14]
c = y.Column
r = x.Row
m = WorksheetFunction.Match(j, Columns(c), 1)
n = Rows(r + 1).Find(i, lookat:=xlWhole).Column
k = Rows(r).Find(a, lookat:=xlWhole).Column
Do While k < n
k = k + 4
Loop
If j = Cells(m, c) Then Alpha = Cells(m, k) _
Else Alpha = WorksheetFunction.Forecast(j, y.Offset(, k - c), y)
End Function
 
Upvote 0
Thanks bạn! Mình đang nghiên cứu code của bạn để áp dụng cho các sheets khác.

Bạn thử cái này coi sao
PHP:
Function Alpha(a As String, i As Integer, j)
Set x = [B1:U1]
Set y = [A3:A14]
c = y.Column
r = x.Row
m = WorksheetFunction.Match(j, Columns(c), 1)
n = Rows(r + 1).Find(i, lookat:=xlWhole).Column
k = Rows(r).Find(a, lookat:=xlWhole).Column
Do While k < n
k = k + 4
Loop
If j = Cells(m, c) Then Alpha = Cells(m, k) _
Else Alpha = WorksheetFunction.Forecast(j, y.Offset(, k - c), y)
End Function
Cảm ơn vì sự giúp đỡ! Mình đang nghiên cứu code của bạn để áp dụng cho các sheets khác.
 
Upvote 0
Và có một điều nữa là với j ngoài khoảng 1->1,55 hàm vẫn cho giá trị,
Bạn có thể giới hạn j trong khoảng 1->1,55: Nếu ngoài giới hạn thì hàm báo lỗi.
Thanks!
 
Upvote 0
Thêm đoạn sau vào đầu function
Mã:
If j < 1 Or j > 1.55 Then
MsgBox "Ngoai vung phu song"
Alpha = "N/A"
Exit Function
End If
 
Upvote 0
Bạn thử cái này coi sao
PHP:
Function Alpha(a As String, i As Integer, j)
Set x = [B1:U1]
Set y = [A3:A14]
c = y.Column
r = x.Row
m = WorksheetFunction.Match(j, Columns(c), 1)
n = Rows(r + 1).Find(i, lookat:=xlWhole).Column
k = Rows(r).Find(a, lookat:=xlWhole).Column
Do While k < n
k = k + 4
Loop
If j = Cells(m, c) Then Alpha = Cells(m, k) _
Else Alpha = WorksheetFunction.Forecast(j, y.Offset(, k - c), y)
End Function
Mình đã chạy thử code của bạn.
Kết quả đối với i = số lẻ (1,3,5), chạy đúng, i = số chẵn chạy sai (2,4).
Mình không tìm được lý do vì sao.
Mong bạn kiểm tra lại giúp.
 
Upvote 0
Upvote 0

File đính kèm

Upvote 0
Nội suy sai giá trị.

Bạn giữ nguyên k=k+4 là được
Mình sử dụng code của bạn, áp dụng để nội suy thì thấy giá trị không phù hợp nên kiểm tra lại.
Bạn test hộ lại code với.
(Vùng chữ màu đỏ là bị sai)
p/s: Công thức alpha("";i;j) muốn sử dụng cho tất cả các sheet thì phải tham chiếu như thế nào?
Mình chọn Worksheets("alpha,beta").Active trước function mà không đc.
 
Upvote 0

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

Back
Top Bottom