Dùng code VBA thay thế công thức trong Excel

Liên hệ QC

0905744404

Thành viên thường trực
Tham gia
26/10/10
Bài viết
333
Được thích
107
Nghề nghiệp
Trước là : Thủ Kho - còn giờ thì :"Tài Xế"
Chào cả nhà !! Em có vấn đề này cần mọi người giúp đỡ, mọi người xem file đính kèm ròi giúp em với
chỗ tô màu vàng, không dùng công thức trong Excel, mà dùng bằng code trong VBA mà cũng có được kết quả như dùng công thức trên
Mỗi khi nhập thêm mã, số lượng thì các ô dùng công thức kia cũng chạy theo
mục đích để cho file nhẹ hơn, máy xử lý file cũng nhẹ hơn
 

File đính kèm

Chào cả nhà !! Em có vấn đề này cần mọi người giúp đỡ, mọi người xem file đính kèm ròi giúp em với
chỗ tô màu vàng, không dùng công thức trong Excel, mà dùng bằng code trong VBA mà cũng có được kết quả như dùng công thức trên
Mỗi khi nhập thêm mã, số lượng thì các ô dùng công thức kia cũng chạy theo
mục đích để cho file nhẹ hơn, máy xử lý file cũng nhẹ hơn
Nếu dùng code thì cũng theo hướng Vlookup. Chưa chắc là nhẹ hơn.
Muốn nhẹ thì có cách sau:
1/ Dùng Vlookup
2/ Copy và paste giá tr5i
Hay là dùng cách sau
1/ Nhập hết mã HH và SL
2/ Chạy 1 code gán tên và đơn giá
3/ Copy giá trị. Hay dùng array thì khỏi paste giá trị.
 
Upvote 0
Đoạn này thì em hiểu,
Nếu dùng code thì cũng theo hướng Vlookup. Chưa chắc là nhẹ hơn.
Muốn nhẹ thì có cách sau:
1/ Dùng Vlookup
2/ Copy và paste giá tr5i
, còn phần dưới thì em chưa hiểu, anh có thể giả thích giúp em được không?
Em xin hỏi thêm: anh giúp em viết đoạn code theo hướng vlookup() nha.
Mỗi khi nhập thêm mã, số lượng thì các ô dùng công thức kia cũng chạy theo
 
Upvote 0
Chào cả nhà !! Em có vấn đề này cần mọi người giúp đỡ, mọi người xem file đính kèm ròi giúp em với
chỗ tô màu vàng, không dùng công thức trong Excel, mà dùng bằng code trong VBA mà cũng có được kết quả như dùng công thức trên
Mỗi khi nhập thêm mã, số lượng thì các ô dùng công thức kia cũng chạy theo
mục đích để cho file nhẹ hơn, máy xử lý file cũng nhẹ hơn

Đã dùng VBA thì khai tử cho Vlookup luôn. Bạn thử File này xem
Mã:
Sub TinhTien()
    On Error Resume Next
    For Each cls In Range([c3], [c65536].End(3))
       If cls > 0 Then
           cls(1, 2) = Sheets("Don Gia").Cells.Find(cls(1, 0), , , 2)(1, 2)
           cls(1, 3) = cls * cls(1, 2)
       End If
    Next
End Sub
 

File đính kèm

Upvote 0
Đã dùng VBA thì khai tử cho Vlookup luôn. Bạn thử File này xem
Mã:
Sub TinhTien()
    On Error Resume Next
    For Each cls In Range([c3], [c65536].End(3))
       If cls > 0 Then
           cls(1, 2) = Sheets("Don Gia").Cells.Find(cls(1, 0), , , 2)(1, 2)
           cls(1, 3) = cls * cls(1, 2)
       End If
    Next
End Sub
Anh ơi ! Anh giúp em viết đoạn code coppy nhưng cột có công thức xuống khi nhập dữ liệu vào cột D, còn nhưng cột không có công thức thì vẫn nhập liệu bình thường.
Em cám ơn trước nha!!!
 
Upvote 0
Anh ơi ! Anh giúp em viết đoạn code coppy nhưng cột có công thức xuống khi nhập dữ liệu vào cột D, còn nhưng cột không có công thức thì vẫn nhập liệu bình thường.
Em cám ơn trước nha!!!

Mã:
Sub TinhTien()
    On Error Resume Next
    For Each cls In Range([c3], [c65536].End(3))
       If cls > 0 Then
[COLOR=#ff0000]           cls(1, 2) = Sheets("Don Gia").Cells.Find(cls(1, 0), , , 2)(1, 2)[/COLOR]
[COLOR=#0000cd]           cls(1, 3) = cls * cls(1, 2)[/COLOR]
       End If
    Next
End Sub

Dòng lệnh màu đỏ có tác dụng tự động tìm đơn giá bên Sheet Don Gia, nếu bạn muốn nhập trực tiếp đơn giá vào cột D thì xóa dòng này đi
Dòng lệnh màu xanh dùng để tính tiền (thành tiền = số lượng x đơn giá)

Bài này không có công thức nên không phải Copy xuống đâu. Mối khi bạn thay đổi dữ liệu thì máy sẽ tự động tính kết quả cho bạn.
 
Upvote 0
Mã:
Sub TinhTien()
    On Error Resume Next
    For Each cls In Range([c3], [c65536].End(3))
       If cls > 0 Then
[COLOR=#ff0000]          cls(1, 2) = Sheets("Don Gia").Cells.Find(cls(1, 0), , , 2)(1, 2)[/COLOR]
[COLOR=#0000cd]          cls(1, 3) = cls * cls(1, 2)[/COLOR]
       End If
    Next
End Sub

Dòng lệnh màu đỏ có tác dụng tự động tìm đơn giá bên Sheet Don Gia, nếu bạn muốn nhập trực tiếp đơn giá vào cột D thì xóa dòng này đi
Dòng lệnh màu xanh dùng để tính tiền (thành tiền = số lượng x đơn giá)

Bài này không có công thức nên không phải Copy xuống đâu. Mối khi bạn thay đổi dữ liệu thì máy sẽ tự động tính kết quả cho bạn.
Dạ em cám ơn anh, bài bày em hiểu rồi, em cũng đã thực hiện tôt rồi, nhưng em có nảy sinh ra một vấn đề là:
- em muốn coppy những cột có công thức xuống, (khi nhập vào giá trị vào cột D)
 
Upvote 0
Dạ em cám ơn anh, bài bày em hiểu rồi, em cũng đã thực hiện tôt rồi, nhưng em có nảy sinh ra một vấn đề là:
- em muốn coppy những cột có công thức xuống, (khi nhập vào giá trị vào cột D)

Cột D là do VBA tính rồi mà, sao lại vào cột D
bạn có nhầm ý tác giả không nhỉ
 
Upvote 0
Dạ em cám ơn anh, bài bày em hiểu rồi, em cũng đã thực hiện tôt rồi, nhưng em có nảy sinh ra một vấn đề là:
- em muốn coppy những cột có công thức xuống, (khi nhập vào giá trị vào cột D)

Nếu là bài khác bạn phải đưa File lên và chỉ rõ cột có công thức là cột nào và yêu cầu copy xuống đâu ?
 
Upvote 0
Nếu là bài khác bạn phải đưa File lên và chỉ rõ cột có công thức là cột nào và yêu cầu copy xuống đâu ?
Em xin lỗi, anh xem bài rồi giúp em viết code coppy cô ng thức này với nha. tại viết code để chạy luôn thì em biến đổi công thức rất khó. tại em không hiểu về code lắm
 

File đính kèm

Upvote 0
Em xin lỗi, anh xem bài rồi giúp em viết code coppy cô ng thức này với nha. tại viết code để chạy luôn thì em biến đổi công thức rất khó. tại em không hiểu về code lắm
Dùng VBA thay thế công thức trong bảng tính mục đích để file dữ liệu của mình chạy nhẹ nhàng, không phải tính toán lại các công thức
Nếu viết code chỉ để copy công thức thì bạn.........copy trực tiếp trong bảng tính cho rồi. Híc (nói vui thôi, đừng giận )
Nếu dữ liệu tính toán hàng ngàn thì theo mình nên chơi code (mà là code chạy luôn chứ hông có zụ copy công thức à nha), bi giờ chưa biết thì từ từ bạn cũng biết thôi mà
Tặng bạn một code ....chạy luôn
RightClick vào sheet "ban" ==> ViewCode ==> chép em này vào:
Mã:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cll, MaPt
    On Error Resume Next
        If Not Intersect(Target, Range("c5:c10000")) Is Nothing Then
        Set MaPt = Sheets("bg").Range(Sheets("bg").[b2], Sheets("bg").[b50000].End(xlUp))
            For Each Cll In MaPt
                If Target.Count > 1 Then
                    Target = ""
                    Exit Sub
                End If
                    If Cll <> "" Then
                        If Cll = Target Then
                            With Target
                                .Offset(, -1) = Cll.Offset(, 4)
                                .Offset(, 3) = .Offset(, 1) * .Offset(, 2)
                                .Offset(, 5) = Cll.Offset(, 11)
                                .Offset(, 6) = .Offset(, 5) - .Offset(, 5) * 10 / 100
                            End With
                                Range([b5], [b10000].End(xlUp)).Offset(, -1) = [row(A:A)]
                        End If
                    End If
            Next Cll
        End If
End Sub
Cứ nhập dữ liệu ở cột C rồi....xem kết quả
Thân
Xóa bỏ dòng "Yêu cầu khi nhập mã ....." đi nhé
 
Lần chỉnh sửa cuối:
Upvote 0
Em xin lỗi, anh xem bài rồi giúp em viết code coppy cô ng thức này với nha. tại viết code để chạy luôn thì em biến đổi công thức rất khó. tại em không hiểu về code lắm

Dùng VBA để Copy công thức chẳng khác gì dùng xe ô tô kéo xe ba gác để chở hàng...Tuy rất ghét những bài dạng này nhưng tôi vẫn làm tạm ở Sheet Copy Fx để chiều theo ý bạn.

Và dù biết bạn không thích tôi vẫn làm thêm Sheet VBA để bạn so sánh.
 

File đính kèm

Upvote 0
Đúng ra dạng bài này phải làm bằng VBA (đương nhiên), nhưng phải dùng UserForm thì mới hiểu quả
Việc của người dùng chỉ là:
- Mở UserForm lên
- Duyệt tìm từ khóa trong List để chọn lấy 1 mã hàng
- Các thông số có liên quan sẽ từ điền vào sheet
- Mọi việc cứ thế tiếp diễn đến khi nào ta nhập xong thì thôi
 
Upvote 0
Em cám ơn thầy và mọi người đã giúp đỡ em.
Em câc nhắc cái nào thích hợp cho công việc của mình thì em sẽ áp dụng
 
Upvote 0
Web KT

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

Back
Top Bottom