Nhờ các Bác xem giúp đoạn code chuyển từ chuỗi thành công thức nhưng KQ không là số!

Liên hệ QC

nguyenxuanphu

Thành viên mới
Tham gia
4/4/08
Bài viết
5
Được thích
0
Tôi có đính kèm tập tin theo bài viết này.

Mục đích của đoạn code như sau: lấy đoạn chuỗi từ "cột C" chuyển sang "cột D" và gán thêm dấu "+" và bỏ đoạn chuỗi vào dấu ngoặc đơn để thành công thức tính toán và yêu cầu cho ra giá trị là số. Nhưng khi chuyển qua "cột D" nó vẫn ở dạng chuỗi mà không ra giá trị. Chỉ khi nào chọn từng dòng, nhấn F2 rồi Enter nó mới cho ra giá trị.

Nhờ các Bác chỉ giáo giùm em. Rất cám ơn!
 

File đính kèm

Tôi có đính kèm tập tin theo bài viết này.

Mục đích của đoạn code như sau: lấy đoạn chuỗi từ "cột C" chuyển sang "cột D" và gán thêm dấu "+" và bỏ đoạn chuỗi vào dấu ngoặc đơn để thành công thức tính toán và yêu cầu cho ra giá trị là số. Nhưng khi chuyển qua "cột D" nó vẫn ở dạng chuỗi mà không ra giá trị. Chỉ khi nào chọn từng dòng, nhấn F2 rồi Enter nó mới cho ra giá trị.

Nhờ các Bác chỉ giáo giùm em. Rất cám ơn!
Không đựoc đâu! Phải dùng Evaluate mới chuyển thành kết quả đựoc
PHP:
Sub calc_chuoi()
  Dim Clls As Range
  For Each Clls In Selection
    Clls.Offset(, 1) = Evaluate(Clls.Value)
  Next
End Sub
Quét chọn C4:C8 rồi chạy code là xong!
Chú ý dấu thập phân là dấu chấm hay phẩy còn tùy thuộc vào thiết lập của từng máy nha
 
Upvote 0
Không đựoc đâu! Phải dùng Evaluate mới chuyển thành kết quả đựoc

Có thể không dùng Evaluate cũng được. Ví dụ:

Mã:
Sub calc_chuoi()
  Dim Clls As Range
  For Each Clls In Selection
    Clls.Offset(, 1).Formula = "=" & Clls.Value
  Next
End Sub

 
Upvote 0
Cả hai cách đều có báo lỗi vì chuỗi sau:
pi()*1,4^2/4
 
Upvote 0
Nhờ các Pro chú thích cho đoạn coda này (tự tính kết quả của chuổi sau khi kết thúc dấu "=" và Enter). Còn nữa, sao nó chỉ hoạt động khi chép vào code của she et? Xin cảm ơn.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub
If InStr(Target, "=") = False Then Exit Sub ' <-- sua
If InStr(Target, ": ") Then
Ta = Mid(Target, InStr(Target, ":") + 1, InStr(Target, "=") - InStr(Target, ":") - 1) '<-- sua
Tb = Replace(Ta, " ", "")
KoCoDienGiai:
On Error GoTo LOI
Tc = Replace(Tb, ",", ".")
Tc = Replace(Tc, "x", "*")
Tc = Replace(Tc, "=", "")
Khoiluong = Round(Evaluate("=" & Tc), 3)
If Right(Target, 1) = "=" Or Khoiluong <> Replace(Right(Target, Len(Target) - InStr(Target, "=")), " ", "") Then '<-- them
With Target
.Value = Left(.Value, InStr(.Value, "=")) & " " & Khoiluong '<-- sua
.Font.ColorIndex = 9
.Characters(InStr(.Value, "=") + 1, Len(.Value)).Font.ColorIndex = 5
End With
Else: '<-- them
With Target
.Font.ColorIndex = 9
.Characters(InStr(.Value, "=") + 1, Len(.Value)).Font.ColorIndex = 5
End With
Exit Sub '<-- them
End If '<-- them
Else:
Tb = Replace(Target, " ", "")
If IsNumeric(Left(Tb, 1)) Or Left(Tb, 1) = "(" Then
Tb = Left(Target, InStr(Target, "=") - 1) '<-- them
GoTo KoCoDienGiai
Else: Exit Sub
End If
End If
LOI:
Target.Characters(InStr(Target, ":") + 1, Len(Target)).Font.ColorIndex = 3
End Sub
 
Upvote 0
Cả hai cách đều có báo lỗi vì chuỗi sau:
pi()*1,4^2/4
Sai là sai ở chuỗi chứ Bác Chanh ơi. Bác thêm dấu= vào trước chuỗi là biết liền. Chết là cái dấu phảy của Bác ấy. Chuỗi ấy nhập trực tiếp cũng lỗi rồi.
 
Upvote 0
Upvote 0
Code này hay nhất và giải quyết được bài toán theo chủ đề của topic này
Hay ở chỗ nó gọn hả? Như thế này có hay hơn không?
PHP:
Sub TextToFormula()
Dim Str As String
If Selection.Count = 1 Then
    Selection.Offset(, 1).Formula = "=" & Replace(Selection.Formula, ",", ".")
    Exit Sub
End If
With Application.WorksheetFunction
    Str = "=" & Replace(Join(.Transpose(Selection), vbBack & "="), ",", ".")
    Selection.Offset(, 1).Formula = .Transpose(Split(Str, vbBack))
    Selection.Offset(, 1).Replace "=", "=", xlPart
End With
End Sub
Những bài viết kiểu như của bạn sẽ bị cho là spam đấy. Cẩn thận.
 
Upvote 0
Các Bác cho tôi hỏi thêm 1 chút: trong trường hợp vùng được chọn có nhiều cột (2 hoặc 5 cột chằng hạn), thì với yêu cầu chuyển chuỗi thành số như vấn đề đã nêu thì giải quyết như thế nào (kết quả giá trị cũng sẽ nằm ở các cột kế tiếp vùng được chọn).
Rất mong các Bác chỉ giáo, xin chân thành cám ơn!
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom