Hỏi về hàm Find trong VBA

Liên hệ QC

Vĩnh Tường BK

Thành viên mới
Tham gia
20/7/17
Bài viết
1
Được thích
1
Giới tính
Nam
Ví dụ mình viết code sau:
Sub sFind()
Dim I, J, K As Integer
I = [C1:C50000].Find("Con Tho").Row
Debug.Print I
End Sub
Mình có các câu hỏi sau:
1. Nếu có nhiều dòng chứa dữ liệu là (Con Tho) thì giá trị của I là ô dữ liệu đầu tiên chứa (Con Tho) hay ô dữ liệu nào?
2. Có thể thống kê ra các dòng chứa dữ liệu (Con Tho) và gán vào mảng không?
Nhờ mọi người giúp với ạ.
 
Range.Find là phương thức, không phải hàm.
Suy ra, tìm chủ đề bàn về phương thức Find sẽ thấy cái cần hỏi.

Anh ơi phương thức và hàm khác nhau ở đâu ạ ? Em thấy Range.Find đôi khi có trả về giá trị đấy ạ.
Vậy có thể suy ra cái gì có trả về giá trị thì được gọi là phương thức hả anh phan ? --=0--=0
 
Upvote 0
Anh ơi phương thức và hàm khác nhau ở đâu ạ ? Em thấy Range.Find đôi khi có trả về giá trị đấy ạ.
Vậy có thể suy ra cái gì có trả về giá trị thì được gọi là phương thức hả anh phan ? --=0--=0
Cái này em chịu thua rồi anh. Em học vẹt thôi.
Khi xét đối tượng thì có hai nội dung là thuộc tính và phương thức, chứ em chưa thấy chỗ nào nói đối tượng có thủ tục (sub), và (hoặc) hàm (function). Em cũng không rõ tại sao lại như vậy.. Nếu được anh chỉ giúp em hiểu với. Có khi nào đối tượng có thủ tục/ hàm gì không anh nhỉ?
 
Upvote 0
Cái này em chịu thua rồi anh. Em học vẹt thôi.
Khi xét đối tượng thì có hai nội dung là thuộc tính và phương thức, chứ em chưa thấy chỗ nào nói đối tượng có thủ tục (sub), và (hoặc) hàm (function). Em cũng không rõ tại sao lại như vậy.. Nếu được anh chỉ giúp em hiểu với. Có khi nào đối tượng có thủ tục/ hàm gì không anh nhỉ?

Hỏng rồi, bạn hỏi lý thuyết ngay cái đứa không được đi học thì sao nó biết mà trả lời. hic
Nhưng cũng may là bạn được mấy anh cực giỏi lý thuyết ưu ái mà, chắc mấy ảnh sẽ trả lời giúp bạn đấy. Cùng chờ các anh ấy nào. hihi
 
Upvote 0
Cái này em chịu thua rồi anh. Em học vẹt thôi.
Khi xét đối tượng thì có hai nội dung là thuộc tính và phương thức, chứ em chưa thấy chỗ nào nói đối tượng có thủ tục (sub), và (hoặc) hàm (function). Em cũng không rõ tại sao lại như vậy.. Nếu được anh chỉ giúp em hiểu với. Có khi nào đối tượng có thủ tục/ hàm gì không anh nhỉ?

Chỉ là chuyện thuật ngữ thôi. Cái ả Ao To ấy nó có tật hay ghẹo trơ tai. Đề nghị đổi tên thành Foxy hay Vixen gì đó đi; còn muốn ve vẳn thì chơi tên Glue Glass, hay thông mợ thì Lake Parting gì đó.

Hồi xửa hồi xưa, ngừoi ta gọi một việc làm là Routine. Vì vậy, khi chia việc làm ra từng phần nhỏ thì gọi chúng là Subroutine (hàm con).
Trong các ngôn ngữ cấu trúc (Structured) thì người ta phân biệt loại Subroutine có trả về trị là hàm (Function) và loại không trả về trị là thủ tục (Procedure/Subroutine/Sub). Điển hình là Pascal gọi Procedure, FORTRAN gọi Subroutine, và BASIC gọi Sub.
Hồi xưa, cái này chỉ dùng để phân biệt hàm con có thể trả về một trị và hàm con chỉ làm việc chứ không trả về trị. Đây là không tính các trị trả về theo dạng tham.
Một số ngôn ngữ cấu trúc gần với ngôn ngữ máy hơn thì có xu hướng xoá bỏ sự phân biệt này. Tất cả các hàm con đều gọi là hàm. Điển hình là C.
Khi lập trình hướng đối tượng (Object Oriented) ra đời thì người ta cho rằng cái tên hàm dùng cho đối tượng không hẳn đúng. Và ngừoi ta chọn đổi lại thành phương thức (method) cho nó hữu lý hơn.

Túm lại thì có thể hiểu đại khái rằng một lớp (Class) có định nghĩa một số Sub/Func, các Sub/Func này là Methods của Class.
Về sau này, các cách thiết kế Class còn có thể từ từ làm mờ đi cái ranh giới giữa thuộc tính và phương thức.
 
Upvote 0
Mình có các câu hỏi sau:
1. Nếu có nhiều dòng chứa dữ liệu là (Con Tho) thì giá trị của I là ô dữ liệu đầu tiên chứa (Con Tho) hay ô dữ liệu nào?
2. Có thể thống kê ra các dòng chứa dữ liệu (Con Tho) và gán vào mảng không?
Nhờ mọi người giúp với ạ.
2:= Có thể & vô tư gán, nhờ FindNext nó mần cho.
1:= Tự ên đi, thử rồi thích ngay í mà, sau khi xài (2) rành rẽ!
Bạn tham khảo:
PHP:
Private Sub Worksheet_Change(ByVal Target As Range)
 If Not Intersect(Target, [B3]) Is Nothing Then
    Dim Rws As Long, J As Long, W As Integer
    Dim Sh As Worksheet, Rng As Range, sRng As Range
    Dim MyAdd As String
    
    Application.ScreenUpdating = False
    Set Sh = Sheet1
    Rws = Sh.[b1].CurrentRegion.Rows.Count
    ReDim Arr(1 To Rws, 1 To 3)
    [b7].Resize(Rws, 3).Value = Arr()
    Rows("7:" & Rws + 99).Hidden = False
    Set Rng = Sh.[b1].Resize(Rws)
    Set sRng = Rng.Find(Target.Value, , xlFormulas, xlWhole)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            W = W + 1:                                                  Arr(W, 1) = W
            Arr(W, 2) = sRng.Offset(, 1).Value:             Arr(W, 3) = sRng.Offset(, 2).Value
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    End If
    If W Then
        [b7].Resize(W, 3).Value = Arr()
        Rows((7 + W) & ":" & Rws + 7).Hidden = True
    End If
    Application.ScreenUpdating = True
 End If
End Sub
Nhũ: Nhưng viết như bạn chứa vài ẩn trắc không cần thiết.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom