Gặp vấn đề với hàm tự tạo

  • Thread starter Thread starter kideltn
  • Ngày gửi Ngày gửi
Liên hệ QC

kideltn

Thành viên mới
Tham gia
23/7/10
Bài viết
9
Được thích
0
Chào moi người !
Em có bài toán như sau:
untitled-19.jpg

Yêu cầu là đếm số ô có giá trị bằng 1.
Em làm hàm VB như sau:
PHP:
Public Function ttt(Rg As Range) As Double
Dim i, j, rb1, lb1, rb2, lb2, kp As Double
kp = 0
Dim x() As Double
x = Rg.Value
rb1 = UBound(x, 1)
lb1 = LBound(x, 1)
rb2 = UBound(x, 2)
lb2 = LBound(x, 2)
For i = lb1 To rb1
For j = lb2 To rb2
If x(i, j) = 1 Then
kp = kp + 1
End If
Next
Next
ttt= kp
End Function
Sau đó,em vào Excel và gọi:=ttt(A1:E6)
nhưng nó luôn bảo #VALUE!
Mong các cao thủ chỉ giáo !
Chân thành cảm ơn !
 

File đính kèm

Code loằng ngoằng quá, bạn sửa lai như thế này:

Mã:
Function SumTest(RanArea As Range)
    Dim RanData As Range, i As Double
    i = 0
    For Each RanData In RanArea
        If RanData.Value = 1 Then
            i = i + 1
        End If
    Next
    SumTest = i
 End Function
 
Upvote 0
Chào moi người !
Em có bài toán như sau:
untitled-19.jpg

Yêu cầu là đếm số ô có giá trị bằng 1.
Em làm hàm VB như sau:
PHP:
Public Function ttt(Rg As Range) As Double
Dim i, j, rb1, lb1, rb2, lb2, kp As Double
kp = 0
Dim x() As Double
x = Rg.Value
rb1 = UBound(x, 1)
lb1 = LBound(x, 1)
rb2 = UBound(x, 2)
lb2 = LBound(x, 2)
For i = lb1 To rb1
For j = lb2 To rb2
If x(i, j) = 1 Then
kp = kp + 1
End If
Next
Next
ttt= kp
End Function
Sau đó,em vào Excel và gọi:=ttt(A1:E6)
nhưng nó luôn bảo #VALUE!
Mong các cao thủ chỉ giáo !
Chân thành cảm ơn !
Bạn thử như thế này xem;
Mã:
Public Function bang1(Vung As Range) As Long
    Dim Cll As Range, Tam As Long
        For Each Cll In Vung
            If Cll = 1 Then Tam = Tam + 1
        Next
    bang1 = Tam
End Function
 
Upvote 0
Với hàm của bạn viết như sau

Mã:
Function dem1(rg As Range)
Dim mg(), i, j, kq
mg = rg.Value
For i = 1 To UBound(mg, 1)
For j = 1 To UBound(mg, 2)
If mg(i, j) = 1 Then kq = kq + 1
Next
Next
dem1 = kq
End Function

Hàm này cũng có thể viết

Mã:
Function dem2(rg As Range)
dem2 = WorksheetFunction.CountIf(rg, 1)
End Function
 
Upvote 0
Ok !Cảm ơn các cao thủ nhiều
Em có đoạn code như ở dưới.
Vấn đề là thằng sub chạy rất ok
Còn thằng Funtion thì báo lỗi value
Mã:
'function
Public Function test(p1 As Double) As Double
Dim x As Range
Set x = Worksheets("Sheet1").Range("A1")
x.Value = 9
test = p1
End Function
'sub
Public Sub test1()
Dim x As Range
Set x = Worksheets("Sheet1").Range("A1")
x.Value = 9
End Sub
Tương tự ở đây là :
Mã:
Function dem1(ByRef rg As Range)
Dim kq
kp = 0
rg.Value = 10
dem1 = kq
End Function
Nó cũng báo lỗi value tương tự
Mong chỉ giáo !
 
Upvote 0
Ok !Cảm ơn các cao thủ nhiều
Em có đoạn code như ở dưới.
Vấn đề là thằng sub chạy rất ok
Còn thằng Funtion thì báo lỗi value
Mã:
'function
Public Function test(p1 As Double) As Double
Dim x As Range
Set x = Worksheets("Sheet1").Range("A1")
x.Value = 9
test = p1
End Function
'sub
Public Sub test1()
Dim x As Range
Set x = Worksheets("Sheet1").Range("A1")
x.Value = 9
End Sub
Tương tự ở đây là :
Mã:
Function dem1(ByRef rg As Range)
Dim kq
kp = 0
rg.Value = 10
dem1 = kq
End Function
Nó cũng báo lỗi value tương tự
Mong chỉ giáo !
Đương nhiên không được rồi ---> Hàm thì làm sao có khả năng thay đổi gì đó trên cell chứ
Vầy thì được:
PHP:
Public Function test(p1 As Double) As Double
test = p1
End Function
Ẹc... Ẹc... mà nếu hàm như thế thì.. chẳng ra cái gì cả
 
Upvote 0
Chào moi người !
Em có bài toán như sau:
untitled-19.jpg

Yêu cầu là đếm số ô có giá trị bằng 1.
Em làm hàm VB như sau:
PHP:
Public Function ttt(Rg As Range) As Double
Dim i, j, rb1, lb1, rb2, lb2, kp As Double
kp = 0
Dim x() As Double
x = Rg.Value
rb1 = UBound(x, 1)
lb1 = LBound(x, 1)
rb2 = UBound(x, 2)
lb2 = LBound(x, 2)
For i = lb1 To rb1
For j = lb2 To rb2
If x(i, j) = 1 Then
kp = kp + 1
End If
Next
Next
ttt= kp
End Function
Sau đó,em vào Excel và gọi:=ttt(A1:E6)
nhưng nó luôn bảo #VALUE!
Mong các cao thủ chỉ giáo !
Chân thành cảm ơn !

Mà không biết bạn đếm gì phức tạp không chứ cần gì đến hàm tự tạo dùng công thức có sẵn không được ah
 
Upvote 0
Đương nhiên không được rồi ---> Hàm thì làm sao có khả năng thay đổi gì đó trên cell chứ
Vầy thì được:
PHP:
Public Function test(p1 As Double) As Double
test = p1
End Function
Ẹc... Ẹc... mà nếu hàm như thế thì.. chẳng ra cái gì cả
Mà không biết bạn đếm gì phức tạp không chứ cần gì đến hàm tự tạo dùng công thức có sẵn không được ah
Mình đang học VBA...
 
Upvote 0
Web KT

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

Back
Top Bottom