Muốn biết các kí tự liên quan đến ChrW() thì phải làm thế nào

Liên hệ QC

LinDan

Thành viên tiêu biểu
Tham gia
8/2/12
Bài viết
412
Được thích
111
Tôi thấy trong rất nhiều bài tập dùng đến Chrw(), nhưng tôi không biết từng ứng với từng chỉ số trong dấu () thì nó có nghĩa là gì?

Ví dụ
PHP:
Function Thutrongtuan(ByVal bDate As Date) As String
Dim Thu(7)
Thu(1) = ChrW(67)+ChrW(104)+ChrW(7911)+ChrW(32)+ChrW(78)+Ch rW(104)+ChrW(7853)+ChrW(116)
Thu(2) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(104)+C hrW(97)+ChrW(105)
Thu(3) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(98)+Ch rW(97)
Thu(4) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(116)+C hrW(432)
Thu(5) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(110)+C hrW(259)+ChrW(109)
Thu(6) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(115)+C hrW(225)+ChrW(117)
Thu(7) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(98)+Ch rW(7843)+ChrW(121)

Thutrongtuan = Thu(Weekday(bDate))
End Function

Thì ChrW(67)=?
ChrW(7911)=? Để biết nó là gì thì làm thế nào.

Xin trân trọng cảm ơn
 
Tôi thấy trong rất nhiều bài tập dùng đến Chrw(), nhưng tôi không biết từng ứng với từng chỉ số trong dấu () thì nó có nghĩa là gì?

Ví dụ
PHP:
Function Thutrongtuan(ByVal bDate As Date) As String
Dim Thu(7)
Thu(1) = ChrW(67)+ChrW(104)+ChrW(7911)+ChrW(32)+ChrW(78)+Ch rW(104)+ChrW(7853)+ChrW(116)
Thu(2) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(104)+C hrW(97)+ChrW(105)
Thu(3) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(98)+Ch rW(97)
Thu(4) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(116)+C hrW(432)
Thu(5) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(110)+C hrW(259)+ChrW(109)
Thu(6) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(115)+C hrW(225)+ChrW(117)
Thu(7) = ChrW(84)+ChrW(104)+ChrW(7913)+ChrW(32)+ChrW(98)+Ch rW(7843)+ChrW(121)

Thutrongtuan = Thu(Weekday(bDate))
End Function

Thì ChrW(67)=?
ChrW(7911)=? Để biết nó là gì thì làm thế nào.

Xin trân trọng cảm ơn
Giống hàm CHAR trong bảng tính thôi.
Có điều ChrW trong VBA làm việc được với các ký tự có char code > 255 (chẳng hạn là ký tự tiếng Việt Unicode có dấu )
Lấy 1 ví dụ:
- Bạn muốn dùng code điền chuổi "Cộng hòa" vào cell A1
- Chuổi này không thể gõ trực tiếp vào cửa số VBA
- Vì thế ta dùng ChrW để làm trung gian
- Trong chuổi này, có ký tự "ộ" là không thể hiện được, thay nó bằng ChrW(7897) ---> Số 7897 là Char code của ký tự "ộ"
Code như sau:
PHP:
Sub Test
  Range("A1").Value = "C" & ChrW(7897) & "ng hòa"
End Sub
Ghi chú: Để biết char code của 1 ký tự, dùng hàm AscW (ngược với hàm ChrW)
--------------------
Nói thêm về code mà bạn cho ở trên! Nó dùng để biến 1 Date thành thứ trong tuần (tiếng Việt)
Code này thật sự hơi.. thừa vì công thức cũng làm được. Ví dụ =TEXT(A1,"[$-42A]dddd") ---> Với A1 là ngày tháng
 
Lần chỉnh sửa cuối:
Upvote 0
Xin bác lấy ví dụ viết Code cụ thể để tôi hiểu hơn về Để biết char code của 1 ký tự, dùng hàm AscW (ngược với hàm ChrW)

Ví dụ ChrW(67) là gì thì viết Code kiểm tra nó như thế nào, vì hiện tại tôi chưa biết viết ra sao?
 
Upvote 0
Xin bác lấy ví dụ viết Code cụ thể để tôi hiểu hơn về Để biết char code của 1 ký tự, dùng hàm AscW (ngược với hàm ChrW)

Ví dụ ChrW(67) là gì thì viết Code kiểm tra nó như thế nào, vì hiện tại tôi chưa biết viết ra sao?
Chép code sau vào và xem sheet1 thế nào.
Chạy code 1 trước sau đó code 2
PHP:
Const CodUni = "225  224  7843 227  7841 259  7855 7857 7859 7861 7863 226  7845 7847 7849 7851 7853 233  232  7867 7869 7865 234  7871 7873 7875 7877 7879 237  236  7881 297  7883 243  242  7887 245  7885 244  7889 7891 7893 7895 7897 417  7899 7901 7903 7905 7907 250  249  7911 361  7909 432  7913 7915 7917 7919 7921 253  7923 7927 7929 7925 273  193  193  192  192  7842 7842 195  195  7840 7840 258  258  7854 7854 7856 7856 7858 7858 7860 7860 7862 7862 194  194  7844 7844 7846 7846 7848 7848 7850 7850 7852 7852 201  201  200  200  7866 7866 7868 7868 7864 7864 202  202  7870 7870 7872 7872 7874 7874 7876 7876 7878 7878 205  204  7880 296  7882 211  211  210  210  7886 7886 213  213  7884 7884 212  212  7888 7888 7890 7890 7892 7892 7894 7894 7896 7896 416  7898 7898 7900 7900 7902 7902 7904 7904 7906 7906 218  218  217  217  7910 7910 360  360  7908 7908 431  7912 7912 7914 7914 7916 7916 7918 7918 7920 7920 221  221  7922 7922 7926 7926 7928 7928 7924 272  "
Dim sTxt$, aSplit, Arr
Sub Chr01()
Cells.ClearContents
sTxt = WorksheetFunction.Trim(CodUni)
sTxt = Replace(sTxt, " ", vbBack)
aSplit = Split(sTxt, vbBack)
ReDim Arr(1 To UBound(aSplit) + 1, 1 To 1)
For i = 0 To UBound(aSplit)
  Arr(i + 1, 1) = ChrW(aSplit(i))
Next i
[A1].Resize(UBound(aSplit) + 1) = WorksheetFunction.Transpose(aSplit)
[B1].Resize(i, 1) = Arr
End Sub
Sub Chr02()
aSplit = [B1].Resize(192, 1).Value
[B1].Resize(192, 1).Select
ReDim Arr(1 To UBound(aSplit), 1 To 1)
For i = 1 To UBound(aSplit)
  Arr(i, 1) = AscW(aSplit(i, 1))
Next i
[C1].Resize(UBound(aSplit), 1) = Arr

End Sub
 
Upvote 0
Xin bác lấy ví dụ viết Code cụ thể để tôi hiểu hơn về Để biết char code của 1 ký tự, dùng hàm AscW (ngược với hàm ChrW)

Ví dụ ChrW(67) là gì thì viết Code kiểm tra nó như thế nào, vì hiện tại tôi chưa biết viết ra sao?
Đơn giản là bạn cứ nghiên cứu hàm CHAR và hàm CODE trên bảng tính, tự nhiên sẽ hiểu (vì 2 hàm này tương đương với hàm Chr và Asc trong VBA)
----------
Ví dụ để nghiên cứu hàm CHAR và CODE:
- Gõ số thứ tự từ 1 đến 255 vào cột A (từ A1 đến A255)
- Gõ công thức =CHAR(A1) vào cell B1, kéo fill xuống đến B255
- Gõ công thức =CODE(B1) vào cell C1, kéo fill xuống đến C255
Xem kết quả, tự nghiệm ra vấn đề
 
Upvote 0
Xin bác lấy ví dụ viết Code cụ thể để tôi hiểu hơn về Để biết char code của 1 ký tự, dùng hàm AscW (ngược với hàm ChrW)

Ví dụ ChrW(67) là gì thì viết Code kiểm tra nó như thế nào, vì hiện tại tôi chưa biết viết ra sao?

Nói thế này không biết bạn có hiểu không.
Trước hết về mã hóa. vd. bạn với cô bạn thân nghĩ ra được 1 bảng mã để chỉ riêng 2 người biết. Khi viết thư cho nhau thì 2 bạn dùng mã. Qui ước với nhau chữ a thì tớ viết là 1, b - 2, c - 3 v...v. Khi bạn nhận được thư thì bạn chuyển 1 thành a, 2 thành b v...v rồi đọc thư. Như vậy 2 bạn đã có 1 bảng mã mà trong đó gán cho a, b, c những số 1, 2, 3 ...
Khi người ta mã mọi ký tự có trong thiên hạ (các chữ cái có trong mọi thứ tiếng, các biểu tượng dùng trong toán, lý hóa ...., trong âm nhạc ...) thì người ta cũng gán cho mỗi ký tự một số khác nhau, số đó gọi là điểm mã (code point) của ký tự. Bảng mã đó là bảng mã Unicode. Tất nhiên việc gán này do 1 tổ chức quốc tế thống nhất và qui định. vd. ký tự "C" có điểm mã là 67. Khi ta có điểm mã của 1 ký tự thì ta cũng biết ký tự đang nói đến là ký tự nào (giống như bạn nhận được từ cô bạn thân số 3 thì bạn biết là cô ta gửi cho bạn ký tự "c")
Hàm ChrW(điểm_mã) sẽ trả về (cung cấp) cho bạn "ký tự" mà theo bảng mã nó có điểm mã (là con số) là điểm_mã. Hàm AscW(ký_tự) cung cấp cho bạn "điểm mã" (tức con số) của ký tự "ký_tư"
Tóm lại ChrW(x) cung cấp cho bạn "ký tự" mà điểm mã của nó x, hàm AscW("x") cung cấp "điểm mã" của ký tự "x"
Để biết ChrW(67) trả về ký tự nào thì có nhiều cách. Nếu bạn đang có Excel thì bạn có thể viết:
ActiveSheet.Range("A1").Value = ChrW(67)
Bạn sẽ nhìn thấy trong ô A1 có ký tự C. Vậy C trong bảng mã Unicode có "điểm mã" là 67.
Nếu bạn không có Excel thì vd. bạn tìm đọc TCVN6909, bạn sẽ thấy vd. "đ" có điểm mã là 273.
Như vậy bạn có tương quan "đ" <--> 273. Tức AscW("đ") = 273 và ChrW(273) = "đ"
Tức AscW(ChrW(273)) = 273, ChrW(AscW("đ")) = "đ"
v...v
Để có được tương quan "ký tự" <--> "điểm mã" của tất cả các ký tự Việt thì bạn làm như bạn ở trên hoặc đọc TCVN6909. Cũng còn nhiều cách nữa.
 
Upvote 0
Bản thân tôi thấy sử dụng Code của thày Phạm Duy Long là tiện nhất

PHP:
Function UniVba(TxtUni As String) As String
    If TxtUni = "" Then
        UniVba = """"""
    Else
        TxtUni = TxtUni & " "
        If AscW(Left(TxtUni, 1)) < 256 Then UniVba = """"
        For n = 1 To Len(TxtUni) - 1
            uni1 = Mid(TxtUni, n, 1)
            uni2 = AscW(Mid(TxtUni, n + 1, 1))
            If AscW(uni1) > 255 And uni2 > 255 Then
                UniVba = UniVba & "ChrW(" & AscW(uni1) & ") & "
            ElseIf AscW(uni1) > 255 And uni2 < 256 Then
                UniVba = UniVba & "ChrW(" & AscW(uni1) & ") & """
            ElseIf AscW(uni1) < 256 And uni2 > 255 Then
                UniVba = UniVba & uni1 & """ & "
            Else
                UniVba = UniVba & uni1
            End If
        Next
        If Right(UniVba, 4) = " & """ Then
            UniVba = Mid(UniVba, 1, Len(UniVba) - 4)
        Else
            UniVba = UniVba & """"
        End If
    End If
End Function

Các bạn xem chi tiết tại http://www.giaiphapexcel.com/forum/showthread.php?2370-Unicode-tiếng-Việt-trong-VBA-Excel
 
Lần chỉnh sửa cuối:
Upvote 0
Bản thân tôi thấy sử dụng Code của thày Phạm Duy Long là tiện nhất

PHP:
Function UniVba(TxtUni As String) As String
    If TxtUni = "" Then
        UniVba = """"""
    Else
        TxtUni = TxtUni & " "
        If AscW(Left(TxtUni, 1)) < 256 Then UniVba = """"
        For n = 1 To Len(TxtUni) - 1
            uni1 = Mid(TxtUni, n, 1)
            uni2 = AscW(Mid(TxtUni, n + 1, 1))
            If AscW(uni1) > 255 And uni2 > 255 Then
                UniVba = UniVba & "ChrW(" & AscW(uni1) & ") & "
            ElseIf AscW(uni1) > 255 And uni2 < 256 Then
                UniVba = UniVba & "ChrW(" & AscW(uni1) & ") & """
            ElseIf AscW(uni1) < 256 And uni2 > 255 Then
                UniVba = UniVba & uni1 & """ & "
            Else
                UniVba = UniVba & uni1
            End If
        Next
        If Right(UniVba, 4) = " & """ Then
            UniVba = Mid(UniVba, 1, Len(UniVba) - 4)
        Else
            UniVba = UniVba & """"
        End If
    End If
End Function

Các bạn xem chi tiết tại http://www.giaiphapexcel.com/forum/showthread.php?2370-Unicode-tiếng-Việt-trong-VBA-Excel
nhưng có chữ không chuyển đượcanh ơi. ví dụ như 2 chữ này: 臣行. anh xem có cách nào xin hướng dẫn với
Bài đã được tự động gộp:

nhưng có chữ không chuyển được anh ơi. ví dụ như 2 chữ này: 臣行. anh xem cos cách nào xin hướng dẫn với
 
Upvote 0
Mình mới làm một file có Function chuyển đổi từ Text sang dạng ký tự này để chèn vào code ko bị lỗi font. Cái này kết hợp với cả Code của 1 bác bên trên. Các bác tham khảo
 

File đính kèm

  • ConvertText.xlsm
    23.4 KB · Đọc: 4
Upvote 0
Mình mới làm một file có Function chuyển đổi từ Text sang dạng ký tự này để chèn vào code ko bị lỗi font. Cái này kết hợp với cả Code của 1 bác bên trên. Các bác tham khảo
Thấy bạn cũng đã tham khảo code của thầy Phạm Duy Long
+ Bạn học hỏi thêm, vì code của Thầy, chuyển mã với những ký tự không có sẵn trong bảng unicode thôi.
+ Code không phụ thuộc với bảng thư viện bên ngoài, và chỉ một vòng lặp từ đầu đến cuối thay vì mỗi ký tự lại phải tra lặp.
Tuy nhiên hoan nghênh việc tìm hiểu và xử lý vấn đề.
Bạn tham khảo thêm cách dùng thư viện Dictionary, như vậy tra từ nhanh hơn, thay vì lặp thêm 1 vòng lặp nữa.
 
Upvote 0
Web KT

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

Back
Top Bottom