Hàm Max tự động chạy bằng VBA

Liên hệ QC

longkhanhck

Thành viên mới
Tham gia
3/10/11
Bài viết
48
Được thích
3
Chào Anh/Chị!

Em muốn tạo đoạn code cho hàm MAX tự động chạy trong bảng tính. Hàm max cho kết quả trong cột S từ "S11: S" khi so sánh giá trị của "L11:L" và "N11:N" (Công thức Excel trên cột S tương tự : =MAX(ROUND(L11,2),ROUND(N11/1000,2)) )
Nhưng làm mãi nó không chạy được. Nên nhờ A/C giúp đỡ

"""Sub TinhRT()
Delivery Tracking.Range("S11:S10000") = Application.Max(Round(("L11:L10000"), 2), Round(("N11:N10000") / 1000, 2))
End If
End Sub""
 
Chào Anh/Chị!

Em muốn tạo đoạn code cho hàm MAX tự động chạy trong bảng tính. Hàm max cho kết quả trong cột S từ "S11: S" khi so sánh giá trị của "L11:L" và "N11:N" (Công thức Excel trên cột S tương tự : =MAX(ROUND(L11,2),ROUND(N11/1000,2)) )
Nhưng làm mãi nó không chạy được. Nên nhờ A/C giúp đỡ

"""Sub TinhRT()
Delivery Tracking.Range("S11:S10000") = Application.Max(Round(("L11:L10000"), 2), Round(("N11:N10000") / 1000, 2))
End If
End Sub""
Không hiểu bạn muốn gì, nếu là công thức đơn giản vậy sao không sử dụng công thức, mà lại phải dùng VBA
 
Upvote 0
Không hiểu bạn muốn gì, nếu là công thức đơn giản vậy sao không sử dụng công thức, mà lại phải dùng VBA
Theo cách code thì là muốn làm một công thức tính rải dài xuống một cột.

@thớt: không thể một lúc ghi công thức vào cả mảng như thế. Nên đi tìm các bài nói về cách ghi công thức vào một ô và fill xuống các ô còn lại.

(tính thử mà nghe đến chục ngàn dòng nên thôi) :p:p:p
 
Upvote 0
Theo cách code thì là muốn làm một công thức tính rải dài xuống một cột.

@thớt: không thể một lúc ghi công thức vào cả mảng như thế. Nên đi tìm các bài nói về cách ghi công thức vào một ô và fill xuống các ô còn lại.

(tính thử mà nghe đến chục ngàn dòng nên thôi) :p:p:p
Giúp mình phần này cũng được: Theo cách code thì là muốn làm một công thức tính rải dài xuống một cột.
 
Upvote 0
Giúp mình phần này cũng được: Theo cách code thì là muốn làm một công thức tính rải dài xuống một cột.

thế thì thử kiểu này, với sheet hiện hành (với sheet khác tự sửa), và tạm cho 10 dòng, muốn 10 000 dòng thì bạn cũng tự xử
Mã:
Theo VetMini thì không nên dùng code vì công thức giản đơn, không nặng 
và tôi cũng thấy nên sử dụng công thức, cần nữa thì paste value là hết nặng, trong nháy mắt là xong cần chi VBA cho nặng đầu
 
Lần chỉnh sửa cuối:
Upvote 0
Khéo tưởng tượng.
Công thức chẳngb phải dò cột, cũng khong phải cong thức mảng, hay công thức volatile.
Chẳng có lý do gì để nó nặng.

Dùng VBA tự động mất công bắt sự kiện, kiểm soát code, ... Công việc trước mắt nặng hơn nhiều.

Chú: công thức hơi dỏm. Lý do tại sao phải Round trước khi lấy Max? Lấy xong rồi Round thì giảm được 1 con toán.
 
Upvote 0
Khéo tưởng tượng.
Công thức chẳngb phải dò cột, cũng khong phải cong thức mảng, hay công thức volatile.
Chẳng có lý do gì để nó nặng.

Dùng VBA tự động mất công bắt sự kiện, kiểm soát code, ... Công việc trước mắt nặng hơn nhiều.

Chú: công thức hơi dỏm. Lý do tại sao phải Round trước khi lấy Max? Lấy xong rồi Round thì giảm được 1 con toán.
Anh nếu dung công thức thì mỗi lần Sort sẽ mất khoảng 25 giây để ra kết quả (Em thử copy và pass giá trị để sort lại thì mất khoảng 2~3 giây).
Em nghĩ VBA sẽ hạn chế được thao tác lỗi bằng tay và file sẽ nhẹ hơn do các cột này đã fix và không điều chỉnh gì nữa (Nó chỉ việc lấy dữ liệu thôi)
 
Upvote 0
Mâu thuẫn, nếu không mâu thuẫn thì do quy trình dỏm.
Dữ liệu đã ổn định thì mắc mớ gì phải sort hoài.
Không có ai sort tới lui cả đống dữ liệu để phân tích cả. Đây là công việc của Table, Pivot Table, và Data Model.
Quản lý cả chục ngàn phát sinh dữ liệu mà phải dựa vào VBA là làm việc chắp vá.
 
Upvote 0
Mâu thuẫn, nếu không mâu thuẫn thì do quy trình dỏm.
Dữ liệu đã ổn định thì mắc mớ gì phải sort hoài.
Không có ai sort tới lui cả đống dữ liệu để phân tích cả. Đây là công việc của Table, Pivot Table, và Data Model.
Quản lý cả chục ngàn phát sinh dữ liệu mà phải dựa vào VBA là làm việc chắp vá.
Em nhờ giúp không phải tranh luận.
 
Upvote 0
Tôi ở diễn đàn này lâu đủ để biết người lên đây xin code là chỉ chấp nhận code, không bao giờ xem lại phương pháp nào khác.
Vì vậy tôi không hề có ý tranh luận với những đầu óc chủ quan.
Tôi phân tích dẫn dắt cho những người đi sau, không tiếp tục theo vết xe.
 
Upvote 0
Tôi ở diễn đàn này lâu đủ để biết người lên đây xin code là chỉ chấp nhận code, không bao giờ xem lại phương pháp nào khác.
Vì vậy tôi không hề có ý tranh luận với những đầu óc chủ quan.
Tôi phân tích dẫn dắt cho những người đi sau, không tiếp tục theo vết xe.
Trước tiên cảm ơn Anh. Em không rành về VBA và mong mọi người giúp đỡ để đở ức chế khi chờ file xử lý.

Còn file chỉ có 1 công thức duy nhất này thôi: = ROUND(MAX(L11,N11/1000),2) nhưng vẫn rất nặng mặc dù đã dọn dẹp các vấn đề không liên quan để file nhẹ hơn.

Nên em nghĩ VBA là hiệu quả nhất nếu dữ liệu lớn và cập nhập hàng ngày. Vì lý do riêng nên em không chia sẽ file được nên nhờ Anh/Chị giúp.

Em cũng dùng code bên dưới. Nhưng nó lại vướng là không bắt đầu từ dòng thứ 11 và không hoàn toàn tự động mà nó chỉ thây đổi khi có thao tác chuột ở cột B, Còn ở các cột khác nếu giá thay đổi hay thao tác chuột thì vẫn giữ giá trị cũ của cột B.



Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Then

Target.Offset(, 17) = Application.Max(Round(Target.Offset(, 10), 2), Round(Target.Offset(, 12) / 1000, 2))



“””= ROUND(MAX(L11,N11/1000),2) “”” Thay cho.

End If

End Sub
 
Upvote 0
Trước tiên cảm ơn Anh. Em không rành về VBA và mong mọi người giúp đỡ để đở ức chế khi chờ file xử lý.

Còn file chỉ có 1 công thức duy nhất này thôi: = ROUND(MAX(L11,N11/1000),2) nhưng vẫn rất nặng mặc dù đã dọn dẹp các vấn đề không liên quan để file nhẹ hơn.

Nên em nghĩ VBA là hiệu quả nhất nếu dữ liệu lớn và cập nhập hàng ngày. Vì lý do riêng nên em không chia sẽ file được nên nhờ Anh/Chị giúp.

Em cũng dùng code bên dưới. Nhưng nó lại vướng là không bắt đầu từ dòng thứ 11 và không hoàn toàn tự động mà nó chỉ thây đổi khi có thao tác chuột ở cột B, Còn ở các cột khác nếu giá thay đổi hay thao tác chuột thì vẫn giữ giá trị cũ của cột B.



Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 2 Then

Target.Offset(, 17) = Application.Max(Round(Target.Offset(, 10), 2), Round(Target.Offset(, 12) / 1000, 2))



“””= ROUND(MAX(L11,N11/1000),2) “”” Thay cho.

End If

End Sub
Vậy bạn muốn tự động thế nào?
Phải hiểu tự động thế nào thì mới có giải pháp
Công thức cũng là 1 tự động cập nhật, nếu tự động y hệt như công thức thì mọi giải pháp code VBA đều không thể qua được tốc độ của công thức
 
Upvote 0
Nếu có 1 thay đổi bất kì ở 1 cell nào đó (kể cả công thức liên kết từ sheet này qua sheet kia chẳng hạn) thì code cũng tự động cập nhập lại kết quả
 
Upvote 0
Web KT

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

Back
Top Bottom