Xin chỉnh dùm code để làm superscript và subscript

Liên hệ QC

thanhems

Thành viên mới
Tham gia
9/6/09
Bài viết
29
Được thích
2
Em có một loạt công thức đại loại như sau trong file excel:
1365[SUP]+10[/SUP] x 430[SUP]+10[/SUP] x 17
Mỗi một dòng như thế sẽ nằm trong một ô, vấn đề em cần ở đây là làm cách nào để tạo superscript nhanh chứ mỗi lần đánh đơn hàng mất rất nhiều thời gian để tô đen từng cái, rồi vào menu chọn superscript.

Em không rành VBA, nhưng có lên mạng và tìm được đoạn code sau:
Private Const CHAR_SUP As String = "^"
Private Const CHAR_SUB As String = "|"

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub
If IsNumeric(Target.Value) Then Exit Sub

'Look for SUPERSCRIPT character
If InStr(1, Target.Value, CHAR_SUP) > 1 Then
SuperScript Target, InStr(1, Target.Value, CHAR_SUP)
End If

'Look for SUBSCRIPT character
If InStr(1, Target.Value, CHAR_SUB) > 1 Then
SubScript Target, InStr(1, Target.Value, CHAR_SUB)
End If

End Sub
Private Sub SuperScript(ByVal Target As Range, ByVal iPosition As Integer)
Target.Characters(Start:=iPosition + 1, Length:=1).Font.SuperScript = True
Target.Characters(Start:=iPosition, Length:=1).Delete
End Sub
Private Sub SubScript(ByVal Target As Range, ByVal iPosition As Integer)
Target.Characters(Start:=iPosition + 1, Length:=1).Font.SubScript = True
Target.Characters(Start:=iPosition, Length:=1).Delete
End Sub

Đoạn code này sẽ thay:
abcd^efg thành abcd[SUP]e[/SUP]fg
abcd|efg thành abcd[SUB]e[/SUB]fg
Đoạn code này nói chung là nó chạy, nhưng nhược điểm của nó là chỉ có tác dụng cho 1 ký tự/số đầu tiên, xin mọi người chỉ dùm làm cách nào cho nó có tác dụng 3 ký tự sau "^" và sau "|". Ví dụ như
abcd^efghi thì sẽ là abcd[SUP]efg[/SUP]hi.

Cám ơn mọi người
 
Lần chỉnh sửa cuối:
Private Sub SuperScript(ByVal Target As Range, ByVal iPosition As Integer)
Target.Characters(Start:=iPosition + 1, Length:=3).Font.SuperScript = True
Target.Characters(Start:=iPosition, Length:=1).Delete
End Sub
Private Sub SubScript(ByVal Target As Range, ByVal iPosition As Integer)
Target.Characters(Start:=iPosition + 1, Length:=3).Font.SubScript = True
Target.Characters(Start:=iPosition, Length:=1).Delete
End Sub

Bạn thay số 1 thành số 3 (màu đỏ)
 
Upvote 0
Làm được rồi mấy bác ơi, em thêm thế này có ổn ko các bác, chỉ sợ code nó không ổn định
Private Sub SuperScript(ByVal Target As Range, ByVal iPosition As Integer)
Target.Characters(Start:=iPosition + 1, Length:=1).Font.SuperScript = True
Target.Characters(Start:=iPosition + 2, Length:=1).Font.SuperScript = True
Target.Characters(Start:=iPosition + 3, Length:=1).Font.SuperScript = True

Target.Characters(Start:=iPosition, Length:=1).Delete
 
Upvote 0
Private Sub SuperScript(ByVal Target As Range, ByVal iPosition As Integer)
Target.Characters(Start:=iPosition + 1, Length:=3).Font.SuperScript = True
Target.Characters(Start:=iPosition, Length:=1).Delete
End Sub
Private Sub SubScript(ByVal Target As Range, ByVal iPosition As Integer)
Target.Characters(Start:=iPosition + 1, Length:=3).Font.SubScript = True
Target.Characters(Start:=iPosition, Length:=1).Delete
End Sub

Bạn thay số 1 thành số 3 (màu đỏ)
Xin bác xem lại dùm em, em nhập 12^123 thì nó ra là
12[SUP]3[/SUP]
 
Upvote 0
Private Sub SuperScript(ByVal Target As Range, ByVal iPosition As Integer)
Target.Characters(Start:=iPosition + 1, Length:=1).Font.SuperScript = True
Target.Characters(Start:=iPosition + 2, Length:=1).Font.SuperScript = True
Target.Characters(Start:=iPosition + 3, Length:=1).Font.SuperScript = True

Target.Characters(Start:=iPosition, Length:=1).Delete
E muốn nó là 12[SUP]123[/SUP] cơ, tại vì nội dung em đánh là có 3 ký tự như 1365[SUP]+10[/SUP] x 430[SUP]+10[/SUP] x 17
. Bác có thể coi dùm em code trên đã ổn chưa bác, em thêm vào 2 dòng nữa và thay thành số +2 và +3 đó.
 
Upvote 0
Bạn làm như trên thì kết quả đúng rồi nhưng phải thêm 2 dòng cho SuperScrip và 2 dòng cho SubScript (=4 dòng) . Trong lúc ở #2 , bạn không để ý à , sở dĩ cho kết qủasai như ở #3 là vì bạn viết số 3 ở dòng dưới rồi (Length:=1) . Một bài toán có nhiều cách giải, phải chú ý cách nào gọn hơn chứ
 
Upvote 0
Web KT
Back
Top Bottom