Nếu các ký tự ở vùng 1 có tên vd. là Hichic thì ký tự nhìn có vẻ giống như thế nhưng ở vùng 2 sẽ có tên là Fullwidth Hichic. Vd. "A" hàng ngày ta gõ trên bàn phím có tên là LATIN CAPITAL LETTER A, còn "A" nhái kia có tên là FULLWIDTH LATIN CAPITAL LETTER A.
Từ đâu có 65248? Dễ thấy 65248 = &HFEE0.
Nhìn hình 1 ta thấy "A" có điểm mã là &H41 (hex), còn nhìn hình 2 thấy "A" nhái có điểm mã là &HFF21. 2 ký tự này có điểm mã cách nhau đúng &HFEE0 (65248) - &H41 + &HFEE0= &HFF21
----------
Code convert trong bài #10 chưa chuẩn. Cụ thể vd. kết quả cho B177 là "SI-E2軸筒(更新型)" (trước ( và sau ) nhìn thấy "dãn cách") trong khi phải là "SI-E2軸筒(更新型)", hoặc kết quả cho B161 là "STM-EC/T" trong khi phải là "STM-EC/T".
Tôi đề nghị như sau, không dám khẳng định là chuẩn nhưng ai thích thì thử.
Mã:
Sub convert()
Dim k As Long, r As Long, c As Long, code As Long, s As String, text As String, mot_o As Boolean, vung As Range, o_dau As Range, dulieu()
On Error Resume Next
Set vung = Application.InputBox("Hay chon vung du lieu can bien doi", Type:=8)
If vung Is Nothing Then Exit Sub
Set o_dau = Application.InputBox("Hay chon o dau tien cho ket qua", Type:=8)
If o_dau Is Nothing Then Exit Sub
On Error GoTo 0
If vung.Count = 1 Then mot_o = True
If mot_o Then
dulieu = vung.Resize(2).Value
Else
dulieu = vung.Value
End If
Set o_dau = o_dau(1)
For r = 1 To UBound(dulieu, 1) + mot_o
For c = 1 To UBound(dulieu, 2)
text = ""
s = dulieu(r, c)
For k = 1 To Len(s)
code = AscW(Mid(s, k, 1))
If code > &HFF00 And code < &HFF5F Then
text = text & Chr(code + 288)
Else
text = text & ChrW(code)
End If
Next k
dulieu(r, c) = text
Next c
Next r
o_dau.Resize(UBound(dulieu, 1) + mot_o, UBound(dulieu, 2)).Value = dulieu
End Sub