Giúp mình viết công thức chuyển từ số về kí tự ANSI và ngược lại

Liên hệ QC

hoi_joker

Thành viên mới
Tham gia
14/9/07
Bài viết
41
Được thích
17
Chào các bạn!

Mình muốn viết công thức chuyển từ số về kí tự ANSI và ngược lại với hàm CHAR

B41=072097112112121032078101119032089101097114032033
B42=Happy New Year !


Mong được các bạn trợ giúp!
 

File đính kèm

  • char list.xls
    27.5 KB · Đọc: 20
Lần chỉnh sửa cuối:
Bani xem cách này được không

Mã:
[COLOR=seagreen]'=======================================[/COLOR]
[COLOR=seagreen]'Doan ham dich chu ra ma Ascii[/COLOR]
Function ChToNum(ch As String)
Dim ktu As Long
Dim chuoi As String
For i = 1 To Len(ch)
chuoi = chuoi & Right("000" & Asc(Mid(ch, i, 1)), 3)
Next
ChToNum = chuoi
End Function
[COLOR=seagreen]'==============================[/COLOR]
[COLOR=seagreen]'Doan ham dich ma Ascii ra chu[/COLOR]
Function NumToCh(Numb As String)
Dim lg As Long
Dim ch As String
lg = Int(Len(Numb) / 3)
For i = 1 To lg
ch = ch & Chr(Mid(Numb, i * 3 - 2, 3))
Next
NumToCh = ch
End Function
[COLOR=seagreen]'===============================[/COLOR]
Xin lỗi, cách nào gọn thì dùng chứ viết công thức cho việc này mình sợ lắm.
 

File đính kèm

  • char%20list(1).xls
    42 KB · Đọc: 12
Lần chỉnh sửa cuối:
Mình góp thêm 2 hàm như sau :
Tại ô B42=SoThanhChu(B41)
Tại ô B44=ChuThanhSo(B42) để kiểm tra.

PHP:
Function SoThanhChu(rng As Range) As String
    Dim i As Long, tam As String
    For i = 1 To Len(rng) Step 3
        tam = tam & Chr(Mid(rng, i, 3))
    Next i
    tam = tam + " "
    SoThanhChu = Left(tam, Len(tam) - 1)
End Function

Function ChuThanhSo(rng As Range) As String
    Dim i As Long, tam As String
    For i = 1 To Len(rng)
        If Asc(Mid(rng, i, 1)) < 100 Then
            tam = tam & "0" & Asc(Mid(rng, i, 1))
        Else
            tam = tam & Asc(Mid(rng, i, 1))
        End If
    Next i
    ChuThanhSo = tam
End Function
 

File đính kèm

  • Copy of char list.xls
    50 KB · Đọc: 17
Lần chỉnh sửa cuối:
Mình góp thêm 2 hàm như sau :
Tại ô B42=SoThanhChu(B41)
Tại ô B44=ChuThanhSo(B42) để kiểm tra.

PHP:
Function SoThanhChu(rng As Range) As String
    Dim i As Long, tam As String
    For i = 1 To Len(rng) Step 3
        tam = tam & Chr(Mid(rng, i, 3))
    Next i
    tam = tam + " "
    SoThanhChu = Left(tam, Len(tam) - 1)
End Function

Function ChuThanhSo(rng As Range) As String
    Dim i As Long, tam As String
    For i = 1 To Len(rng)
        If Asc(Mid(rng, i, 1)) < 100 Then
            tam = tam & "0" & Asc(Mid(rng, i, 1))
        Else
            tam = tam & Asc(Mid(rng, i, 1))
        End If
    Next i
    ChuThanhSo = tam
End Function
Không hiểu chổ này:
tam = tam + " "
SoThanhChu = Left(tam, Len(tam) - 1)
Tại sao phải thêm 1 khoảng trắng vào làm chi để rồi lại phải dùng Left tách ra?
sao không là SoThanhChu = tam luôn cho rồi (bỏ đoạn tam = tam + " ")
Thêm nữa: 2 hàm này cấu trúc gần như giống nhau, sao không gộp chung vào thành 1 nhỉ?
kiểu như vầy:
PHP:
Function AsciiConvert(Text As String, Optional Meth As Boolean = False) As String
  Dim i As Long, Temp As String
  For i = 1 To Len(Text) Step IIf(Meth, 3, 1)
    If Meth Then
      Temp = Temp & Chr(Mid(Text, i, 3))
    Else
      Temp = Temp & Format(Asc(Mid(Text, i, 1)), "000")
    End If
  Next i
  AsciiConvert = Temp
End Function
Nếu bỏ qua tham số Meth hoặc cho nó = False thì đồng nghĩa ta muốn SỐ THÀNH CHỬ và ngược lại
 
Web KT
Back
Top Bottom