dấu mũ trong excel "^" (7 người xem)

Liên hệ QC

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

phan_huythai

Thành viên chính thức
Tham gia
15/9/12
Bài viết
60
Được thích
1
em có vấn đề nhờ các thầy, cô giúp đỡ.
dấu mũ khi ta vết trong excel là 2^2. nhưng em muốn khi mình hiện số ra dùng hàm " ct" như trong file. thì nó hiện ra 22. số ' 2" sau thì nó nhỏ hơn chỉ ở phía trên.
 

File đính kèm

em có vấn đề nhờ các thầy, cô giúp đỡ.
dấu mũ khi ta vết trong excel là 2^2. nhưng em muốn khi mình hiện số ra dùng hàm " ct" như trong file. thì nó hiện ra 22. số ' 2" sau thì nó nhỏ hơn chỉ ở phía trên.
Trả lời luôn cho bạn khỏi mất công suy nghĩ: HỔNG CÓ HÀM NÀO LÀM ĐƯỢC ĐIỀU NÀY CẢ
 
Upvote 0
Thêm vào hai dòng này vào cuối hàm ct
Mã:
    [B]ct = Replace(ct, "^ 2", Chr(178))
    ct = Replace(ct, "^ 3", Chr(179))[/B]
End Function
 
Upvote 0
Thêm vào hai dòng này vào cuối hàm ct
Mã:
    [B]ct = Replace(ct, "^ 2", Chr(178))
    ct = Replace(ct, "^ 3", Chr(179))[/B]
End Function
Tính toán trong Excel đâu chỉ có mũ 2 và 3
Trường hợp mũ 4, mũ 5... vân vân thì anh viết sao?
(nói chung là mũ.. bất kỳ)
 
Upvote 0
"Hàm thì không thể nhưng thủ tục thì được." là sao ạ?
 
Upvote 0
Các bạn rãnh tham gia viết code cho bài này đi, thư giãn ít thôi chớ nhiều quá không hay đâu.
Bài này không dùng hàm được nên phải viết thủ tục.

Đề ra nôm na là:
Có một cột là các biểu thức tính toán bằng các phép tính số học và phép lũy thừa, đã có kết quả. Bây giờ tạo một cột diễn giải cho cột chứa các phép tính đó.

Chẳng hạn cột I là biểu thức: = 2^2 + 2^3 (hiển thị 12)

Nhiệm vụ ta là viết code sao cho ở cột H hiển thị chuỗi "2 ² + 2 ³ ="

Nào mời các bạn trẻ!
 
Upvote 0
phải nghiên cứu kỹ lại xem các bạn ạ
 
Upvote 0
Tôi vừa xóa chữ ký vi phạm của bạn salesvn lần thứ nhất. Hy vọng sẽ không có lần thứ hai như vậy.
 
Upvote 0
em có cái này. mấy thầy xem được không. nhưng nếu với dấu mũ # 2,3 thì sao? em nghĩ cái này rất hay. mong các thầy phát triển thêm.
 

File đính kèm

Upvote 0
em có cái này. mấy thầy xem được không. nhưng nếu với dấu mũ # 2,3 thì sao? em nghĩ cái này rất hay. mong các thầy phát triển thêm.
Thử vầy xem:
Mã:
Public Function ct(ByVal rCel As Range)
  Dim strText As String, strOp As String
  Dim tmp1 As String, tmp2 As String, ch As String
  Dim j As Long
  Dim Arr, sAddr, p
  On Error Resume Next
  p = Array(8304, 185, 178, 179, 8308, 8309, 8310, 8311, 8312, 8313)
  strOp = "+-*/^()\"

  If rCel.HasFormula Then
    strText = rCel.Formula
    strText = Replace(strText, "=", "")
    strText = Replace(strText, " ", "")
    tmp1 = strText
    For j = 1 To Len(strOp)
      ch = Mid(strOp, j, 1)
      tmp1 = Replace(tmp1, ch, " ")
    Next
    tmp1 = WorksheetFunction.Trim(tmp1)
    Arr = Split(tmp1, " ")

    For j = 0 To UBound(Arr)
      tmp2 = Round(Evaluate(Arr(j)), 3)
      strText = Replace(strText, Arr(j), tmp2, , 1)
    Next
    For j = 1 To Len(strOp)
      ch = Mid(strOp, j, 1)
      If ch <> "(" And ch <> ")" Then
        strText = Replace(strText, ch, " " & ch & " ")
      End If
    Next
    ct = " = " & Replace(strText, "*", " x ")
    For j = 0 To 9
      ct = Replace(ct, "^ " & j, ChrW(p(j)))
    Next
  End If
    
End Function
Cho lũy thừa từ 0 đến 9 nhé
 
Upvote 0
thầy ơi. với các số lẻ thì sao? vd như 1.5, 1.6 thì sao ạ. hj %#^#$
 
Upvote 0
Mình cũng đã làm nhưng thấy không ai tham gia nên thôi!, giờ có là vui rồi!
File của mình đây, số mũ bất kỳ nên chỉ dùng Sub. Không chấp nhận mũ lại là một biểu thức nha!
 

File đính kèm

Upvote 0
bài của thầy rất hay. em nghĩ là thầy nên để nó thành 1 and-in và gán cho nó 1 cái tên thì mọi người dùng dễ hơn.
 
Upvote 0
gộp 2 bài của thầy ndu96081631 và thanhlanh thì thành 1 bài hoàn chỉnh. hjhj.
2 thầy bớt chút thời gian được không ạ.
 
Upvote 0
E cũng tham gia 1 bài góp vui
Cũng như bài của bác thanhlanh : số mũ bất kỳ nên chỉ dùng Sub

Mã:
Sub Ct()[COLOR=#000000]
[/COLOR]    Dim i As Long, k As Long, s As String, Arr
    For Each cell In Selection.Cells
        If cell.HasFormula Then
            s = cell.Formula
            With CreateObject("vbscript.regexp")
                .Global = True
                .Pattern = "^[\+|=]*"
                s = .Replace(s, "")
                .Pattern = "\^(\d+|\D+)"
                ReDim Arr(1 To .Execute(s).Count, 1 To 2)
                For Each Match In .Execute(s)
                    s = Replace(s, Match, Right(Match, Len(Match) - 1))
                    k = k + 1
                    Arr(k, 1) = Match.FirstIndex - k + 2
                    Arr(k, 2) = Len(Match) - 1
                Next
            End With
            cell.Offset(, 1) = s
            For i = 1 To UBound(Arr)
                cell.Offset(, 1).Characters(Arr(i, 1), Arr(i, 2)).Font.Superscript = True
            Next
        End If
        k = 0
    Next
End Sub

 
Lần chỉnh sửa cuối:
Upvote 0
E cũng tham gia 1 bài góp vui
Cũng như bài của bác thanhlanh : số mũ bất kỳ nên chỉ dùng Sub

Mã:
Sub Ct()[COLOR=#000000]
[/COLOR]   Dim i As Long, k As Long, s As String, Arr
    For Each cell In Selection.Cells
        If cell.HasFormula Then
            s = cell.Formula
            With CreateObject("vbscript.regexp")
                .Global = True
                .Pattern = "^[\+|=]*"
                s = .Replace(s, "")
                .Pattern = "\^(\d+|\D+)"
                ReDim Arr(1 To .Execute(s).Count, 1 To 2)
                For Each Match In .Execute(s)
                    s = Replace(s, Match, Right(Match, Len(Match) - 1))
                    k = k + 1
                    Arr(k, 1) = Match.FirstIndex - k + 2
                    Arr(k, 2) = Len(Match) - 1
                Next
            End With
            cell.Offset(, 1) = s
            For i = 1 To UBound(Arr)
                cell.Offset(, 1).Characters(Arr(i, 1), Arr(i, 2)).Font.Superscript = True
            Next
        End If
        k = 0
    Next
End Sub


Chưa biểu diễn được số mũ thập phân bạn!

----------------------------------------

Đính chính: Trong file của mình, dòng If InStr(1, "+-*/)%=", Schar) Then j = 0: n = 0
Xin được sửa lại là
If InStr(1, "+-*/)%=", Schar) And n <> 0 Then j = 0: n = 0 để biểu diễn số mũ âm.
 
Upvote 0
Ngồi ngâm cứu Code dhn46 bài #18 thấy có 1 số điểm cần sửa
1 - Khi đã kiểm tra Hasfomula thì không cần Pattern số 1 => bỏ Pattern số 1 + lấy chuỗi s không có ký tự "="
2 - Thay Pattern số 2 do không hiển thị được thập phân, dấu ngăn cách thập phân là dấu thập phân của phép tính

Code của bác thanhlanh chuyển hết dấu "." thành dấu ","

Code mới sẽ là:
Mã:
Sub Ct()
    Dim i As Long, k As Long, s As String, Arr
    For Each cell In Selection.Cells
        If cell.HasFormula Then
            s = Right(cell.Formula, Len(cell.Formula) - 1)
            With CreateObject("vbscript.regexp")
                .Global = True
                s = .Replace(s, "")
                .Pattern = "\^-*(\d|[a-zA-Z])*((\.|,)*(\d|[a-zA-Z])*)*"
                ReDim Arr(1 To .Execute(s).Count, 1 To 2)
                For Each Match In .Execute(s)
                    s = Replace(s, Match, Right(Match, Len(Match) - 1))
                    k = k + 1
                    Arr(k, 1) = Match.FirstIndex - k + 2
                    Arr(k, 2) = Len(Match) - 1
                Next
            End With
            cell.Offset(, 1) = s
            For i = 1 To UBound(Arr)
                cell.Offset(, 1).Characters(Arr(i, 1), Arr(i, 2)).Font.Superscript = True
            Next
        End If
        k = 0
    Next
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom