Trích xuất dữ liệu không rỗng (2 người xem)

Liên hệ QC

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

Thaivi7891

Thành viên mới
Tham gia
22/4/17
Bài viết
10
Được thích
1
Mngười giúp mình với ạ,mình cám ơn ạ
 

File đính kèm

Tức từ Bảng 1 tạo Bảng 2? Đơn giản chỉ là sao chép thôi. Cứ phương pháp "cần cù" là được.

1. Giả thiết: dữ liệu chỉ luôn từ dòng 8 tới dòng 46, và cột từ B tới H. Bạn không cho dữ liệu tổng quát, vì giữa các dòng có dữ liệu không có các dòng trống (dữ liệu khác rỗng ở những dòng liên tiếp). Code cho phép giữa các dòng dữ liệu có những dòng trống.

2. Code thực hiện cho Sheet1. Nếu tên sheet khác thì thay đổi trong code Sheet1 thành tên thực tế.

3. Code không tạo Bảng 2 mà ghi đè kết quả vào Bảng 1.
Mã:
Sub loai_rong()
Dim r As Long, c As Long, count As Long, vt As String, data(), sh As Worksheet
    Set sh = ThisWorkbook.Worksheets("Sheet1")
    With sh.Range("B8:H46")
        data = .Value
        .ClearContents
    End With
    For r = 1 To UBound(data)
        vt = Trim(data(r, 1))
        If Len(vt) > 0 Then
            count = count + 1
            For c = 1 To UBound(data, 2)
                data(count, c) = data(r, c)
            Next c
        End If
    Next r
    If count Then sh.Range("B8:H8").Resize(count).Value = data
End Sub

4. Nếu muốn giữ Bảng 1 và tạo Bảng 2
Mã:
Sub loai_rong()
Dim r As Long, c As Long, count As Long, vt As String, data(), sh As Worksheet
    Set sh = ThisWorkbook.Worksheets("Sheet1")
    data = sh.Range("B8:H46").Value
    sh.Range("L8:R46").ClearContents
    For r = 1 To UBound(data)
        vt = Trim(data(r, 1))
        If Len(vt) > 0 Then
            count = count + 1
            For c = 1 To UBound(data, 2)
                data(count, c) = data(r, c)
            Next c
        End If
    Next r
    If count Then sh.Range("L8:R8").Resize(count).Value = data
End Sub
 
Tham khảo cách làm công thức, chọn vùng tên vật tư cột B đặt Name TenVT (B8:B46), đặt Name DK - điều kiện lấy dòng các giá trị khác rỗng (lưu ý -7, nếu thêm/bớt dòng phía trên vùng B8:B46 thì thay đổi giá trị này)
Mã:
=IF(TenVT<>"",ROW(TenVT)-7,"")
Công thức ở Bảng 2, L8
Mã:
=IFERROR(INDEX(TenVT,SMALL(DK,ROW(A1))),"")
Công thức ở M8, kéo sang phải cho các cột còn lại
Mã:
=IF($L8="","",INDEX(OFFSET(TenVT,,COLUMN(A$1)),SMALL(DK,ROW($A1))))
 

File đính kèm

Tức từ Bảng 1 tạo Bảng 2? Đơn giản chỉ là sao chép thôi. Cứ phương pháp "cần cù" là được.

1. Giả thiết: dữ liệu chỉ luôn từ dòng 8 tới dòng 46, và cột từ B tới H. Bạn không cho dữ liệu tổng quát, vì giữa các dòng có dữ liệu không có các dòng trống (dữ liệu khác rỗng ở những dòng liên tiếp). Code cho phép giữa các dòng dữ liệu có những dòng trống.

2. Code thực hiện cho Sheet1. Nếu tên sheet khác thì thay đổi trong code Sheet1 thành tên thực tế.

3. Code không tạo Bảng 2 mà ghi đè kết quả vào Bảng 1.
Mã:
Sub loai_rong()
Dim r As Long, c As Long, count As Long, vt As String, data(), sh As Worksheet
    Set sh = ThisWorkbook.Worksheets("Sheet1")
    With sh.Range("B8:H46")
        data = .Value
        .ClearContents
    End With
    For r = 1 To UBound(data)
        vt = Trim(data(r, 1))
        If Len(vt) > 0 Then
            count = count + 1
            For c = 1 To UBound(data, 2)
                data(count, c) = data(r, c)
            Next c
        End If
    Next r
    If count Then sh.Range("B8:H8").Resize(count).Value = data
End Sub

4. Nếu muốn giữ Bảng 1 và tạo Bảng 2
Mã:
Sub loai_rong()
Dim r As Long, c As Long, count As Long, vt As String, data(), sh As Worksheet
    Set sh = ThisWorkbook.Worksheets("Sheet1")
    data = sh.Range("B8:H46").Value
    sh.Range("L8:R46").ClearContents
    For r = 1 To UBound(data)
        vt = Trim(data(r, 1))
        If Len(vt) > 0 Then
            count = count + 1
            For c = 1 To UBound(data, 2)
                data(count, c) = data(r, c)
            Next c
        End If
    Next r
    If count Then sh.Range("L8:R8").Resize(count).Value = data
End Sub
Mình cám ơn ạ,vì bảng 1 có những ngày cột có dữ liệu k liền kề nên làm thủ công hơi chậm,và bảng 1 của mình liên kết với nhiều bảng khác nữa.
 
Tức từ Bảng 1 tạo Bảng 2? Đơn giản chỉ là sao chép thôi. Cứ phương pháp "cần cù" là được.

1. Giả thiết: dữ liệu chỉ luôn từ dòng 8 tới dòng 46, và cột từ B tới H. Bạn không cho dữ liệu tổng quát, vì giữa các dòng có dữ liệu không có các dòng trống (dữ liệu khác rỗng ở những dòng liên tiếp). Code cho phép giữa các dòng dữ liệu có những dòng trống.

2. Code thực hiện cho Sheet1. Nếu tên sheet khác thì thay đổi trong code Sheet1 thành tên thực tế.

3. Code không tạo Bảng 2 mà ghi đè kết quả vào Bảng 1.
Mã:
Sub loai_rong()
Dim r As Long, c As Long, count As Long, vt As String, data(), sh As Worksheet
    Set sh = ThisWorkbook.Worksheets("Sheet1")
    With sh.Range("B8:H46")
        data = .Value
        .ClearContents
    End With
    For r = 1 To UBound(data)
        vt = Trim(data(r, 1))
        If Len(vt) > 0 Then
            count = count + 1
            For c = 1 To UBound(data, 2)
                data(count, c) = data(r, c)
            Next c
        End If
    Next r
    If count Then sh.Range("B8:H8").Resize(count).Value = data
End Sub

4. Nếu muốn giữ Bảng 1 và tạo Bảng 2
Mã:
Sub loai_rong()
Dim r As Long, c As Long, count As Long, vt As String, data(), sh As Worksheet
    Set sh = ThisWorkbook.Worksheets("Sheet1")
    data = sh.Range("B8:H46").Value
    sh.Range("L8:R46").ClearContents
    For r = 1 To UBound(data)
        vt = Trim(data(r, 1))
        If Len(vt) > 0 Then
            count = count + 1
            For c = 1 To UBound(data, 2)
                data(count, c) = data(r, c)
            Next c
        End If
    Next r
    If count Then sh.Range("L8:R8").Resize(count).Value = data
End Sub
Mình cám ơn ạ,bảng 1 có những ngày ô rỗng xen kẽ với ô có dữ liệu ạ
 
Tham khảo cách làm công thức, chọn vùng tên vật tư cột B đặt Name TenVT (B8:B46), đặt Name DK - điều kiện lấy dòng các giá trị khác rỗng (lưu ý -7, nếu thêm/bớt dòng phía trên vùng B8:B46 thì thay đổi giá trị này)
Mã:
=IF(TenVT<>"",ROW(TenVT)-7,"")
Công thức ở Bảng 2, L8
Mã:
=IFERROR(INDEX(TenVT,SMALL(DK,ROW(A1))),"")
Công thức ở M8, kéo sang phải cho các cột còn lại
Mã:
=IF($L8="","",INDEX(OFFSET(TenVT,,COLUMN(A$1)),SMALL(DK,ROW($A1))))
Bạn cho mình hỏi dữ liệu các ngày của mình không phải cũng rỗng từ ngày 1 đến ngày 7 thì làm sao bạn,vì sổ đó làm theo tháng nên có ngày ô rỗng xen kẽ với ô có dữ liệu ạ
Bài đã được tự động gộp:

Tức từ Bảng 1 tạo Bảng 2? Đơn giản chỉ là sao chép thôi. Cứ phương pháp "cần cù" là được.

1. Giả thiết: dữ liệu chỉ luôn từ dòng 8 tới dòng 46, và cột từ B tới H. Bạn không cho dữ liệu tổng quát, vì giữa các dòng có dữ liệu không có các dòng trống (dữ liệu khác rỗng ở những dòng liên tiếp). Code cho phép giữa các dòng dữ liệu có những dòng trống.

2. Code thực hiện cho Sheet1. Nếu tên sheet khác thì thay đổi trong code Sheet1 thành tên thực tế.

3. Code không tạo Bảng 2 mà ghi đè kết quả vào Bảng 1.
Mã:
Sub loai_rong()
Dim r As Long, c As Long, count As Long, vt As String, data(), sh As Worksheet
    Set sh = ThisWorkbook.Worksheets("Sheet1")
    With sh.Range("B8:H46")
        data = .Value
        .ClearContents
    End With
    For r = 1 To UBound(data)
        vt = Trim(data(r, 1))
        If Len(vt) > 0 Then
            count = count + 1
            For c = 1 To UBound(data, 2)
                data(count, c) = data(r, c)
            Next c
        End If
    Next r
    If count Then sh.Range("B8:H8").Resize(count).Value = data
End Sub

4. Nếu muốn giữ Bảng 1 và tạo Bảng 2
Mã:
Sub loai_rong()
Dim r As Long, c As Long, count As Long, vt As String, data(), sh As Worksheet
    Set sh = ThisWorkbook.Worksheets("Sheet1")
    data = sh.Range("B8:H46").Value
    sh.Range("L8:R46").ClearContents
    For r = 1 To UBound(data)
        vt = Trim(data(r, 1))
        If Len(vt) > 0 Then
            count = count + 1
            For c = 1 To UBound(data, 2)
                data(count, c) = data(r, c)
            Next c
        End If
    Next r
    If count Then sh.Range("L8:R8").Resize(count).Value = data
End Sub
Bạn ơi,dữ liệu đó k phải ngày nào cũng rỗng từ 1 đến 7 và có dữ liệu từ 8 đến 46 đậu ạ
 
Bạn cho mình hỏi dữ liệu các ngày của mình không phải cũng rỗng từ ngày 1 đến ngày 7 thì làm sao bạn,vì sổ đó làm theo tháng nên có ngày ô rỗng xen kẽ với ô có dữ liệu ạ
Bài đã được tự động gộp:


Bạn ơi,dữ liệu đó k phải ngày nào cũng rỗng từ 1 đến 7 và có dữ liệu từ 8 đến 46 đậu ạ
Thế ra bạn đọc mà không kiểm tra trên file tôi gửi lên?
Bạn thử làm trên file tôi đính kèm xem nó ra kết quả thế nào, và bạn muốn kết quả thế nào?
 
Trên bài #4 có từ nào tôi viết là "ngày" không vậy bạn?
Vâng ạ,do mình chưa xem kỹ ạ,mình cám ơn ạ
Bài đã được tự động gộp:

Trên bài #4 có từ nào tôi viết là "ngày" không vậy bạn?
mình nhờ bạn giúp file này hộ mình được không ạ,mình muốn thực phẩm tồn từ bảng trước tự động chuyển sang bảng sau được không ạ,ở sheet nhap xuat in ạ,mình cám ơn ạ
 

File đính kèm

Lần chỉnh sửa cuối:
Tôi vừa xem, thấy file rối quá.
Mà giờ nghĩ xem nên bố trí file lại như thế nào, chứ bố trí như vậy mất công làm, mà rồi càng làm càng rối.
Nghỉ lễ đi bạn, qua lễ hi vọng có giải pháp tốt hơn.
Chúc vui!
 
Tôi vừa xem, thấy file rối quá.
Mà giờ nghĩ xem nên bố trí file lại như thế nào, chứ bố trí như vậy mất công làm, mà rồi càng làm càng rối.
Nghỉ lễ đi bạn, qua lễ hi vọng có giải pháp tốt hơn.
Chúc vui!
vâng ạ,file đó do tổng cục hậu cần cung cấp nên bọn mình không được phép sửa bạn ạ,mình cám ơn bạn ạ
 
Bạn ơi,dữ liệu đó k phải ngày nào cũng rỗng từ 1 đến 7 và có dữ liệu từ 8 đến 46 đậu ạ
Bạn có chạy code của tôi không? Chạy với nhiều dạng dữ liệu? Bạn cho là code không đúng ý? Nếu bạn cho là vậy thì gửi tập tin với dữ liệu mà sau khi chạy code sẽ ra kết quả không đúng ý.
Đừng chỉ có nhìn, đọc rồi khẳng đinh là công thức hay code của ai đó không làm đúng ý.
 
Bạn có chạy code của tôi không? Chạy với nhiều dạng dữ liệu? Bạn cho là code không đúng ý? Nếu bạn cho là vậy thì gửi tập tin với dữ liệu mà sau khi chạy code sẽ ra kết quả không đúng ý.
Đừng chỉ có nhìn, đọc rồi khẳng đinh là công thức hay code của ai đó không làm đúng ý.
Mình xin lỗi ạ,mình thấy With sh.Range("B8:H46") mình cứ tưởng chỉ chạy được các hàng đó,mình cám ơn ạ.
Bài đã được tự động gộp:

Bạn có chạy code của tôi không? Chạy với nhiều dạng dữ liệu? Bạn cho là code không đúng ý? Nếu bạn cho là vậy thì gửi tập tin với dữ liệu mà sau khi chạy code sẽ ra kết quả không đúng ý.
Đừng chỉ có nhìn, đọc rồi khẳng đinh là công thức hay code của ai đó không làm đúng ý.
mình nhờ bạn giúp file này hộ mình được không ạ,mình muốn thực phẩm tồn từ bảng trước tự động chuyển sang bảng sau được không ạ,ở sheet nhap xuat in ạ,mình cám ơn ạ
 

File đính kèm

Web KT

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

Back
Top Bottom