Viết Code cho hàm Max (không dùng hàm Max có sẵn trong excel) (1 người xem)

Liên hệ QC

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

daominhphuc

Thành viên mới
Tham gia
20/9/08
Bài viết
2
Được thích
0
Mình thấy hàm Max trong excel có cấu trúc như sau Max(number1,[number2],[number3],[number4]...)
Mình muốn viết hàm tìm giá trị lớn nhất trong dãy số 1,-3,5,15,25,55,-4,-19,72,...... mà không dùng hàm max có sẵn trong excel thì phải làm thế nào? Mình muốn hàm tạo ra có dạng tổng quát như hàm Max của excel vậy.
Mong các bạn Pro giúp minh hiểu về thuật toán viết hàm Max cho n phần tử
 
Lần chỉnh sửa cuối:
Mình thấy hàm Max trong excel có cấu trúc như sau Max(number1,[number2],[number3],[number4]...)
Mình muốn viết hàm tìm giá trị lớn nhất trong dãy số 1,-3,5,15,25,55,-4,-19,72,...... mà không dùng hàm max có sẵn trong excel thì phải làm thế nào? Mình muốn hàm tạo ra có dạng tổng quát như hàm Max của excel vậy.
Mong các bạn Pro giúp minh hiểu về thuật toán viết hàm Max cho n phần tử
Excel đã có hàm MAX, bạn không dùng mà cần viết một hàm có chức năng tương tự. Vậy bạn có thể cho biết mục đích của bạn không?

Về thuật toán thì bạn có thể dùng cách này: Dùng 1 biến tạm, duyệt qua toàn bộ các phần tử của tập hợp cần tính MAX, nếu phần tử lớn hơn biến tạm thì gán giá trị phần tử vào biến tạm. Hết vòng lặp, MAX của tập hợp là giá trị biến tạm.
 
Upvote 0
Mình thấy hàm Max trong excel có cấu trúc như sau Max(number1,[number2],[number3],[number4]...)
Mình muốn viết hàm tìm giá trị lớn nhất trong dãy số 1,-3,5,15,25,55,-4,-19,72,...... mà không dùng hàm max có sẵn trong excel thì phải làm thế nào? Mình muốn hàm tạo ra có dạng tổng quát như hàm Max của excel vậy.
Mong các bạn Pro giúp minh hiểu về thuật toán viết hàm Max cho n phần tử

Bạn muốn cái nào?

Dạng hàm:
Function MaxOf(ParamArray arg() As Variant) As Variant
' code ở đây
End Function

Thuật toán:
Có 2 thuật toán, 1 là làm theo huuthang_bd đã đưa ra. cách thứ 2 chỉ hữu dụng cho các loại ngôn ngữ có khả năng truy cập thẳng vào bộ nhớ cho nên không cần biết.
 
Upvote 0
Bạn muốn cái nào?

Dạng hàm:
Function MaxOf(ParamArray arg() As Variant) As Variant
' code ở đây
End Function

Thuật toán:
Có 2 thuật toán, 1 là làm theo huuthang_bd đã đưa ra. cách thứ 2 chỉ hữu dụng cho các loại ngôn ngữ có khả năng truy cập thẳng vào bộ nhớ cho nên không cần biết.

Cảm ơn bạn VetMini và bạn huuthang_bd.
Nhờ ý kiến của hai bạn mình đã viết được nhu sau:
Function GTLN(ParamArray arg() As Variant) As Variant
' Tim gia tri lon nhat
tam = arg(0)
For i = 1 To UBound(arg)
If tam > arg(i) Then
tam = tam
Else
tam = arg(i)
End If
Next
GTLN = tam
End Function
 
Upvote 0
Sửa 1 chút sẽ ngon hơn:

Mã:
Function GTLN(ParamArray arg() As Variant) As Variant
' Tim gia tri lon nhat
Dim Tam
Tam = arg(0)
For i = 1 To UBound(arg)
If Tam > arg(i) Then Tam = arg(i)
Next
GTLN = Tam
End Function
 
Upvote 0
Sửa 1 chút sẽ ngon hơn:

Mã:
Function GTLN(ParamArray arg() As Variant) As Variant
' Tim gia tri lon nhat
Dim Tam
Tam = arg(0)
For i = 1 To UBound(arg)
[COLOR=#ff0000][B]If Tam > arg(i) Then[/B][/COLOR] Tam = arg(i)
Next
GTLN = Tam
End Function
Em không hiểu sao lại có chuyện đỏ đỏ như trên nhỉ?
arg(i) là 1 array thì làm sao mà so sánh vậy được hả anh
 
Upvote 0
Mình thấy đoạn Code này có đoạn thừa nên mình cắt nó đi thôi chứ chưa Test nên không soát hết lỗi. Trong Code còn biến i chưa khai nữa. Code sửa như sau sẽ chạy thôi:

Mã:
Function GTLN(ByRef arg() As Variant) As Variant
' Tim gia tri lon nhat
Dim Tam, i
Tam = arg(0)
For i = 1 To UBound(arg)
If Tam < arg(i) Then Tam = arg(i)
Next
GTLN = Tam
End Function

Còn cái đo đỏ chỉ là lỗi chính tả khi viết không cẩn thận thôi. Nếu Test thì chắc chắn không tồn tại
 
Upvote 0
Yêu cầu của đề bài là dữ liệu nhập phải tổng quát, giống như hàm của workbook. Cho nên code cần phải phân biệt đầu vào nhập một số dữ liệu, nhập một mảng, hay nhập một range.

@sealand: Tự dưng kiểu truyền tham số là ParamArray bạn viết lại thành ByRef thành ra không đúng nữa
 
Upvote 0
Mình thấy hàm Max trong excel có cấu trúc như sau Max(number1,[number2],[number3],[number4]...)
Mình muốn viết hàm tìm giá trị lớn nhất trong dãy số 1,-3,5,15,25,55,-4,-19,72,...... mà không dùng hàm max có sẵn trong excel thì phải làm thế nào? Mình muốn hàm tạo ra có dạng tổng quát như hàm Max của excel vậy.
Mong các bạn Pro giúp minh hiểu về thuật toán viết hàm Max cho n phần tử

Xem bài này đã giải quyết vấn đề của bạn, nhớ đọc lun các bài thảo luận trước đó về vấn đề xây dựng hàm này

http://www.giaiphapexcel.com/forum/...ảo-luận-về-hàm-MAX-tự-tạo&p=457496#post457496
 
Upvote 0
Web KT

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

Back
Top Bottom