Xóa hàm nhưng vẫn để lại kết quả

Liên hệ QC

giaptk3

Thành viên chính thức
Tham gia
2/1/07
Bài viết
77
Được thích
211
Nghề nghiệp
Thiêt kế thủy lợi
Các bạn cho mình hỏi.
mình có một file dự toán nhưng giờ chỉ muốn lấy kết quả chứ không để lại hàm.
ví dụ như hàm Sum(a1:a3)=100 mình giờ chỉ lấy kết quả 100 chứ không để lại hàm sum nữa.
mình biết có cách là copy sau đó past bằng Values nhưng ở đây nhiều file quá mình là không hết.
thank!
 
Các bạn cho mình hỏi.
mình có một file dự toán nhưng giờ chỉ muốn lấy kết quả chứ không để lại hàm.
ví dụ như hàm Sum(a1:a3)=100 mình giờ chỉ lấy kết quả 100 chứ không để lại hàm sum nữa.
mình biết có cách là copy sau đó past bằng Values nhưng ở đây nhiều file quá mình là không hết.
thank!
Cách 1: Bạn chọn ô có hàm, nhấn F2, nhấn F9, nhấn Enter. Cách này nhanh nhưng mỗi lần chỉ được 1 ô.

Cách 2: Bạn chọn những ô có hàm, nhấn Ctrl+C, rồi nhấn chuột phải, gọi Paste Special, rồi đánh dấu vào ô Value, nhấn OK. Cách này hơi lâu nhưng được một lần nhiều ô.
 
Lần chỉnh sửa cuối:
Bạn chọn ô có hàm, nhấn F2, nhấn F9, nhấn Enter.
Bác ơi! Ở đây "Nhiều file quá!" @giaptk3: Bạn dùng thử code này xem. Nhưng nhớ để 1 bản sao lưu file đó trước nha kẻo sai định dạng hay gì đó thì mệt lắm đó. Mà bạn chỉ lấy vài ô thôi hay nguyên bản tính vậy, và các vị trí (nếu lấy vào ô thôi!) có giống nhau ở các bảng tính không? Ở đây mình lấy hết bản tính luôn.
PHP:
Sub thu() For i = 1 To Sheets.Count     Sheets(i).Select     Cells.Select     Selection.Copy     Range("A1").Select     Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _         :=False, Transpose:=False Next Application.CutCopyMode = False End Sub
Thân
 
Lần chỉnh sửa cuối:
làm rồi mà không được bác ơi! em lấy nguyên cả bảng luôn. nhưng trong bảng đó có nhiều công thức khác nhau.
em chuyển file lên bác chỉ giùm
thank
 

File đính kèm

  • CHO RO2.rar
    111.2 KB · Đọc: 45
Cách 2: Bạn chọn những ô có hàm, nhấn Ctrl+C, rồi nhấn chuột phải, gọi Paste Special, rồi đánh dấu vào ô Value, nhấn OK. Cách này hơi lâu nhưng được một lần nhiều ô.

Bạn có thể chọn một lúc tất cả các công thức trong bảng tính: Ctrl + G sau đó chon Special và chọn công thức. sau đó bạn làm tiếp như cách trên
 
nếu không bạn có thể chạy code sau là được:
Sub chay()
For i = 1 To Sheets.Count
Sheets
(i).
Select
Selection.SpecialCells(xlCellTypeFormulas, 23).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
next i
End Sub
 
Xin lỗi cách trên vẫn chưa ổn, nếu theo yêu cầu của bạn thì chỉ việc chọn cả bảng tính sau đó chon copy và dán giá trị là được.
hoặc bạn chép code sau vào thisWorkbook sau đó cứ chọn sheet nào thì toàn bộ công thức ở sheet đó sẽ không còn nữa mà thay bằng giá trị mà bạn mong muốn:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub
 
Bạn vào Edit => Goto => GoTo Special => Fomulas nó sẽ đánh dấu hết các ô có công thức. Sau đó bạn vào Copy vào dán theo kiểu Special Value.
 
Xin lỗi cách trên vẫn chưa ổn, nếu theo yêu cầu của bạn thì chỉ việc chọn cả bảng tính sau đó chon copy và dán giá trị là được.
hoặc bạn chép code sau vào thisWorkbook sau đó cứ chọn sheet nào thì toàn bộ công thức ở sheet đó sẽ không còn nữa mà thay bằng giá trị mà bạn mong muốn:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Cells.Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End Sub

Không thể cứ mỗi lần SheetActive lại làm như vậy được.

1. Khi Sheet Active, phải kiểm tra xem trong sheet đó có công thức hay không ??
2. Nếu không thì thoát
3. Nếu có thì thực hiện trong những Cell có công thức thôi : Lấy giá trị, bỏ công thức

Thân!
 
Ai lại copy, paste tùm lum cho mệt thế!
Tôi đề xuất cách này:
PHP:
Sub ConvertFor2Val()
 Dim Sh As Worksheet, Rng As Range
 On Error Resume Next
 For Each Sh In ThisWorkbook.Worksheets
   Set Rng = Sh.Cells.SpecialCells(3, 23)
   Rng.Value = Rng.Value
 Next Sh
End Sub
Bảo đãm nhanh hơn!
 
Vẫn chưa được đâu bạn ạ, như thế tại sheets("TH chi phÝ XD") sẽ không còn kết quả nữa, bạn thử lại xem thế nào nhé.
 
Vẫn chưa được đâu bạn ạ, như thế tại sheets("TH chi phÝ XD") sẽ không còn kết quả nữa, bạn thử lại xem thế nào nhé.
Xin lổi, chưa test kỹ!
Vậy thì cái này:
PHP:
Sub ConvertFor2Val()
 Dim Sh As Worksheet, Rng As Range
 For Each Sh In ThisWorkbook.Worksheets
   Set Rng = Sh.UsedRange
   Rng.Value = Rng.Value
 Next Sh
End Sub
Càng gọn
Các bạn chú ý: Nếu dùng SpecialCells(3,23) thì không thể copy được đâu nha! Vì chức năng copy của Excel không cho phép copy 1 vùng không liên tục
 
Xin hướng dẫn thêm về dòng lệnh UsedRange là gì và có tác dụng gì. Nếu có thể, xin thêm vài ví dụ trong việc ứng dụng nó vào VBA (tức là các trường hợp). Cảm ơn bác nhiều. Thân.
 
Lần chỉnh sửa cuối:
Xin hướng dẫn thêm về dòng lệnh UsedRange là gì và có tác dụng gì. Nếu có thể, xin thêm vài ví dụ trong việc ứng dụng nó vào VBA (tức là các trường hợp).
Cảm ơn bác nhiều.
Thân.
Cái này tôi không rành lắm! Bạn có thể xem bài viết chi tiết của sư phụ SA_DQ
Nhưng tôi hiểu nôm na thế này: Đó là những vùng có dử liệu và cả những vùng mà bạn đã từng đặt dử liệu vào, (dù hiện giờ đã xóa đi... tính luôn các cell đã từng Format gì đó)
Bạn có thể giã lập dử liệu vào chục dòng rồi test với code:
PHP:
Sub Test()
   Dim Rng As Range
   Set Rng = ActiveSheet.UsedRange
   Rng.Select
End Sub
Xem thử nó chọn cái gì?
Tiếp tục thêm dử liệu, Format cell, tô màu, xóa bớt rồi chạy code ----> Từ đó suy ra được "Cái theo ý bạn hiểu"
Chử Used cũng đã nói lên toàn bộ ý nghĩa rồi: ĐÃ DÙNG
Returns a Range object that represents the used range on the specified worksheet. Read-only.
Tôi cũng đã từng thử nghiệm theo cách này đấy!
 
Lần chỉnh sửa cuối:
Theo như cái ý mà em mới học được đó! Tức là ở cái ô cuối cùng của bản tính mà mình đã làm trước đó nhưng em đã từng quét 1 vùng 10x10 (tính từ ô đó trở lại) rồi bấm phải chuột chọn Delete. Cũng có nghĩa là đã xóa hết tất cả các định dạng ở ô cuối cùng đó rồi. Nhưng sao lệnh này vẫn còn tác dụng lên nó. Vậy em đặt ra câu hỏi: Có phải Excel luôn lưu lại cái nơi cuối cùng ấy không? Và có cách nào để xóa đi cái vị trí cuối cùng đó để trở về trạng thái chưa làm gì ở ô đó (hay nói rằng ô đó trở thành "trinh nguyên" như các ô chưa bao giờ tác động) không? Thân.
 
Lần chỉnh sửa cuối:
\Và có cách nào để xóa đi cái vị trí cuối cùng đó để trở về trạng thái chưa làm gì ở ô đó (hay nói rằng ô đó trở thành "trinh nguyên" như các ô chưa bao giờ tác động) không?
Thân.
Có thể là có cách:
Ctrl + A, Click phải chuột chọn Delete là xong!
Cái UsedRange này cũng có lý lắm nha! Bạn có thể dùng nó để xác định những cell có chứa dử liệu nhăng nhít nắm tít tận cùng dòng cuối cùng hay đâu đó trên bảng tính
 
À, xin lỗi nha em bị nhằm rồi! Nó chỉ quét vùng dữ liệu chứa giá trị thôi! Sorry! Thân.
 
Lần chỉnh sửa cuối:
Xin bổ sung thêm cho hàm của bạn ndtdlhagiang để có thể khỏi mất công copy hàm vào từng file mà chỉ cần cho vào 1 workbook. Sau đó muốn xóa công thức cho workbook nào thì active workbook đó rồi chạy hàm sau:
( Nếu xóa công thức theo các điều kiện khác thì sửa hàm 1 ít là được)

Private Sub UnLink()
Dim Data As Object, er As Excel.Range, ws As Excel.Worksheet
Dim i%, j%

For Each ws In ActiveWorkbook.Worksheets
ws.Select
Set Data = ws.UsedRange.Cells
For i = 1 To Data.Rows.Count
For j = 1 To Data.Columns.Count
Set er = Data.Cells(i, j)
If Left(er.Formula, 1) = "=" Then
er.Value = er.Value
End If
Next j
Next i
Next ws
End Sub
 
Lần chỉnh sửa cuối:
làm rồi mà không được bác ơi! em lấy nguyên cả bảng luôn. nhưng trong bảng đó có nhiều công thức khác nhau.
em chuyển file lên bác chỉ giùm
thank

Chào bạn . Có phải bạn muốn lấy cả form và giá trị theo file ?
Bạn chọn hết các côt chứa dữ liêu copy sang bên cạnh sau đó bấm chuột phải chọn paste special chọn values and number format sau đó bấm OK , kết quả sẽ cho nguyên đai nguyên nguyên kiện còn công rhức sẽ mất hết
thân
 

File đính kèm

  • CHO RO2.zip
    211.1 KB · Đọc: 9
Web KT
Back
Top Bottom