quoccuonghd
Thành viên hoạt động
- Tham gia
- 12/6/10
- Bài viết
- 116
- Được thích
- 7
- Giới tính
- Nam
- Nghề nghiệp
- Kỹ sư XD
Xin hỏi anh em trong diễn đàn GPE, liệu có cốt nào cho sheets để khi nhập các công thúc tính toán vẫn hiện cả diễn giải lẫn kết quả như hình đính kèm. thank's
Private Sub Worksheet_Change(ByVal Target As Range)
Dim pos, kq As Long, chuoi As String
On Error GoTo thoat
Application.EnableEvents = False
If Not Intersect(Target, [E2:E10000]) Is Nothing Then
pos = InStr(1, Target, ":", vbBinaryCompare)
If pos Then
chuoi = Mid(Target.Value, InStr(1, Target, ":", vbBinaryCompare), Len(Target))
Else
chuoi = Target.Value
End If
kq = Cong(chuoi)
If kq Then Target.Value = Target.Value & " = " & kq
End If
thoat:
Application.EnableEvents = True
End Sub
Function Cong(kytu As String)
Dim objReg As Object
Set objReg = CreateObject("vbscript.regexp")
objReg.Pattern = "[^\d*/()+-]"
objReg.Global = True
Application.Calculation = False
Cong = Evaluate(objReg.Replace(kytu, vbNullString))
Application.Calculation = True
Set objReg = Nothing
End Function
Bạn ơi mình làm rồi, không ra kết quả tính, mình gửi file lên bạn viết lại cốt hộ nhébạn biết xài vba không?
bạn nhấn phím Alt F11 (mở cửa sổ vba)
bên tay trái màn hình, bạn thấy các sheet, nhấp chọn sheet mà cái bảng trên nằm ở sheet đó
chép đoạn code này vào)
Mã:Private Sub Worksheet_Change(ByVal Target As Range) Dim pos, kq As Long, chuoi As String On Error GoTo thoat Application.EnableEvents = False If Not Intersect(Target, [E2:E10000]) Is Nothing Then pos = InStr(1, Target, ":", vbBinaryCompare) If pos Then chuoi = Mid(Target.Value, InStr(1, Target, ":", vbBinaryCompare), Len(Target)) Else chuoi = Target.Value End If kq = Cong(chuoi) If kq Then Target.Value = Target.Value & " = " & kq End If thoat: Application.EnableEvents = True End Sub
sau đó nhấp vào "insert" trên thành công cụ chọn module
chép đoạn code này vào
Mã:Function Cong(kytu As String) Dim objReg As Object Set objReg = CreateObject("vbscript.regexp") objReg.Pattern = "[^\d*/()+-]" objReg.Global = True Application.Calculation = False Cong = Evaluate(objReg.Replace(kytu, vbNullString)) Application.Calculation = True Set objReg = Nothing End Function
Bạn ơi mình làm rồi, không ra kết quả tính, mình gửi file lên bạn viết lại cốt hộ nhé
Sao minh ko tai duoc file ban dinh kem xuong nhi?
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo thoat
Application.EnableEvents = False
Dim vtd, vtc, cd, kq As Long, chuoi, chuoi1 As String
Dim objReg As Object
Set objReg = CreateObject("vbscript.regexp")
objReg.Pattern = "[^\d().*/+-]"
objReg.Global = True
If Not Intersect(Target, [E2:E10000]) Is Nothing Then
vtc = InStr(1, Target, "=", 0)
vtd = InStr(1, Target, ":", 0)
cd = Len(Target.Value)
chuoi1 = Target.Value
If vtc Then chuoi1 = Mid(Target.Value, 1, vtc - 1): cd = vtc - vtd
If vtd Then chuoi = Mid(chuoi1, vtd, cd)
chuoi = Replace(chuoi, ",", ".")
chuoi = Format(Evaluate(objReg.Replace(chuoi, vbNullString)), "#,##0.00")
Target.Value = chuoi1 & " = " & chuoi
End If
thoat:
Application.EnableEvents = True
Set objReg = Nothing
End Sub
=======================================tôi gặp phải vấn đề nan giải là cái định dạng dấu chấm "." và dấu phẩy "," để phân biệt số lẻ (decimal)
ở máy tôi tôi cài dấu chấm là định dạng số lẻ, kết quả là ok, nhưng khi đổi sang dấu "," thì thực sự bó tay
để test thử kết quả, bạn thử như sau:
bạn vào control panel cài lại decimal là dấu "."
khi bạn nhập liệu hoặc sửa chữa trong cell, nó sẻ ra kết quả tính cho bạn
=================
ok, có vẻ như tôi đã giải quyết được nó, bạn kiểm tra lại thử xem
bạn ơi bạn có thể hướng dẫn cụ thể hơn được không.bình thường mà.
ko tải đưỡ thì chép code này vào sheet1
bỏ đoan code trong module điMã:Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo thoat Application.EnableEvents = False Dim vtd, vtc, cd, kq As Long, chuoi, chuoi1 As String Dim objReg As Object Set objReg = CreateObject("vbscript.regexp") objReg.Pattern = "[^\d().*/+-]" objReg.Global = True If Not Intersect(Target, [E2:E10000]) Is Nothing Then vtc = InStr(1, Target, "=", 0) vtd = InStr(1, Target, ":", 0) cd = Len(Target.Value) chuoi1 = Target.Value If vtc Then chuoi1 = Mid(Target.Value, 1, vtc - 1): cd = vtc - vtd If vtd Then chuoi = Mid(chuoi1, vtd, cd) chuoi = Replace(chuoi, ",", ".") chuoi = Format(Evaluate(objReg.Replace(chuoi, vbNullString)), "#,##0.00") Target.Value = chuoi1 & " = " & chuoi End If thoat: Application.EnableEvents = True Set objReg = Nothing End Sub
bạn ơi bạn có thể hướng dẫn cụ thể hơn được không.
bạn biết xài vba không?
bạn nhấn phím Alt F11 (mở cửa sổ vba)
bên tay trái màn hình, bạn thấy các sheet, nhấp chọn sheet mà cái bảng trên nằm ở sheet đó
chép đoạn code này vào)
Mã:Private Sub Worksheet_Change(ByVal Target As Range) Dim pos, kq As Long, chuoi As String On Error GoTo thoat Application.EnableEvents = False If Not Intersect(Target, [E2:E10000]) Is Nothing Then pos = InStr(1, Target, ":", vbBinaryCompare) If pos Then chuoi = Mid(Target.Value, InStr(1, Target, ":", vbBinaryCompare), Len(Target)) Else chuoi = Target.Value End If kq = Cong(chuoi) If kq Then Target.Value = Target.Value & " = " & kq End If thoat: Application.EnableEvents = True End Sub
sau đó nhấp vào "insert" trên thành công cụ chọn module
chép đoạn code này vào
Mã:Function Cong(kytu As String) Dim objReg As Object Set objReg = CreateObject("vbscript.regexp") objReg.Pattern = "[^\d*/()+-]" objReg.Global = True Application.Calculation = False Cong = Evaluate(objReg.Replace(kytu, vbNullString)) Application.Calculation = True Set objReg = Nothing End Function
sao mình cũng làm như thế mà k được vậy bạn
Bạn ơi, cái lỗi này là do đâu.bạn biết xài vba không?
bạn nhấn phím Alt F11 (mở cửa sổ vba)
bên tay trái màn hình, bạn thấy các sheet, nhấp chọn sheet mà cái bảng trên nằm ở sheet đó
chép đoạn code này vào)
Mã:Private Sub Worksheet_Change(ByVal Target As Range) Dim pos, kq As Long, chuoi As String On Error GoTo thoat Application.EnableEvents = False If Not Intersect(Target, [E2:E10000]) Is Nothing Then pos = InStr(1, Target, ":", vbBinaryCompare) If pos Then chuoi = Mid(Target.Value, InStr(1, Target, ":", vbBinaryCompare), Len(Target)) Else chuoi = Target.Value End If kq = Cong(chuoi) If kq Then Target.Value = Target.Value & " = " & kq End If thoat: Application.EnableEvents = True End Sub
sau đó nhấp vào "insert" trên thành công cụ chọn module
chép đoạn code này vào
Mã:Function Cong(kytu As String) Dim objReg As Object Set objReg = CreateObject("vbscript.regexp") objReg.Pattern = "[^\d*/()+-]" objReg.Global = True Application.Calculation = False Cong = Evaluate(objReg.Replace(kytu, vbNullString)) Application.Calculation = True Set objReg = Nothing End Function