Nhờ các anh chị giúp code trích xuất dữ liệu giữ nguyên định dạng

Liên hệ QC

hanguyen0472

Thành viên mới
Tham gia
30/11/09
Bài viết
39
Được thích
3
Xin chào các anh chị trên diễn đàn. Hiện nay mình mới làm quen với VBA và viết code để lọc dữ liệu. Tuy nhiên sau khi lọc ra thì kết quả lọc bị mất định dạng ban đầu, chuỗi chữ số bị chuyển thành kiểu số (nếu chuỗi chữ số dài thì nó chuyển thành kiểu E+, hoặc chuỗi chữ số có chữ số 0 ở đầu thì bị cắt đi). Nhờ các anh chị giúp sửa giùm mình đoạn code để khắc phục lỗi này với ạ. Xin cám ơn các anh chị.
 

File đính kèm

  • TheodoiCCDC.xlsm
    48 KB · Đọc: 8
Xin chào các anh chị trên diễn đàn. Hiện nay mình mới làm quen với VBA và viết code để lọc dữ liệu. Tuy nhiên sau khi lọc ra thì kết quả lọc bị mất định dạng ban đầu, chuỗi chữ số bị chuyển thành kiểu số (nếu chuỗi chữ số dài thì nó chuyển thành kiểu E+, hoặc chuỗi chữ số có chữ số 0 ở đầu thì bị cắt đi). Nhờ các anh chị giúp sửa giùm mình đoạn code để khắc phục lỗi này với ạ. Xin cám ơn các anh chị.
Trước khi trả kết quả xuống sheet thì hãy định dạng cột cần trả kết quả về dạng text là được
 
Trước khi trả kết quả xuống sheet thì hãy định dạng cột cần trả kết quả về dạng text là được
Cám ơn bạn đã góp ý. Bạn có thể hướng dẫn được không ạ, mình đã thử format text cột D trước khi chạy code nhưng kết quả vẫn bị lỗi ở cột D (Cột Số thẻ CCDC), còn nếu sửa code thì sửa như thế nào ạ.
 
Cám ơn bạn đã góp ý. Bạn có thể hướng dẫn được không ạ, mình đã thử format text cột D trước khi chạy code nhưng kết quả vẫn bị lỗi ở cột D (Cột Số thẻ CCDC), còn nếu sửa code thì sửa như thế nào ạ.
Sửa code của bạn 1 chút cho ngắn gọn. Bỏ cái sub Đánh số thứ tự đi
Mã:
Sub loc_biendong()
    Dim arr(), kq(), dk As Boolean, i As Long, a As Long, lr As Long
    Dim sh_nhatkydc As Worksheet, sh_loc_Nky As Worksheet
    Dim tungay As Date, denngay As Date
    Dim bophansudung As String, ii&
    Dim nghiepvu As String
    Dim dkloc As Integer, dkngay As Long, dkbophan As Integer, dknghiepvu As Integer
    Set sh_nhatkydc = Sheet31
    Set sh_loc_Nky = Sheet28
    tungay = sh_nhatkydc.Range("C4").Value
    denngay = sh_nhatkydc.Range("C5").Value
    bophansudung = sh_nhatkydc.Range("D5").Value
    nghiepvu = sh_nhatkydc.Range("E5").Value
    If tungay > 0 And denngay > 0 Then
        dkngay = 1
    End If
    If bophansudung <> "" Then
        dkbophan = 2
    End If
    If nghiepvu <> "" Then
        dknghiepvu = 4
    End If
    dkloc = dkngay + dkbophan + dknghiepvu
    With sh_nhatkydc
        lr = .Range("A" & Rows.Count).End(xlUp).Row 'Tim dong cuoi
        arr = .Range("A11:S" & lr).Value
        ReDim kq(1 To UBound(arr, 1), 1 To 19)
        For i = 1 To UBound(arr, 1)
            If dkloc = 1 Then
                'Loc theo ngay
                dk = arr(i, 1) >= tungay And arr(i, 1) <= denngay
            ElseIf dkloc = 2 Then
                'Loc theo bo phan
                dk = arr(i, 7) = bophansudung
            ElseIf dkloc = 3 Then
                'Loc theo ngay va Bo phan su dung
                dk = arr(i, 1) >= tungay And arr(i, 1) <= denngay And arr(i, 7) = bophansudung
            ElseIf dkloc = 7 Then
                'Loc theo ngay, Bo phan su dung va nghiep vu
                dk = arr(i, 1) >= tungay And arr(i, 1) <= denngay And arr(i, 7) = bophansudung And arr(i, 19) = nghiepvu
            ElseIf dkloc = 4 Then
                'Loc theo nghiep vu
                dk = arr(i, 19) = nghiepvu
            ElseIf dkloc = 5 Then
                'Loc theo ngay va nghiep vu
                dk = arr(i, 1) >= tungay And arr(i, 1) <= denngay And arr(i, 19) = nghiepvu
            Else
                MsgBox "Khong co Record nao het!!!", vbInformation
                Exit Sub
            End If
            If dk = True Then
                a = a + 1
                kq(a, 1) = arr(i, 1)
                kq(a, 2) = a
                For ii = 3 To 19
                    kq(a, ii) = arr(i, ii)
                Next
            End If
        Next i
    End With
    With sh_loc_Nky
        .Range("A12:T50000").ClearContents
        If a > 0 Then
            .Range("D12").Resize(a).NumberFormat = "@"
            .Range("A12").Resize(a, 19).Value = kq
        Else
            MsgBox "Khong thay record nao de loc", vbInformation
        End If
    End With
End Sub
Bạn tự kiểm tra kết quả xem đúng chưa nhé.
 
Sửa code của bạn 1 chút cho ngắn gọn. Bỏ cái sub Đánh số thứ tự đi
Mã:
Sub loc_biendong()
    Dim arr(), kq(), dk As Boolean, i As Long, a As Long, lr As Long
    Dim sh_nhatkydc As Worksheet, sh_loc_Nky As Worksheet
    Dim tungay As Date, denngay As Date
    Dim bophansudung As String, ii&
    Dim nghiepvu As String
    Dim dkloc As Integer, dkngay As Long, dkbophan As Integer, dknghiepvu As Integer
    Set sh_nhatkydc = Sheet31
    Set sh_loc_Nky = Sheet28
    tungay = sh_nhatkydc.Range("C4").Value
    denngay = sh_nhatkydc.Range("C5").Value
    bophansudung = sh_nhatkydc.Range("D5").Value
    nghiepvu = sh_nhatkydc.Range("E5").Value
    If tungay > 0 And denngay > 0 Then
        dkngay = 1
    End If
    If bophansudung <> "" Then
        dkbophan = 2
    End If
    If nghiepvu <> "" Then
        dknghiepvu = 4
    End If
    dkloc = dkngay + dkbophan + dknghiepvu
    With sh_nhatkydc
        lr = .Range("A" & Rows.Count).End(xlUp).Row 'Tim dong cuoi
        arr = .Range("A11:S" & lr).Value
        ReDim kq(1 To UBound(arr, 1), 1 To 19)
        For i = 1 To UBound(arr, 1)
            If dkloc = 1 Then
                'Loc theo ngay
                dk = arr(i, 1) >= tungay And arr(i, 1) <= denngay
            ElseIf dkloc = 2 Then
                'Loc theo bo phan
                dk = arr(i, 7) = bophansudung
            ElseIf dkloc = 3 Then
                'Loc theo ngay va Bo phan su dung
                dk = arr(i, 1) >= tungay And arr(i, 1) <= denngay And arr(i, 7) = bophansudung
            ElseIf dkloc = 7 Then
                'Loc theo ngay, Bo phan su dung va nghiep vu
                dk = arr(i, 1) >= tungay And arr(i, 1) <= denngay And arr(i, 7) = bophansudung And arr(i, 19) = nghiepvu
            ElseIf dkloc = 4 Then
                'Loc theo nghiep vu
                dk = arr(i, 19) = nghiepvu
            ElseIf dkloc = 5 Then
                'Loc theo ngay va nghiep vu
                dk = arr(i, 1) >= tungay And arr(i, 1) <= denngay And arr(i, 19) = nghiepvu
            Else
                MsgBox "Khong co Record nao het!!!", vbInformation
                Exit Sub
            End If
            If dk = True Then
                a = a + 1
                kq(a, 1) = arr(i, 1)
                kq(a, 2) = a
                For ii = 3 To 19
                    kq(a, ii) = arr(i, ii)
                Next
            End If
        Next i
    End With
    With sh_loc_Nky
        .Range("A12:T50000").ClearContents
        If a > 0 Then
            .Range("D12").Resize(a).NumberFormat = "@"
            .Range("A12").Resize(a, 19).Value = kq
        Else
            MsgBox "Khong thay record nao de loc", vbInformation
        End If
    End With
End Sub
Bạn tự kiểm tra kết quả xem đúng chưa nhé.
Cám ơn bạn nhiều lắm, mình đã chạy thử và rất tuyệt vời ạ.
 
Web KT
Back
Top Bottom