sonchuot90
Thành viên mới
- Tham gia
- 16/4/22
- Bài viết
- 42
- Được thích
- 6
Hình như bạn muốn khi nhập hàm round vào ô đầu tiên có công thức thì những ô kế tiếp sau đó tự động cập nhật hàm round vào cho mình không phải copi xuống đúng không ? Nếu đúng cần như vậy thì sử dụng Table là đượcEm xin chào anh chị trong diễn đàn, nhờ anh chị hướng dẫn giúp em cách chèn thêm hàm round vào ô đã có công thức
Mong anh chị giúp đỡ e ạ, Em xin cám ơn ạ
View attachment 282191
Dạ. Mình có công thức trước rồi. Bây giờ muốn chèn thêm hàm round vào trong công thức đấyHình như bạn muốn khi nhập hàm round vào ô đầu tiên có công thức thì những ô kế tiếp sau đó tự động cập nhật hàm round vào cho mình không phải copi xuống đúng không ? Nếu đúng cần như vậy thì sử dụng Table là được
Không đúng rồi bạn ạ. Ý mình là có công thức rồi. Muốn thêm hàm round vào công thức đấy.Ô F3=Round(D3.0) kéo xuống ...
=SUBSTITUTE(A1&",0)","#","#Round(")
Sub AddRound()
For Each Cell In Selection
If Cell.Formula <> "" and InStr(Cell.Formula, "ROUND") <> 2 Then
Cell.Formula = Replace(Cell.Formula & ",0)", "=", "=Round(")
End If
Next
End Sub
Vâng. Cám ơn anh nhiều ạLàm vầy nha:
1. Tại A1 bạn nhấn Ctrl + H --> Replace, chuyển cái dấu "=" thành dấu "#" (ví dụ ô cần thêm round là A1)
View attachment 282224
2. Sau khi đã chuyển công thức thành chuỗi, bạn thêm 1 cột phụ (ví dụ B1) dùng công thức.
PHP:=SUBSTITUTE(A1&",0)","#","#Round(")
View attachment 282225
bạn thu được chuỗi đã thêm hàm Round.
3. Chọn B1, nhấn copy rồi paste ra C1 dạng Paste Values
View attachment 282226
4. Tại C1 làm lại bước 1, nhấn Ctrl + H --> Replace, chuyển ngược lại dấu # thành dấu =
----------
Cách này nhẹ nhàng dễ dùng tuy nhiều bước, nhưng bạn hiểu nguyên tắc thì không có gì khó cả, và bạn có thể làm một lúc cho rất nhiều ô.
Vâng. Em cám ơn anhLàm vầy nha:
1. Tại A1 bạn nhấn Ctrl + H --> Replace, chuyển cái dấu "=" thành dấu "#" (ví dụ ô cần thêm round là A1)
View attachment 282224
2. Sau khi đã chuyển công thức thành chuỗi, bạn thêm 1 cột phụ (ví dụ B1) dùng công thức.
PHP:=SUBSTITUTE(A1&",0)","#","#Round(")
View attachment 282225
bạn thu được chuỗi đã thêm hàm Round.
3. Chọn B1, nhấn copy rồi paste ra C1 dạng Paste Values
View attachment 282226
4. Tại C1 làm lại bước 1, nhấn Ctrl + H --> Replace, chuyển ngược lại dấu # thành dấu =
----------
Cách này nhẹ nhàng dễ dùng tuy nhiều bước, nhưng bạn hiểu nguyên tắc thì không có gì khó cả, và bạn có thể làm một lúc cho rất nhiều ô.
Vâng. Code anh nhanh gọn. Em cám ơn anh ạHoặc bạn có thể sử dụng đoạn mã sau.
PHP:Sub AddRound() For Each Cell In Selection If Cell.Formula <> "" and InStr(Cell.Formula, "ROUND") <> 2 Then Cell.Formula = Replace(Cell.Formula & ",0)", "=", "=Round(") End If Next End Sub
Code này không hẳn đúng. Tức là có những lúc nó ra sai.Hoặc bạn có thể sử dụng đoạn mã sau.
PHP:Sub AddRound() For Each Cell In Selection If Cell.Formula <> "" and InStr(Cell.Formula, "ROUND") <> 2 Then Cell.Formula = Replace(Cell.Formula & ",0)", "=", "=Round(") End If Next End Sub
có phải ý bác muốn đề cập đến hàm InStr ko nhỉ?Code này không hẳn đúng. Tức là có những lúc nó ra sai.
Bạn tự suy nghĩ xem trường hợp nào thì nó sai.
Thiếu trường hợp ô chỉ chứa giá trị, code tại bài #6 sẽ bị sai.có phải ý bác muốn đề cập đến hàm InStr ko nhỉ?
Sub AddRound()
For Each Cell In Selection
If Cell.HasFormula = True And InStr(Cell.Formula, "ROUND") <> 2 Then
Cell.Formula = Replace(Cell.Formula & ",0)", "=", "=Round(")
End If
Next
End Sub
Em sửa lại như trên rồi, anh góp ý thêm để hoàn thiện luôn.Code này không hẳn đúng. Tức là có những lúc nó ra sai.
Bạn tự suy nghĩ xem trường hợp nào thì nó sai.
Mình hỏi cái: nếu thay vì gõ =A1+A2, mà lại gõ +A1+A2, thì khi round nó hơi xấu nhỉ.Thiếu trường hợp ô chỉ chứa giá trị, code tại bài #6 sẽ bị sai.
Replace("=IF(A1=B1, 1, 2)" & ")", "=", "=Round(")...
Em sửa lại như trên rồi, anh góp ý thêm để hoàn thiện luôn.
Cảm ơn anh, em chỉnh lại.Replace("=IF(A1=B1, 1, 2)" & ")", "=", "=Round(")
---> =Round(IF(A1=Round(B1, 1, 2),0)
(vì công thức này lỗi cho nên VBA sẽ báo lỗi thay vì cho kết quả sai)
Gợi ý: hàm Replace có một tham số cho biết cần thay mấy lượt.
Cell.Formula = Replace(Cell.Formula & ",0)", "=", "=Round(", , 1)
Bạn gõ gì thì sau trong ô nó cũng nhảy về dấu "=" ở đầu.Mình hỏi cái: nếu thay vì gõ =A1+A2, mà lại gõ +A1+A2, thì khi round nó hơi xấu nhỉ.
Gõ dấu + thay cho = là dư âm của Lotus123Bạn gõ gì thì sau trong ô nó cũng nhảy về dấu "=" ở đầu.
Lỡ dữ liệu họ có hàm Round đầu tiên thì sao nhỉThiếu trường hợp ô chỉ chứa giá trị, code tại bài #6 sẽ bị sai.
Nên sửa thành:
Mã:Sub AddRound() For Each Cell In Selection If Cell.HasFormula = True And InStr(Cell.Formula, "ROUND") <> 2 Then Cell.Formula = Replace(Cell.Formula & ",0)", "=", "=Round(") End If Next End Sub
Bài đã được tự động gộp:
Em sửa lại như trên rồi, anh góp ý thêm để hoàn thiện luôn.
Việc đó không nằm trong khuôn khổ giới hạn của đề bài này. Round bọc nhau vài ba lần cũng chả chết ai.Lỡ dữ liệu họ có hàm Round đầu tiên thì sao nhỉ
Đúng là bọc nhau chả chết ai, nhưng code của bác huhumalu lại có thực hiện bọc nhau trong trường hợp này đâu (Em mở rộng tí thôi, còn đối với đề bài thì code bác ấy chuẩn rồi)Việc đó không nằm trong khuôn khổ giới hạn của đề bài này. Round bọc nhau vài ba lần cũng chả chết ai.
Có khúc bẫyLỡ dữ liệu họ có hàm Round đầu tiên thì sao nhỉ
InStr(Cell.Formula, "ROUND") <> 2
Gõ dấu + thay cho = là dư âm của Lotus123
Lỡ dữ liệu họ có hàm Round đầu tiên thì sao nhỉ
Có khúc bẫy
để tránh add nhiều lần khi code chạy nhiều lần.Mã:InStr(Cell.Formula, "ROUND") <> 2
Chỉ có đối số hàm round khác nhau thì thôi, chán luôn.