Tự động điền dữ liệu từ ô trên xuống ô dưới theo điều kiện

Liên hệ QC

Liverpudlian

Thành viên mới
Tham gia
28/6/10
Bài viết
4
Được thích
0
Các cao thủ excel giúp dùm em trường hợp này (File đính kèm) :

Tạo nút để tự động copy dữ liệu từ ô B6 xuống ô B7:B136. Vấn đề là nếu đến ô B137 có dữ liệu thì phải ngừng copy và lấy dữ liệu ô B137 để copy tiếp xuống ô B138:B222 và cứ tiếp tục như vậy cho đến hết toàn bộ dữ liệu.

Em cảm ơn rất nhiều.
(Em thật là không biết gì về VBA hết, mong các cao thủ chi tiết rõ ràng dùm em nhe).
 

File đính kèm

Các cao thủ excel giúp dùm em trường hợp này (File đính kèm) :

Tạo nút để tự động copy dữ liệu từ ô B6 xuống ô B7:B136. Vấn đề là nếu đến ô B137 có dữ liệu thì phải ngừng copy và lấy dữ liệu ô B137 để copy tiếp xuống ô B138:B222 và cứ tiếp tục như vậy cho đến hết toàn bộ dữ liệu.

Em cảm ơn rất nhiều.
(Em thật là không biết gì về VBA hết, mong các cao thủ chi tiết rõ ràng dùm em nhe).
Cái này dùng công thức cũng được, không cần đến Macro đâu. Bạn làm từng bước theo hướng dẫn sau:
- Chọn vùng muốn phủ dữ liệu B6:B1238
- Ctrl + G | Special... | Blank | OK
- Nhìn lên thanh địa chỉ xem ô hiện hành là ô nào, nếu đang là Bx thì nhập vào thanh công thức là B(x-1) và nhấn Ctrl + Enter. Ví dụ nếu ô hiện hành là B7 thì nhập công thức là =B6 và nhấn Ctrl + Enter
 
Upvote 0
Cái này dùng công thức cũng được, không cần đến Macro đâu. Bạn làm từng bước theo hướng dẫn sau:
- Chọn vùng muốn phủ dữ liệu B6:B1238
- Ctrl + G | Special... | Blank | OK
- Nhìn lên thanh địa chỉ xem ô hiện hành là ô nào, nếu đang là Bx thì nhập vào thanh công thức là B(x-1) và nhấn Ctrl + Enter. Ví dụ nếu ô hiện hành là B7 thì nhập công thức là =B6 và nhấn Ctrl + Enter

Rất cảm ơn bạn, mình làm theo cách bạn và kết quả đúng như mong đợi. Vấn đề là file đính kèm mình đã rút gọn bớt rồi chứ thực tế thì sẽ rất rất dài :-(. Ngoài ra mình sẽ share file này cho nhiều anh em trong công ty làm việc, và trình excel của họ còn gà hơn mình nữa :-(. Vì vậy mình muốn tạo một nút combo box để họ chỉ việc click vào thì máy tự động thực hiện các lệnh ở trên thôi. Giúp mình với nhe. Thanks nhiều nhiều !
 
Upvote 0
Mình thì thích làm bằng code hơn đỡ fill công thức. Điền trên xuống hay dưới lên đều được.
Mình nói vậy nhưng không có bài cụ thể vì bạn gửi ví dụ Exc2007 thì bó tay. Mình chỉ dùng Exc2003 thôi.
 
Lần chỉnh sửa cuối:
Upvote 0
Rất cảm ơn bạn, mình làm theo cách bạn và kết quả đúng như mong đợi. Vấn đề là file đính kèm mình đã rút gọn bớt rồi chứ thực tế thì sẽ rất rất dài :-(. Ngoài ra mình sẽ share file này cho nhiều anh em trong công ty làm việc, và trình excel của họ còn gà hơn mình nữa :-(. Vì vậy mình muốn tạo một nút combo box để họ chỉ việc click vào thì máy tự động thực hiện các lệnh ở trên thôi. Giúp mình với nhe. Thanks nhiều nhiều !
Chép thử cái này vào nút trong file của bạn
Mã:
Sub Button25_Click()
    Dim Cll
        For Each Cll In Range("b6:b10000")
            If Cll <> "" And Cll.Offset(1, 0) = "" Then Cll.Offset(1, 0) = Cll
        Next
End Sub
Khai báo địa chỉ bắt đầu từ cell có dữ liệu (trong bài là B6) còn cell cuối cùng thì tùy bạn. Mình thử cho dữ liệu đến 10.000 chạy cũng không chậm lắm đâu. Còn nếu dữ liệu mà vài chục ngàn thì mình..."hổng" biết làm sao nữa
Híc
 
Upvote 0
Mình thì thích làm bằng code hơn đỡ fill công thức. Điền trên xuống hay dưới lên đều được.
Mình nói vậy nhưng không có bài cụ thể vì bạn gửi ví dụ Exc2007 thì bó tay. Mình chỉ dùng Exc2003 thôi.
Xuống dưới hay lên trên gì làm cách này cũng được hết mà. Công thức thì chỉ nhập một lần, cũng không đến nỗi mất công lắm.
To Liverpudlian: Dùng Recode Macro ghi lại các thao tác trên là bạn sẽ có code để thực hiện việc này.
 
Upvote 0
@ bạn Concogia : rất rất cảm ơn bạn, mình làm được rùi nè.
@ bạn Huuthang_bd : mình đã làm theo cách của bạn, dùng macro để xem code. Tuy nhiên lại có trở ngại là không thể cho thoải mái số dòng sẽ fill dữ liệu. Cách của bạn Concogia có thể tính đến cell thứ 10,000 và mình đã giải quyết được vấn đề theo cách này :-)

Cảm ơn mọi người, cảm ơn website. Quá hữu ích :-)

Và bạn Concogia ơi, cho mình hỏi cái dòng lệnh dim C11 để làm gì vậy :-P. Mình gà nên muốn hiểu rõ để có gì còn chỉnh sửa sau này. Thanks nhen.
 
Lần chỉnh sửa cuối:
Upvote 0
Chép thử cái này vào nút trong file của bạn
Mã:
Sub Button25_Click()
    Dim Cll
        For Each Cll In Range("b6:b10000")
            If Cll <> "" And Cll.Offset(1, 0) = "" Then Cll.Offset(1, 0) = Cll
        Next
End Sub
Khai báo địa chỉ bắt đầu từ cell có dữ liệu (trong bài là B6) còn cell cuối cùng thì tùy bạn. Mình thử cho dữ liệu đến 10.000 chạy cũng không chậm lắm đâu. Còn nếu dữ liệu mà vài chục ngàn thì mình..."hổng" biết làm sao nữa
Híc
Không nên dùng vòng lập For... Next qua các cell ---> Ít nhất cũng nên duyệt qua các Area, như thế sẽ nhanh hơn!
Tuy nhiên, cách mà huuthang_bd nói mới là cách ngon lành nhất.... Dạng thế này đây:
- Giả sử vùng ta xét là A1:A100
- Ta có code sau:
PHP:
Sub Test()
  With Range("A1:A100")
    .SpecialCells(4).Value = "=R[-1]C"
    .Value = .Value
  End With
End Sub
 
Upvote 0
Không nên dùng vòng lập For... Next qua các cell ---> Ít nhất cũng nên duyệt qua các Area, như thế sẽ nhanh hơn!
Tuy nhiên, cách mà huuthang_bd nói mới là cách ngon lành nhất.... Dạng thế này đây:
- Giả sử vùng ta xét là A1:A100
- Ta có code sau:
PHP:
Sub Test()
  With Range("A1:A100")
    .SpecialCells(4).Value = "=R[-1]C"
    .Value = .Value
  End With
End Sub

Cảm ơn bạn. Cách của bạn thì máy chạy nhanh cực kỳ :-D. Cảm ơn mọi người nhiều nhe.
 
Upvote 0
Em nhờ các anh chị giúp em cái này với

Em đang có 1 bảng công nợ khách hàng và 1 bảng sổ quỹ giờ nếu em ngồi kiểm tra và nhập từng công nợ khách hàng thì rất lâu (đây là em lấy vd thôi chứ dữ liệu nhiều lắm). Em nhờ anh chị chỉ cách em chỉ việc nhập tên khách hàng, ngày thanh toán, số phiếu, số tiền thì trong bảng công nợ khach hàng sẽ tự động: lấy số tiền bên sổ quỹ điền tự động vào bảng công nợ khách hàng làm sao thỏa mãn.
- phải có điều kiện mã tài khoản để phân biệt tạm ứng, chi trả hay thu của nhiều đối tượng.
- khách hàng nào đi khách hàng đó
- số ngày và số phiếu bên sổ quỹ nhập sang công nợ
- tự động điền số tiền từ trên xuống dưới (lấy tổng thanh toán lần 1) đến hết nợ thì thôi nhưng có trường hợp khách hàng chuyển công nợ tháng trước thì mình vẫn nợ khách hàng:
+ nếu công nợ mua hàng tháng trước trả thừa thì mình nợ khách hàng (nhu truong hop "anh a") thì số tiền thanh toán các lần và điền ở trên cùng là số âm (nếu công nợ vẫn âm thì số tiền điền vào lần tiếp theo vẫn là âm thì khách hàng mới giảm công nợ) đến khi hết nợ hoặc nếu khách nợ lại thì nhập số dương.

Em văn kém không biết nói chi tiết hết em chỉ có thể nói nhờ các anh chi giải quyết bài toàn sao khi em nhập sổ quỷ của từng khách hàng và tưng khoản họ thanh toán thì sẽ tự đồng điền sang bên bảng công nợ khách hàng sẽ hết nợ (tự lấy 3 dự liệu: ngày thanh toán, số phiếu, số tiền)

Em có file kèm theo nhờ anh chọ hết sức giúp đỡ, em cam on nhieu ah.
 

File đính kèm

Upvote 0
Em nhờ các anh chị giúp em cái này với

Em đang có 1 bảng công nợ khách hàng và 1 bảng sổ quỹ giờ nếu em ngồi kiểm tra và nhập từng công nợ khách hàng thì rất lâu (đây là em lấy vd thôi chứ dữ liệu nhiều lắm). Em nhờ anh chị chỉ cách em chỉ việc nhập tên khách hàng, ngày thanh toán, số phiếu, số tiền thì trong bảng công nợ khach hàng sẽ tự động: lấy số tiền bên sổ quỹ điền tự động vào bảng công nợ khách hàng làm sao thỏa mãn.
- phải có điều kiện mã tài khoản để phân biệt tạm ứng, chi trả hay thu của nhiều đối tượng.
- khách hàng nào đi khách hàng đó
- số ngày và số phiếu bên sổ quỹ nhập sang công nợ
- tự động điền số tiền từ trên xuống dưới (lấy tổng thanh toán lần 1) đến hết nợ thì thôi nhưng có trường hợp khách hàng chuyển công nợ tháng trước thì mình vẫn nợ khách hàng:
+ nếu công nợ mua hàng tháng trước trả thừa thì mình nợ khách hàng (nhu truong hop "anh a") thì số tiền thanh toán các lần và điền ở trên cùng là số âm (nếu công nợ vẫn âm thì số tiền điền vào lần tiếp theo vẫn là âm thì khách hàng mới giảm công nợ) đến khi hết nợ hoặc nếu khách nợ lại thì nhập số dương.

Em văn kém không biết nói chi tiết hết em chỉ có thể nói nhờ các anh chi giải quyết bài toàn sao khi em nhập sổ quỷ của từng khách hàng và tưng khoản họ thanh toán thì sẽ tự đồng điền sang bên bảng công nợ khách hàng sẽ hết nợ (tự lấy 3 dự liệu: ngày thanh toán, số phiếu, số tiền)

Em có file kèm theo nhờ anh chọ hết sức giúp đỡ, em cam on nhieu ah.

Bạn đã chen ngang vào Topic này và nội dung hỏi không liên quan đến tiêu đề.
Bạn tạo Topic mới, ghi rõ nội dung cần giúp, kết quả mẫu muốn có, cột nào nhập thủ công, cột nào cần công thức... chứ không phải ai cũng cùng ngành với bạn mà hiểu được cách giải thích chuyên môn của bạn.
Ví dụ câu này:
"- phải có điều kiện mã tài khoản để phân biệt tạm ứng, chi trả hay thu của nhiều đối tượng." Ai biết điều kiện là gì.
 
Upvote 0
Nhờ các anh cao thủ giúp dùm em cái này với, em có file Excel, có dữ liệu từ cột A đến D (BẢNG DỮ LIỆU). Cần code để điền nhanh dữ liệu qua cột F đến H (KẾT QUẢ), không giới hạn số lượng hàng, từ hàng đầu tiên đến hàng cuối cùng có dữ liệu . Em cám ơn nhiều ạ!
 

File đính kèm

Upvote 0
Nhờ các anh cao thủ giúp dùm em cái này với, em có file Excel, có dữ liệu từ cột A đến D (BẢNG DỮ LIỆU). Cần code để điền nhanh dữ liệu qua cột F đến H (KẾT QUẢ), không giới hạn số lượng hàng, từ hàng đầu tiên đến hàng cuối cùng có dữ liệu . Em cám ơn nhiều ạ!
Bạn chạy thử Code này xem
PHP:
Sub Chitiet()
    Dim sArr, dArr, I As Long, J As Long, K As Long
sArr = Range("A4", Range("A" & Rows.Count).End(3)).Resize(, 4).Value2
ReDim dArr(1 To Rows.Count, 1 To 3)
For I = 1 To UBound(sArr)
    K = K + 1
    dArr(K, 1) = sArr(I, 1)
    For J = sArr(I, 2) To sArr(I, 3)
        dArr(K, 2) = J
        dArr(K, 3) = sArr(I, 4)
        K = K + 1
    Next J
    K = K - 1
Next I
Range("F4").Resize(K).Offset(, 1).NumberFormat = "m/d/yyyy"
Range("F4").Resize(K, 3) = dArr
End Sub
 
Upvote 0
Bạn chạy thử Code này xem
PHP:
Sub Chitiet()
    Dim sArr, dArr, I As Long, J As Long, K As Long
sArr = Range("A4", Range("A" & Rows.Count).End(3)).Resize(, 4).Value2
ReDim dArr(1 To Rows.Count, 1 To 3)
For I = 1 To UBound(sArr)
    K = K + 1
    dArr(K, 1) = sArr(I, 1)
    For J = sArr(I, 2) To sArr(I, 3)
        dArr(K, 2) = J
        dArr(K, 3) = sArr(I, 4)
        K = K + 1
    Next J
    K = K - 1
Next I
Range("F4").Resize(K).Offset(, 1).NumberFormat = "m/d/yyyy"
Range("F4").Resize(K, 3) = dArr
End Sub
Quá chuẩn luôn, em cám ơn nhiều ạ
 
Upvote 0
Cho hỏi thêm cái này nữa ah. Nếu mình làm trả về kết quả như vậy có được không ạ, kết quả cột F và G, kết quả tới đâu kẻ khung tới đó luôn. Nếu BẢNG DỮ LIỆU tới đâu thì KẾT QUẢ tới đó thôi ah. Nếu mình cập nhật lại BẢNG DỮ LIỆU thì nó có thể xóa dữ liệu bên KẾT QUẢ tạo kết quả mới (bao gồm kẻ khung). Cám ơn ạ
 

File đính kèm

Upvote 0
Cho hỏi thêm cái này nữa ah. Nếu mình làm trả về kết quả như vậy có được không ạ, kết quả cột F và G, kết quả tới đâu kẻ khung tới đó luôn. Nếu BẢNG DỮ LIỆU tới đâu thì KẾT QUẢ tới đó thôi ah. Nếu mình cập nhật lại BẢNG DỮ LIỆU thì nó có thể xóa dữ liệu bên KẾT QUẢ tạo kết quả mới (bao gồm kẻ khung). Cám ơn ạ
Sao không thêm 1 cột ngày nghiệm thu để xuất ra nhật ký luôn 1 lần cho đỡ
Mã:
Sub Chitiet()
    Dim sArr, dArr, I As Long, J As Long, K As Long
sArr = Range("A4", Range("A" & Rows.Count).End(3)).Resize(, 4).Value2
ReDim dArr(1 To Rows.Count, 1 To 3)
For I = 1 To UBound(sArr)
    K = K + 1
    dArr(K, 1) = sArr(I, 1)
    For J = sArr(I, 2) To sArr(I, 3)
        dArr(K, 2) = J
        dArr(K, 3) = sArr(I, 4)
        K = K + 1
    Next J
    K = K - 1
Next I
With Range("F4", Range("G65535").End(3))
    .ClearContents
    .Borders.LineStyle = xlNone
End With
Range("F4").Resize(K).Offset(, 1).NumberFormat = "m/d/yyyy"
With Range("F4").Resize(K, 3)
    .Value = dArr
    .Borders.LineStyle = xlContinuous
    .Borders(xlInsideHorizontal).Weight = xlHairline
End With
Range("F4").Resize(K).Offset(, 1).Resize(K, 2).Sort Key1:=Range("G3")
For I = K + 4 To 4 Step -1
    If Range("G" & I) = Range("G" & I - 1) Then Range("G" & I) = ""
    If Range("G" & I) <> Empty Then
        With Range("F" & I & ":H" & I).Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With
    End If
Next I
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Sao không thêm 1 cột ngày nghiệm thu để xuất ra nhật ký luôn 1 lần cho đỡ
Mã:
Sub Chitiet()
    Dim sArr, dArr, I As Long, J As Long, K As Long
sArr = Range("A4", Range("A" & Rows.Count).End(3)).Resize(, 4).Value2
ReDim dArr(1 To Rows.Count, 1 To 3)
For I = 1 To UBound(sArr)
    K = K + 1
    dArr(K, 1) = sArr(I, 1)
    For J = sArr(I, 2) To sArr(I, 3)
        dArr(K, 2) = J
        dArr(K, 3) = sArr(I, 4)
        K = K + 1
    Next J
    K = K - 1
Next I
With Range("F4", Range("G65535").End(3))
    .ClearContents
    .Borders.LineStyle = xlNone
End With
Range("F4").Resize(K).Offset(, 1).NumberFormat = "m/d/yyyy"
With Range("F4").Resize(K, 3)
    .Value = dArr
    .Borders.LineStyle = xlContinuous
    .Borders(xlInsideHorizontal).Weight = xlHairline
End With
Range("F4").Resize(K).Offset(, 1).Resize(K, 2).Sort Key1:=Range("G3")
For I = K + 4 To 4 Step -1
    If Range("G" & I) = Range("G" & I - 1) Then Range("G" & I) = ""
    If Range("G" & I) <> Empty Then
        With Range("F" & I & ":H" & I).Borders(xlEdgeTop)
            .LineStyle = xlContinuous
            .Weight = xlThin
        End With
    End If
Next I
End Sub
Vậy là quá tốt rồi. Em cảm ơn nhiều lắm ạ.
 
Upvote 0
Nhờ anh giúp với ạ, bổ sung thêm cột Ngày nghiệm thu, Có 2 sheet BẢNG DỮ LIỆU và sheet KẾT QUẢ. Sau khi chạy Code, muốn cho ra kết quả như vầy được không ạ:

+ Sheet KẾT QUẢ: Nếu công việc nào có ngày nghiệm thu thì có chữ “Nghiệm thu: …….” và tô màu xanh, in đậm . Công việc nào có nghiệm thu nhưng trước kết thúc thì có chữ “Nghiệm thu: …….” , tô màu đỏ, in đậm . Công việc nào không có ngày nghiệm thu thì không ghi Nghiệm thu.

+ Sheet BẢNG DỮ LIỆU: Nếu công việc nào có ngày Nghiệm Thu sau ngày Kết Thúc thì chữ màu đen. Công việc nào có Không Có ngày Nghiệm Thu thì chữ màu xanh, in đậm. Công tác nào có ngày nghiệm thu trước ngày Kết Thúc thì có chữ màu đỏ, in đậm.
 

File đính kèm

Upvote 0
Hoặc là lấy thêm công việc "Ngiệm thu: ....... " thôi cũng được, không tô màu chữ , có gì để kiểm tra sau cũng được ạ.
 
Upvote 0
Hoặc là lấy thêm công việc "Ngiệm thu: ....... " thôi cũng được, không tô màu chữ , có gì để kiểm tra sau cũng được ạ.
Hết bài này thôi nha. Nếu có gì mở Topic khác. Nhờ Topic của người khác đến đây là được rồi. :D
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom