Cần giúp viết Code làm cho các ô chứa công thức toàn bảng tính thành giá trị (Value) (1 người xem)

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

hung2412

Thành viên tích cực
Tham gia
5/8/08
Bài viết
934
Được thích
240
Giới tính
Nam
Xin chào các bạn GPE!
Nhờ các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Trong bảng tính có các ô chứa công thức (Các ô chứa công thức nằm rải rác khắp nơi) => Để làm cho các ô chứa công thức đó thành giá trị (Value), tôi xài Code:
PHP:
Cells.Value=Cells.Value
hoặc Code:
PHP:
Cells.Copy
Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
=> Vấn đề được đặt ra ở đây là: Cả 2 Code trên có nhược điểm là chạy chậm (Vì nó chuyển cả bảng tính thành giá trị) => Có Code nào chỉ chuyển các ô chứa công thức thành các ô chứa giá trị (Value) cho nhanh không?
Mong các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm.
 

File đính kèm

Xin chào các bạn GPE!
Nhờ các bạn giúp đỡ cho tôi vấn đề này với, cụ thể như sau:
Trong bảng tính có các ô chứa công thức (Các ô chứa công thức nằm rải rác khắp nơi) => Để làm cho các ô chứa công thức đó thành giá trị (Value), tôi xài Code:
PHP:
Cells.Value=Cells.Value
hoặc Code:
PHP:
Cells.Copy
Cells.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
=> Vấn đề được đặt ra ở đây là: Cả 2 Code trên có nhược điểm là chạy chậm (Vì nó chuyển cả bảng tính thành giá trị) => Có Code nào chỉ chuyển các ô chứa công thức thành các ô chứa giá trị (Value) cho nhanh không?
Mong các bạn GPE chỉ giáo!
Trân trọng cảm ơn!
P/s: Có 01 File đính kèm.

chơi vậy hay hơn Cells nè
PHP:
Sub Value()
    With Sheet1.UsedRange
        .Value = .Value
    End With
End Sub
 
Upvote 0
thử code này (code sưu tầm trên DĐ)
Mã:
Sub PasteValueAll()
  Dim wks As Worksheet, aRes
  On Error Resume Next
  For Each wks In ThisWorkbook.Worksheets
    aRes = wks.UsedRange.Value
    wks.UsedRange.Value = aRes
  Next
  On Error GoTo 0
End Sub
 
Upvote 0
Ah không, tôi nhầm, xin lỗi bạn. Chạy được rồi.
Nếu chỉ chuyển cột C và cột D thì biến đổi Code của bạn như thế nào nhỉ (Không phải cả Sheet nữa)? Mong bạn chỉ giúp cho tôi với.

code mẫu đó có rồi với khả năng của bạn thừa sức xử mà
 
Upvote 0
[thongbao]Nếu chỉ chuyển cột C và cột D thì biến đổi Code của bạn như thế nào nhỉ (Không phải cả Sheet nữa)?[/thongbao]

Nếu trong 2 cột này chỉ vài ô có công thức thì có cách khác nữa, nhanh hơn: Áp dụng fương thức SpecialCells()
 
Upvote 0
[thongbao]Nếu chỉ chuyển cột C và cột D thì biến đổi Code của bạn như thế nào nhỉ (Không phải cả Sheet nữa)?[/thongbao]

Nếu trong 2 cột này chỉ vài ô có công thức thì có cách khác nữa, nhanh hơn: Áp dụng fương thức SpecialCells()
Tôi cũng đã nghĩ đến phương thức SpecialCells. Tuy nhiên, khi chọn được thì làm thế nào để chuyển hóa về giá trị (Value) mà không bị sắp xếp lung tung. Bạn thử mà xem.
 
Upvote 0
Tôi cũng đã nghĩ đến phương thức SpecialCells. Tuy nhiên, khi chọn được thì làm thế nào để chuyển hóa về giá trị (Value) mà không bị sắp xếp lung tung. Bạn thử mà xem.

Bạn thử cái này xem nó có bị sắp xếp lung tung không ?
Mã:
Sub Macro1()
    On Error Resume Next
    With [c3:d100].SpecialCells(3)
        .Value = .Value
    End With
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử cái này xem nó có bị sắp xếp lung tung không ?
Mã:
Sub Macro1()
    On Error Resume Next
    With [c3:d100].SpecialCells(3)
        .Value = .Value
    End With
End Sub
Tôi thử text như sau:
- Ảnh trước khi chạy Code:
Truoc.jpg
- Ảnh sau khi chạy Code:
Sau.jpg
=> Thay đổi vị trí. Cụ thể ô C7 trước khi chuyển đổi có giá trị là 675 và sau khi chuyển đổi có giá trị là 4.401.
Bạn xem có phải như vậy không?
 
Upvote 0
Bạn gửi file lên đi, xem ảnh khó quá.
 
Upvote 0
Đúng là không được bạn ạ! Lý do là! [c3:d100].SpecialCells(3).Value chỉ là giá trị của Cells đầu tiên chứa công thức.
Nên có lẽ phải dùng câu lệnh [c3:d100]= [c3:d100].Value
 
Upvote 0
...
Nếu chỉ chuyển cột C và cột D thì biến đổi Code của bạn như thế nào nhỉ (Không phải cả Sheet nữa)? Mong bạn chỉ giúp cho tôi với.
Thử thế này xem sao
Thay
Mã:
With Sheet1.UsedRange
bằng
Mã:
With Sheet1.Range("C2", Sheet1.Range("D" & Sheet1.UsedRange.Rows.Count))
 
Upvote 0
Tôi cũng đã nghĩ đến phương thức SpecialCells. Tuy nhiên, khi chọn được thì làm thế nào để chuyển hóa về giá trị (Value) mà không bị sắp xếp lung tung. Bạn thử mà xem.

Bạn thử dùng sb này xem có tăng tốc đc tí nào không nhé.

Mã:
 Sub test()
    Dim rCll As Range
    On Error Resume Next
    For Each rCll In Cells.SpecialCells(xlFormulas)
        rCll = rCll.Value
    Next rCll
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
File trước khi chạy Code thì ở #1. Còn File sau khi chạy Code thì ở dưới đính kèm bạn ạ.

chơi kiểu này cũng được nè khỏi phải For Next +On Error Resume Next gì hết
PHP:
Sub Value3()
    With Sheet1.Range("C3:D100").SpecialCells(12)
        .Value = .Value
    End With
End Sub
 
Upvote 0
chơi kiểu này cũng được nè khỏi phải For Next +On Error Resume Next gì hết
PHP:
Sub Value3()
    With Sheet1.Range("C3:D100").SpecialCells(12)
        .Value = .Value
    End With
End Sub
Mình không đọc hết các bài trên không biết có hiểu nhầm ý gì hay không. Sao lại không viết vầy nhỉ?
PHP:
[C:D].Value = [C:D].Value
 
Upvote 0
Mình không đọc hết các bài trên không biết có hiểu nhầm ý gì hay không. Sao lại không viết vầy nhỉ?
PHP:
[C:D].Value = [C:D].Value

xúc tích ngắn gọn nhất từ đầu bài đến cuối bài và khỏi phải For Next +On Error Resume Next gì hết
 
Upvote 0
chơi kiểu này cũng được nè khỏi phải For Next +On Error Resume Next gì hết
PHP:
Sub Value3()
    With Sheet1.Range("C3:D100").SpecialCells(12)
        .Value = .Value
    End With
End Sub
Cái đoạn Code (Gạch chân)
Mã:
With Sheet1.Range("C3:D100").[U]SpecialCells(12)[/U]
=>Là để làm gì bạn nhỉ?. Nó có khác chi Code:
PHP:
Sub Value3()
    With Sheet1.Range("C3:D100")
        .Value = .Value
    End With
End Sub
đâu nhỉ?
 
Upvote 0
Cái đoạn Code (Gạch chân)
Mã:
With Sheet1.Range("C3:D100").[U]SpecialCells(12)[/U]
=>Là để làm gì bạn nhỉ?. Nó có khác chi Code:
PHP:
Sub Value3()
    With Sheet1.Range("C3:D100")
        .Value = .Value
    End With
End Sub
đâu nhỉ?

Đoạn này:

Mã:
[COLOR=#0000BB][FONT=monospace][I]Sub Value3[/I][/FONT][/COLOR][COLOR=#007700][FONT=monospace][I]()
    [/I][/FONT][/COLOR][COLOR=#0000BB][FONT=monospace][I]With Sheet1[/I][/FONT][/COLOR][COLOR=#007700][FONT=monospace][I].[/I][/FONT][/COLOR][COLOR=#0000BB][FONT=monospace][I]Range[/I][/FONT][/COLOR][COLOR=#007700][FONT=monospace][I]([/I][/FONT][/COLOR][COLOR=#DD0000][FONT=monospace][I]"C3:D100"[/I][/FONT][/COLOR][COLOR=#007700][FONT=monospace][I]).[/I][/FONT][/COLOR][COLOR=#0000BB][FONT=monospace][I]SpecialCells[/I][/FONT][/COLOR][COLOR=#007700][FONT=monospace][I]([/I][/FONT][/COLOR][COLOR=#0000BB][FONT=monospace][I]12[/I][/FONT][/COLOR][COLOR=#007700][FONT=monospace][I])
        .[/I][/FONT][/COLOR][COLOR=#0000BB][FONT=monospace][I]Value [/I][/FONT][/COLOR][COLOR=#007700][FONT=monospace][I]= .[/I][/FONT][/COLOR][COLOR=#0000BB][FONT=monospace][I]Value
    End With
End Sub  [/I][/FONT][/COLOR]

= Chọn những cell không ẩn (Visiblecell) trong vùng C3:D100 (có tác dụng với đk kiện vùng này phải đang đc dùng autofillter hoặc có dòng, cột đang bị hide. Nếu không thì đúng như bạn nói nó như:

Mã:
[COLOR=#0000BB][FONT=monospace]Sub Value3[/FONT][/COLOR][COLOR=#007700][FONT=monospace]()
    [/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]With Sheet1[/FONT][/COLOR][COLOR=#007700][FONT=monospace].[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Range[/FONT][/COLOR][COLOR=#007700][FONT=monospace]([/FONT][/COLOR][COLOR=#DD0000][FONT=monospace]"C3:D100"[/FONT][/COLOR][COLOR=#007700][FONT=monospace])
        .[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Value [/FONT][/COLOR][COLOR=#007700][FONT=monospace]= .[/FONT][/COLOR][COLOR=#0000BB][FONT=monospace]Value
    End With
End Sub  [/FONT][/COLOR]
 
Upvote 0

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

Back
Top Bottom