Thaivi7891
Thành viên mới

- Tham gia
- 22/4/17
- Bài viết
- 10
- Được thích
- 1
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
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 thử:Mngười giúp mình với ạ,mình cám ơn ạ
Sub Test()
With Sheet1
.Range("B8:B46").SpecialCells(xlCellTypeConstants, 2).Resize(, 7).Copy
.Range("L8").PasteSpecial
End With
Application.CutCopyMode = False
End Sub
=IF(TenVT<>"",ROW(TenVT)-7,"")
=IFERROR(INDEX(TenVT,SMALL(DK,ROW(A1))),"")
=IF($L8="","",INDEX(OFFSET(TenVT,,COLUMN(A$1)),SMALL(DK,ROW($A1))))
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 ạ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 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 ạ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)
Công thức ở Bảng 2, L8Mã:=IF(TenVT<>"",ROW(TenVT)-7,"")
Công thức ở M8, kéo sang phải cho các cột còn lạiMã:=IFERROR(INDEX(TenVT,SMALL(DK,ROW(A1))),"")
Mã:=IF($L8="","",INDEX(OFFSET(TenVT,,COLUMN(A$1)),SMALL(DK,ROW($A1))))
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 ạ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
Thế ra bạn đọc mà không kiểm tra trên file tôi gửi lên?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 ạ
Mình nhìn thấy chỗ -7 nên mình cứ tưởng công thức của bạn chỉ áp dụng cho mỗi 1 bảng ạ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?Mình nhìn thấy chỗ -7 nên mình cứ tưởng công thức của bạn chỉ áp dụng cho mỗi 1 ngày ạ
Vâng ạ,do mình chưa xem kỹ ạ,mình cám ơn ạ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 ạTrên bài #4 có từ nào tôi viết là "ngày" không vậy bạn?
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 ạ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!
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 ý.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 ạ
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ạ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 ạ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 ý.