Hàm tìm kiếm không được do lỗi của format dữ liệu

Liên hệ QC

manhhung12

Thành viên thường trực
Tham gia
20/3/08
Bài viết
232
Được thích
88
Chào cácvv bạn
Tôi có 1 sub và 1 hàm tìm kiếm nhưng kết quả không chính xác nếu dữ liệu tôi nhập vào là các chữ số, nhưng nếu tôi nhập có 1 chữ cái đầu thì hàm tìm kiếm đươc.
Tôi up file lên kèm sau đây nhờ các bạn hướng dẫn cách khắc phục
Mô tả thuật giải:
ở cột F trong sh(DK_DH) nếu có đánh dấu thì toii nhập vào tên và số hiệu của người đố. sau đó tôi thực hiện macro cho chép Data sang sh(DS_DH). Ở sh(DS_DH) nếu kiểm tra trên cột H đã có sô hiêu thì cộng dồn CP vào cho người đố
Cảm ơn các bạn nhiều
 

File đính kèm

Bạn cho hỏi bạn làm cách nào mà click vào cell thì nó hiện lên ô check như thế?
 
Upvote 0
Chào cácvv bạn
Tôi có 1 sub và 1 hàm tìm kiếm nhưng kết quả không chính xác nếu dữ liệu tôi nhập vào là các chữ số, nhưng nếu tôi nhập có 1 chữ cái đầu thì hàm tìm kiếm đươc.
Tôi up file lên kèm sau đây nhờ các bạn hướng dẫn cách khắc phục
Mô tả thuật giải:
ở cột F trong sh(DK_DH) nếu có đánh dấu thì toii nhập vào tên và số hiệu của người đố. sau đó tôi thực hiện macro cho chép Data sang sh(DS_DH). Ở sh(DS_DH) nếu kiểm tra trên cột H đã có sô hiêu thì cộng dồn CP vào cho người đố
Cảm ơn các bạn nhiều

bạn thử xem nhé, đừng cố phức tạp hóa vấn đề.

PHP:
Sub CopyOB()
    On Error Resume Next
    Application.ScreenUpdating = False
    Dim i As Long, iR As Long
    iR = 6
    S01.Range("A7:H10000").ClearContents
    S01.Range("A7:H10000").ClearFormats
    With S00
        For i = 4 To .Range("B65000").End(xlUp).Row
            If .Range("G" & i).Value <> "" Or .Range("H" & i).Value <> "" Then
                iR = iR + 1
                S01.Range("A" & iR & ":F" & iR).Value = .Range("A" & i & ":F" & i).Value
                S01.Range("G" & iR & ":H" & iR).Value = .Range("J" & i & ":K" & i).Value
            End If
        Next
    End With
    With S01
        .Range("D" & iR + 2).Value = "TONG SO CP DU HOP"
        .Range("D" & iR + 3).Value = "TY LE CP DU HOP"
        .Range("F" & iR + 2).Value = WorksheetFunction.Sum(S01.Range("F7:F" & iR))
        With .Range("F" & iR + 3)
            .Value = Round(S01.Range("F" & iR + 2).Value / S01.Range("F" & 4).Value, 6)
            .NumberFormat = "0.000%"
        End With
        .Range("F7:F" & iR + 2).NumberFormat = "#,##0"
        .Cells.Font.Name = ".vnTime"
    End With
    Application.ScreenUpdating = True
End Sub

Thân!
 

File đính kèm

Upvote 0
bạn thử xem nhé, đừng cố phức tạp hóa vấn đề.

PHP:
Sub CopyOB()
    On Error Resume Next
    Application.ScreenUpdating = False
    Dim i As Long, iR As Long
    iR = 6
    S01.Range("A7:H10000").ClearContents
    S01.Range("A7:H10000").ClearFormats
    With S00
        For i = 4 To .Range("B65000").End(xlUp).Row
            If .Range("G" & i).Value <> "" Or .Range("H" & i).Value <> "" Then
                iR = iR + 1
                S01.Range("A" & iR & ":F" & iR).Value = .Range("A" & i & ":F" & i).Value
                S01.Range("G" & iR & ":H" & iR).Value = .Range("J" & i & ":K" & i).Value
            End If
        Next
    End With
    With S01
        .Range("D" & iR + 2).Value = "TONG SO CP DU HOP"
        .Range("D" & iR + 3).Value = "TY LE CP DU HOP"
        .Range("F" & iR + 2).Value = WorksheetFunction.Sum(S01.Range("F7:F" & iR))
        With .Range("F" & iR + 3)
            .Value = Round(S01.Range("F" & iR + 2).Value / S01.Range("F" & 4).Value, 6)
            .NumberFormat = "0.000%"
        End With
        .Range("F7:F" & iR + 2).NumberFormat = "#,##0"
        .Cells.Font.Name = ".vnTime"
    End With
    Application.ScreenUpdating = True
End Sub
Thân!
Cảm ơn bạn. Tôi đã làm được rồi.
Bạn làm rất gọn nhưng kg đúng như ý tôi mong muốn. Vì nếu trong DS có tư 2 người trở lên ủy quyền cho 1 người thì số CP sẽ được cộng dồn cho người đó. Lúc này sang sh2 chỉ có 1 bản ghi đại diện (NDUQ) mà có số CP = tổng CP của những người UQ cho anh ta. (trường hợp nguyễn văn Cún trong file). Tôi đã sử dụng hàm Match nhưng do trước đó tôi chưa format DATA về dạng string nên Match làm việc kg chính xác.
 
Upvote 0
Cảm ơn bạn. Tôi đã làm được rồi.
Bạn làm rất gọn nhưng kg đúng như ý tôi mong muốn. Vì nếu trong DS có tư 2 người trở lên ủy quyền cho 1 người thì số CP sẽ được cộng dồn cho người đó. Lúc này sang sh2 chỉ có 1 bản ghi đại diện (NDUQ) mà có số CP = tổng CP của những người UQ cho anh ta. (trường hợp nguyễn văn Cún trong file). Tôi đã sử dụng hàm Match nhưng do trước đó tôi chưa format DATA về dạng string nên Match làm việc kg chính xác.
Cảm ơn bạn. Tôi đã làm được rồi.
Bạn làm rất gọn nhưng kg đúng như ý tôi mong muốn. Vì nếu trong DS có tư 2 người trở lên ủy quyền cho 1 người thì số CP sẽ được cộng dồn cho người đó. Lúc này sang sh2 chỉ có 1 bản ghi đại diện (NDUQ) mà có số CP = tổng CP của những người UQ cho anh ta. (trường hợp nguyễn văn Cún trong file). Tôi đã sử dụng hàm Match nhưng do trước đó tôi chưa format DATA về dạng string nên Match làm việc kg chính xác.

Bạn hãy làm 1 bài mẫu thật chuẩn, qua dó mới biết ý bạn là như thế nào.

Giả sử ở TH Nguyễn Văn Cún trên :

Đặng Quốc Bình ủy quyền cho Nguyễn Văn Cún : 700 CP
Lê Đức Bình ủy quyền cho Nguyễn Văn Cún : 4.000 CP


Vậy thì TH này trích xuất sang báo cáo thế nào ??? 1 dòng hay hai dòng ??? Cụ thể ra sao ??
Vì trong VD của bạn cũng để là 2 dòng, và không cộng dồn lại
Thân!
 
Upvote 0
Vì hàm Match kg tìm được nên nó kg cộng dồn được. Thực ra trong code tôi đã thể hiện việc cộng dồn (nếu tìm được thì kg tăng số dòng (trong sh đích) lên mà cộng dồn vào dòng tìm được. Tôi đã format cho giá trị tìm kiếm(string_lookup) và cột tìm kiếm (Array_lookup) nên giải quyết được rồi bạn ah.
Nhân đay tôi muốn hỉ them rằng:
Trong 1 hàm (sự kiện: ...._dounbleclick) tôi truyền vào 1 biến (target as range). trong hàm này tôi muốn biết địa chỉ (hàng thứ mấy/số hàng) của target này thì dùng phương thức nào đẻ có được??
Bạn hướng dẫn tôi với.
Cảm ơn nhiều
 
Upvote 0
Vì hàm Match kg tìm được nên nó kg cộng dồn được. Thực ra trong code tôi đã thể hiện việc cộng dồn (nếu tìm được thì kg tăng số dòng (trong sh đích) lên mà cộng dồn vào dòng tìm được. Tôi đã format cho giá trị tìm kiếm(string_lookup) và cột tìm kiếm (Array_lookup) nên giải quyết được rồi bạn ah.
Nhân đay tôi muốn hỉ them rằng:
Trong 1 hàm (sự kiện: ...._dounbleclick) tôi truyền vào 1 biến (target as range). trong hàm này tôi muốn biết địa chỉ (hàng thứ mấy/số hàng) của target này thì dùng phương thức nào đẻ có được??
Bạn hướng dẫn tôi với.
Cảm ơn nhiều

Bạn hãy làm mẫu 1 bài xem thế nào (thủ công), để xem việc cộng dồn như thế nào ??? (Theo VD trên thì như thế nào)

Để biết địa chỉ : Target.Address : ô đầu tiên trên cung bên trái.

Thân!
 
Upvote 0
HTML:
Option Explicit
Sub CopyTo()
 Application.ScreenUpdating = False
 Dim lRow, lrow2 As Long, jJ As Long, dong As Long
 Shdky.Select
 lRow = [B65432].End(xlUp).Row
 Application.ScreenUpdating = False
 ShDh.Range("A7:J" & lRow).Clear
 ShDh.Range("g:h").NumberFormat = "@"
 lrow2 = ShDh.[B65432].End(xlUp).Row + 1
 For jJ = 4 To lRow
   With Cells(jJ, 7)
      If .Value <> "" Or .Offset(, 1) <> "" Then
        If .Offset(, 1) <> "" Then
            dong = TimDong(.Offset(0, 4), ShDh.Range("H7:H" & lrow2 + 1))
            If dong = 0 Then
                ShDh.Range("A" & lrow2) = .Offset(, -6).Value
                ShDh.Range("B" & lrow2) = .Offset(, -5).Value
                ShDh.Range("C" & lrow2) = .Offset(, -4).Value
                ShDh.Range("D" & lrow2) = .Offset(, -3).Value
                ShDh.Range("E" & lrow2) = .Offset(, -2).Value
                ShDh.Range("F" & lrow2) = .Offset(, -1).Value
                ShDh.Range("G" & lrow2) = .Offset(, 3).Value
                ShDh.Range("H" & lrow2) = .Offset(, 4).Value
                lrow2 = lrow2 + 1
            Else
                MsgBox "GT dang co: " & ShDh.Cells(6, 6).Offset(dong, 0).Value
                ShDh.Cells(6, 6).Offset(dong, 0) = ShDh.Cells(6, 6).Offset(dong, 0).Value + .Offset(, -1).Value
            End If
        Else
            ShDh.Range("A" & lrow2) = .Offset(, -6).Value
            ShDh.Range("B" & lrow2) = .Offset(, -5).Value
            ShDh.Range("C" & lrow2) = .Offset(, -4).Value
            ShDh.Range("D" & lrow2) = .Offset(, -3).Value
            ShDh.Range("E" & lrow2) = .Offset(, -2).Value
            ShDh.Range("F" & lrow2) = .Offset(, -1).Value
            ShDh.Range("G" & lrow2) = .Offset(, 3).Value
            ShDh.Range("H" & lrow2) = .Offset(, 4).Value
            lrow2 = lrow2 + 1
        End If
      Else
        If .Offset(, 3).Value <> "" Then .Offset(, 3).Value = ""
        If .Offset(, 4).Value <> "" Then .Offset(, 4).Value = ""
      End If
   End With
 Next jJ
 ShDh.Range("A7:J" & lrow2).Font.Name = ".vnTime"
 'TAO DONG TONG VA ForMAT dong
 With ShDh
   .Cells(lrow2 + 1, 5).Font.Name = ".VNTIMEH"
   .Cells(lrow2 + 1, 5).Formula = "TæNG Sè CP Dù Häp"
   .Cells(lrow2 + 1, 5).HorizontalAlignment = xlRight
   .Cells(lrow2 + 1, 5).VerticalAlignment = xlCenter
   .Cells(lrow2 + 1, 5).Font.Bold = True
 
   .Cells(lrow2 + 1, 6).Formula = "=SUM(F7:F" & lrow2 & ")"
   .Cells(lrow2 + 1, 6).HorizontalAlignment = xlRight
   .Cells(lrow2 + 1, 6).VerticalAlignment = xlCenter
   .Cells(lrow2 + 1, 6).Font.Bold = True
 
   .Cells(lrow2 + 2, 5).Font.Name = ".VNTIMEH"
   .Cells(lrow2 + 2, 5).Formula = "Tû LÖ CP Dù Häp"
   .Cells(lrow2 + 2, 5).HorizontalAlignment = xlRight
   .Cells(lrow2 + 2, 5).VerticalAlignment = xlCenter
   .Cells(lrow2 + 2, 5).Font.Bold = True

   .Cells(lrow2 + 2, 6).Formula = "=ROUND(SUM(F7:F" & lrow2 & ")*100/$F$4,3)"
   .Cells(lrow2 + 2, 6).HorizontalAlignment = xlRight
   .Cells(lrow2 + 2, 6).VerticalAlignment = xlCenter
   .Cells(lrow2 + 2, 6).Font.Bold = True

   .Cells(lrow2 + 2, 7).Formula = "%"
   .Cells(lrow2 + 2, 7).HorizontalAlignment = xlLeft
   .Cells(lrow2 + 2, 7).VerticalAlignment = xlCenter
   .Cells(lrow2 + 2, 7).Font.Bold = True
 End With
 ShDh.Range("D7:D" & lrow2).HorizontalAlignment = xlRight
 ShDh.Range("E7:E" & lrow2).HorizontalAlignment = xlCenter
 ShDh.Range("G7:G" & lrow2).HorizontalAlignment = xlRight
 ShDh.Range("H7:H" & lrow2).HorizontalAlignment = xlCenter
 Application.Calculation = xlCalculationAutomatic
 Application.ScreenUpdating = True
End Sub
Function TimDong(Ma As String, Mang As Range) As Long
    On Error Resume Next
    TimDong = WorksheetFunction.Match(Ma, Mang, 0)
End Function
Tôi đưa ra code để bạn xem.
Tôi đã format cột DL rồi hàm match tìm rất đúng
Cảm ơn bạn
 
Upvote 0
Ban ah. Tôi muốn lấy số hàng và cột của Target đó để dùng hàm offset nhảy đến 1 cell mình tương ứng trên cùng hàng với target. Ví dụ target có hàng 12(h=12), cột 8 (c=8) tức là ô H12 và tôi muốn lấy giá trị tai F12 gán vào K12 thì tôi sẽ có:
.range("K" & h+3) = offset(,-2).value.
Bạn giúp tôi với
 
Upvote 0
Ban ah. Tôi muốn lấy số hàng và cột của Target đó để dùng hàm offset nhảy đến 1 cell mình tương ứng trên cùng hàng với target. Ví dụ target có hàng 12(h=12), cột 8 (c=8) tức là ô H12 và tôi muốn lấy giá trị tai F12 gán vào K12 thì tôi sẽ có:
.range("K" & h+3) = offset(,-2).value.
Bạn giúp tôi với

Mình không có thời gian để ngồi đọc lại hết code của bạn, vì vậy mong bạn thông cảm!
Còn nếu bạn muốn mình giúp bạn thì hãy trả lời các câu hỏi trên.

Thân!
 
Upvote 0
Mình không có thời gian để ngồi đọc lại hết code của bạn, vì vậy mong bạn thông cảm!
Còn nếu bạn muốn mình giúp bạn thì hãy trả lời các câu hỏi trên.

Thân!
Ồ không. Mình gửi code để bạn có thgian thì đọc chứ vấn đề mình đã giải quyết rồi chỉ còn vấn đề thứ 2 là lấy số hàng và cộtt của target thì mình chưa làm được.

Cảm ơn bạn
Thân
 
Upvote 0
Web KT

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

Back
Top Bottom