Refresh all cell selected (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

jameblack

Thành viên mới
Tham gia
10/9/07
Bài viết
5
Được thích
1
Vừa tìm được code này thấy hữu dụng cho em cần refresh dữ liệu, nhất là dữ liệu xuất từ các chương trình ra excel mà không theo đúng format.

Sub RefreshCells()

' Selected the area where you want to change format
' Transforms selected area to chosen format
Dim mycell As Range
For Each mycell In Selection
mycell.Value = mycell.Value
Next mycell

End Sub


Nếu trùng mod xóa giùm nhé
Tks
 
Tôi chẳng thấy code này có gì đặc biệt cả? Chỉ đơn thuần là thay giá trị trong vùng chọn bằng value.
 
Upvote 0
Đúng vậy.
Tại bạn chưa gặp trường hợp này nên thấy ko có gì đặc biệt.
Nếu bạn gặp 1 file 1000 cell hiển thị số dạng "123.456", sau khi format lại thành number nhưng vẫn không cộng trừ được thì bạn sẽ thấy hàm này hiệu quả ra sao. :)
 
Upvote 0
Đúng vậy.
Tại bạn chưa gặp trường hợp này nên thấy ko có gì đặc biệt.
Nếu bạn gặp 1 file 1000 cell hiển thị số dạng "123.456", sau khi format lại thành number nhưng vẫn không cộng trừ được thì bạn sẽ thấy hàm này hiệu quả ra sao. :)
Bạn thử đưa 1 file như bạn nói lên đây xem thế nào! Tôi nghĩ tôi không cần code vẫn có thể làm cho các cell tính toán được đấy
Còn như bạn nói cell có giá trị 123.456 ở dạng text mà dùng code trên thì chưa chắc đã đúng ---> Làm sao bạn biết chắc rằng dấu chấm trong số kia là dấu phân cách ngàn hay dấu thập phân? Mặc khác, dấu phân cách ngàn và thập phân trong Control Panel trên máy bạn được quy định là dấu gì?
 
Lần chỉnh sửa cuối:
Upvote 0
Đúng vậy.
Tại bạn chưa gặp trường hợp này nên thấy ko có gì đặc biệt.
Nếu bạn gặp 1 file 1000 cell hiển thị số dạng "123.456", sau khi format lại thành number nhưng vẫn không cộng trừ được thì bạn sẽ thấy hàm này hiệu quả ra sao. :)

Tôi gặp nhiều trường hợp phức tạp hơn nhiều nhưng đều giải quyết được bằng VBA, hãy vào GPE để đọc để biết thêm kiếm thức nhé!

Dưới đây là ví dụ mở rộng hơn, nếu sheet có nhiều dữ liệu phân tán, thì dùng thủ tục này:
Sub RefreshCells()
' Transforms selected area to chosen format
Dim mycell As Range
For Each mycell In UsedRange
mycell.Value = mycell.Value
Next mycell

End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi không hiểu lắm về việc Refresh này - vì nghĩa của từ "Refresh" là làm mới (làm tươi lại). Nhưng ở đây rõ ràng chức năng của nó có vấn đề - vì nó có thể thay công thức bằng giá trị (không biết người sử dụng có mong muốn điều đó hay không???)

Ngoài ra, tôi thấy, thay vì dùng vòng lặp For each để duyệt, may mắn tôi thử thấy với code:
UsedRange.Value = UsedRange.Value
hoặc Selection.Value = Selection.Value

không dùng vòng lặp thì vẫn chạy đúng.
Mong các anh chị giải thích thêm.
 
Upvote 0
Tôi không hiểu lắm về việc Refresh này - vì nghĩa của từ "Refresh" là làm mới (làm tươi lại). Nhưng ở đây rõ ràng chức năng của nó có vấn đề - vì nó có thể thay công thức bằng giá trị (không biết người sử dụng có mong muốn điều đó hay không???)

Ngoài ra, tôi thấy, thay vì dùng vòng lặp For each để duyệt, may mắn tôi thử thấy với code:
UsedRange.Value = UsedRange.Value
hoặc Selection.Value = Selection.Value

không dùng vòng lặp thì vẫn chạy đúng.
Mong các anh chị giải thích thêm.
Còn nếu như có vấn đề gì đó đặt biệt (chưa biết), ta tạo 1 mảng có kích thuóc = UsedRange bằng cách gán UsedRange.Value vào mảng ấy... Xong, duyệt từng phần tử của mảng, xử lý gì đó (tùy ý) rồi cuối cùng "đập 1 phát" vào bảng tính là xong ---> Tốc độ chắc chăn nhanh hơn so với duyệt trên Range
 
Upvote 0
Web KT

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

Back
Top Bottom