Hỏi về hàm instr trong VBA (1 người xem)

Liên hệ QC

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

minhxaydungvinh

Thành viên chính thức
Tham gia
25/12/10
Bài viết
85
Được thích
7
Mình tìm trên diễn đàn có 1 đoạn VBA để đếm số lần ký tự lặp lại:
Mã:
Sub DemDulieutrung()
Dim cell As Range, Str As String
Dim n As Long
Str = ""
For Each cell In Selection
    n = WorksheetFunction.CountIf(Selection, cell)
    If n > 1 And InStr(1, Str, cell) = 0 Then Str = Str & cell & " trung: " & n & " lan " & Chr(10)
Next
MsgBox Str
 End Sub
Mình muốn hỏi InStr(1, Str, cell) = 0 có ý nghĩa như thế nào? và Chr(10) là gì?
 
Mình tìm trên diễn đàn có 1 đoạn VBA để đếm số lần ký tự lặp lại:
Mã:
Sub DemDulieutrung()
Dim cell As Range, Str As String
Dim n As Long
Str = ""
For Each cell In Selection
    n = WorksheetFunction.CountIf(Selection, cell)
    If n > 1 And InStr(1, Str, cell) = 0 Then Str = Str & cell & " trung: " & n & " lan " & Chr(10)
Next
MsgBox Str
 End Sub
Mình muốn hỏi InStr(1, Str, cell) = 0 có ý nghĩa như thế nào? và Chr(10) là gì?
Bạn có thế tham khảo thêm bài 59 link sau

MsgBox Chr(10)
http://www.giaiphapexcel.com/diendan/threads/tìm-kiếm-trong-data-validation-excel.127658/page-3
 
Mình tìm trên diễn đàn có 1 đoạn VBA để đếm số lần ký tự lặp lại:
Mã:
Sub DemDulieutrung()
Dim cell As Range, Str As String
Dim n As Long
Str = ""
For Each cell In Selection
    n = WorksheetFunction.CountIf(Selection, cell)
    If n > 1 And InStr(1, Str, cell) = 0 Then Str = Str & cell & " trung: " & n & " lan " & Chr(10)
Next
MsgBox Str
 End Sub
Mình muốn hỏi InStr(1, Str, cell) = 0 có ý nghĩa như thế nào? và Chr(10) là gì?

Code này bạn nói "tìm trên diễn đàn" mà diễn đàn nào? nếu diễn đàn này thì cho link.

1. Thứ nhất: nó không phải tìm ký tự mà là tìm giá trị lặp lại của từng ô.
2. Thứ hai: code này sai. Nó không tính được giá trị "trung", "trung:" và "lan" (và vài giá trị số)

InStr(1, Str, cell) = 0 có nghĩa là giá trị của cell đang xét không nằm trong chuỗi kết quả. Ý của tác giả là giá trị này "chưa được tính"
Chr(10) là ký tự xuongs hàng. Tác giả muốn trong chuỗi kết quả, mỗi giá trị được trình bày 1 hàng riêng.
 
Code này bạn nói "tìm trên diễn đàn" mà diễn đàn nào? nếu diễn đàn này thì cho link.

1. Thứ nhất: nó không phải tìm ký tự mà là tìm giá trị lặp lại của từng ô.
2. Thứ hai: code này sai. Nó không tính được giá trị "trung", "trung:" và "lan" (và vài giá trị số)

InStr(1, Str, cell) = 0 có nghĩa là giá trị của cell đang xét không nằm trong chuỗi kết quả. Ý của tác giả là giá trị này "chưa được tính"
Chr(10) là ký tự xuongs hàng. Tác giả muốn trong chuỗi kết quả, mỗi giá trị được trình bày 1 hàng riêng.
Link đây bạn http://www.giaiphapexcel.com/diendan/threads/kiểm-tra-trùng-dữ-liệu-trong-1-cột-dùng-code.21197/ #18
Mình thử code vẫn thấy đúng mà
 
Đúng là do ăn may thôi bạn. Thử sửa số cuối thành số 2 xem còn đúng không.
Nếu vẫn làm theo kiểu xử lý chuỗi thì có thể làm vầy.
PHP:
Sub DemTrung()
Dim Chuoi As String, So As String, DaiChuoi As Long, DaiSo As Long, Dem As Long, KQ As String
Chuoi = "," & Join(Application.WorksheetFunction.Transpose(Selection.Value), ",,") & ","
Do Until Len(Chuoi) < 3
    DaiChuoi = Len(Chuoi)
    So = Left(Chuoi, InStr(2, Chuoi, ","))
    Chuoi = Replace(Chuoi, So, "")
    Dem = (DaiChuoi - Len(Chuoi)) / Len(So)
    If Dem > 1 Then
        KQ = KQ & vbNewLine & So & " trung: " & Dem & " lan"
    End If
Loop
KQ = Mid(Replace(KQ, ",", ""), 2)
MsgBox KQ
End Sub
 

"thử code vẫn thấy đúng"?
Bạn hoàn toàn không hiểu làm cách nào để thử code, ngay cả khi biết chỗ nghi ngờ là sai:
trong vùng range thử code, tạo cỡ chừng 3 ô có trị "trung". Sau đó thử xem nó có in ra "trung trung: 3 lan" hay không.
 
Web KT

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

Back
Top Bottom