Chuyển công thức thành giá trị sau khi nhận dử liệu (1 người xem)

Liên hệ QC

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

phongkiemtinh

Thành viên thường trực
Tham gia
22/7/09
Bài viết
224
Được thích
5
E có yêu cầu muốn hỏi là: có cách nào để chuyển những cột có công thức link tới cell khác chuyển thành giá trị sau khi SAVE.
ví dụ: cột [A1] nhập giá trị vào= 2
cột [B1] chứa công thức = [A1]*4
và yêu cầu là khi nhập [A1]=2 và nhấn "SAVE" thì cột [B1] nhận giá trị =8, còn công thức không còn nữa khi chúng ta bấm chọn vào [B1], bấm vào chỉ thấy giá trị 8.
 
E có yêu cầu muốn hỏi là: có cách nào để chuyển những cột có công thức link tới cell khác chuyển thành giá trị sau khi SAVE.
ví dụ: cột [A1] nhập giá trị vào= 2
cột [B1] chứa công thức = [A1]*4
và yêu cầu là khi nhập [A1]=2 và nhấn "SAVE" thì cột [B1] nhận giá trị =8, còn công thức không còn nữa khi chúng ta bấm chọn vào [B1], bấm vào chỉ thấy giá trị 8.

Bạn thử dùng code này trong workbook xem:

Mã:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  Application.ScreenUpdating = False
    With ActiveSheet.Range(ActiveSheet.[a1], ActiveSheet.[a65000].End(3)).Offset(, 1)
      .Value = .Value
    End With
  Application.ScreenUpdating = True
End Sub
 
Upvote 0
Oh hay quá, vậy muốn toàn bộ công thức trong sheet đều như vây thì sao bạn?mình muốn tất cả công thức khi nhận giá trị thì chuyển thành số, công thức chưa nhận giá trị vẫn giữ nguyên như vậy.Ở đây chỉ link cho cột B, mình thử thay đổi không được.
 
Lần chỉnh sửa cuối:
Upvote 0
Oh hay quá, vậy muốn toàn bộ công thức trong sheet đều như vây thì sao bạn?mình muốn tất cả công thức khi nhận giá trị thì chuyển thành số, công thức chưa nhận giá trị vẫn giữ nguyên như vậy.Ở đây chỉ link cho cột B, mình thử thay đổi không được.

Nếu kết quả của công thức trả về toàn là giá trị số thì bạn thay dòng này:

Mã:
[COLOR=#000000]With ActiveSheet.Range(ActiveSheet.[a1], ActiveSheet.[a65000].End(3)).Offset(, 1)[/COLOR]

thành:

Mã:
With ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas, 1)
 
Upvote 0
Nếu kết quả của công thức trả về toàn là giá trị số thì bạn thay dòng này:

Mã:
[COLOR=#000000]With ActiveSheet.Range(ActiveSheet.[a1], ActiveSheet.[a65000].End(3)).Offset(, 1)[/COLOR]

thành:

Mã:
With ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas, 1)

Code vậy không được bạn, như vậy những công thức có sẵn mà chưa có giá trị nó cũng chuyển thành giá trị hết.
ý mình là dùng 2 cột giá trị nhập vào thì tất cả những cột công thức có sẵn (có thể lấy giá trị từ cột đó hoặc không, nhưng đều nhận giá trị tính toán ) mới chuyển thành giá trị.Còn những cột chứa công thức nhưng chưa có tham chiếu tính toán thì vẫn giữ nguyên.bạn xem file đính kèm nha.
 
Upvote 0
Code vậy không được bạn, như vậy những công thức có sẵn mà chưa có giá trị nó cũng chuyển thành giá trị hết.
ý mình là dùng 2 cột giá trị nhập vào thì tất cả những cột công thức có sẵn (có thể lấy giá trị từ cột đó hoặc không, nhưng đều nhận giá trị tính toán ) mới chuyển thành giá trị.Còn những cột chứa công thức nhưng chưa có tham chiếu tính toán thì vẫn giữ nguyên.bạn xem file đính kèm nha.

Cấu trúc dữ liệu như trong file thì bạn dùng code này:

Mã:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Application.ScreenUpdating = False
    With ActiveSheet.Range(ActiveSheet.[a1], ActiveSheet.[a65000].End(3)).Offset(, 1)[COLOR=#ff0000].Resize(, 3)[/COLOR]
      .Value = .Value
    End With
  Application.ScreenUpdating = True
End Sub

Thêm đoạn màu đỏ.

Còn cấu trúc dữ liệu khác thì "tuỳ cơ ứng biến thôi".
 
Upvote 0
Nếu kết quả của công thức trả về toàn là giá trị số thì bạn thay dòng này:

Mã:
[COLOR=#000000]With ActiveSheet.Range(ActiveSheet.[a1], ActiveSheet.[a65000].End(3)).Offset(, 1)[/COLOR]

thành:

Mã:
With ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas, 1)

Gửi các bạn!
Nếu muốn sử dụng nó như 1 sub () thì viết như thế nào? Mình copy thay đổi vùng cần sử dụng phương thức này rồi chạy sub() nó báo lỗi (tô vàng tên sub()), nên mình nghĩ code này không chạy dưới dạng sub() phải không?
Cảm ơn các bạn!
 
Upvote 0
Cấu trúc dữ liệu như trong file thì bạn dùng code này:

Mã:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  Application.ScreenUpdating = False
    With ActiveSheet.Range(ActiveSheet.[a1], ActiveSheet.[a65000].End(3)).Offset(, 1)[COLOR=#ff0000].Resize(, 3)[/COLOR]
      .Value = .Value
    End With
  Application.ScreenUpdating = True
End Sub

Thêm đoạn màu đỏ.

Còn cấu trúc dữ liệu khác thì "tuỳ cơ ứng biến thôi".
Hay quá, Resize(, 3) là số cột chuyển thành giá trị tính từ côt đầu Nếu dữ liệu mình nhập là cột thì code là:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.ScreenUpdating = False
With ActiveSheet.Range(ActiveSheet.[B1], ActiveSheet.[B65000].End(3)).Offset(, -1).Resize(, 4)
.Value = .Value
End With
Application.ScreenUpdating = True


Phải không bạn, hay quá mình cảm ơn nhiều.
 
Lần chỉnh sửa cuối:
Upvote 0
Gửi các bạn!
Nếu muốn sử dụng nó như 1 sub () thì viết như thế nào? Mình copy thay đổi vùng cần sử dụng phương thức này rồi chạy sub() nó báo lỗi (tô vàng tên sub()), nên mình nghĩ code này không chạy dưới dạng sub() phải không?
Cảm ơn các bạn!
Nếu muốn Sub thì bạn chỉ chạy code sau rồi tạo nút nhấn là ok:

Sub convert_giatri()
Application.ScreenUpdating = False
With ActiveSheet.Range(ActiveSheet.[A1], ActiveSheet.[A65000].End(3)).Offset(, 1).Resize(, 3)
.Value = .Value
End With
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Hay quá, Resize(, 3) là số cột chuyển thành giá trị tính từ côt đầu Nếu dữ liệu mình nhập là cột thì code là:

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.ScreenUpdating = False
With ActiveSheet.Range(ActiveSheet.[a1], ActiveSheet.[a65000].End(3)).Offset(, -1).Resize(, 4)
.Value = .Value
End With
Application.ScreenUpdating = True


Phải không bạn, hay quá mình cảm ơn nhiều.


Không phải đâu bạn. Nếu dữ liệu bạn nhập ở cột B mà công thức của bạn ỏ cột C-->E thì bạn chỉnh chỗ này:

Mã:
With ActiveSheet.Range(ActiveSheet.[[COLOR=#ff0000]B1[/COLOR]], ActiveSheet.[[COLOR=#ff0000]B65000[/COLOR]].End(3)).Offset(, 1).Resize(, 3)

Còn nếu dữ liệu bạn nhập ở cột B mà công thức của bạn ở cột A và C-->E thì bạn chỉnh thế này:

Mã:
With ActiveSheet.Range(ActiveSheet.[[COLOR=#FF0000]B1[/COLOR]], ActiveSheet.[[COLOR=#FF0000]B65000[/COLOR]].End(3)).Offset(, [COLOR=#ff0000]-1[/COLOR])[COLOR=#ff0000].Resize(, 5)[/COLOR]
 
Upvote 0
Đúng rùi bạn, mình hiểu rùi, ý code mình sửa là code này
"Còn nếu dữ liệu bạn nhập ở cột B mà công thức của bạn ở cột A và C-->E thì bạn chỉnh thế này:

Code:
With ActiveSheet.Range(ActiveSheet.[B1], ActiveSheet.[B65000].End(3)).Offset(, -1).Resize(, 5)

Cảm ơn bạn.Ah nhờ bạn xem dùm mình vấn đề ở bài sau được không?
http://www.giaiphapexcel.com/forum/...rm-trong-vùng-chỉ-định&p=550697#post550697
 
Upvote 0
Không phải đâu bạn. Nếu dữ liệu bạn nhập ở cột B mà công thức của bạn ỏ cột C-->E thì bạn chỉnh chỗ này:

Mã:
With ActiveSheet.Range(ActiveSheet.[[COLOR=#ff0000]B1[/COLOR]], ActiveSheet.[[COLOR=#ff0000]B65000[/COLOR]].End(3)).Offset(, 1).Resize(, 3)

Còn nếu dữ liệu bạn nhập ở cột B mà công thức của bạn ở cột A và C-->E thì bạn chỉnh thế này:

Mã:
With ActiveSheet.Range(ActiveSheet.[[COLOR=#FF0000]B1[/COLOR]], ActiveSheet.[[COLOR=#FF0000]B65000[/COLOR]].End(3)).Offset(, [COLOR=#ff0000]-1[/COLOR])[COLOR=#ff0000].Resize(, 5)[/COLOR]
Bạn xem dùm mình, khi file protect thì code bào lỗi, không chạy được.Xem file mình gửi lên nha.
 
Upvote 0

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

Back
Top Bottom