Các bác giúp tôi sửa cái hàm chuyển số thành chữ cái này.

  • Thread starter Thread starter Trojan
  • Ngày gửi Ngày gửi
Liên hệ QC

Trojan

Thành viên hoạt động
Tham gia
13/3/08
Bài viết
162
Được thích
78
Chào các bác. Tôi tạo một hàm chuyển số thành chữ cái ref như sau:
Mã:
Private Function ref(ByVal y As Integer) As String
Dim i As Integer
Dim so, a As Integer
       For so = 1 To 1000
        If so < 26 Then
            Select Case y
                Case so: ref = abc(so)
            End Select
        Else
            a = so Mod 26 + 1
            Select Case y
                   Case so: ref = abc(a) & Str(Fix(so / 26))
            End Select
        End If
       Next so
End Function
Private Function abc(ByVal x As Integer) As String
Select Case x
    Case 1: abc = "A"
    Case 2: abc = "B"
    Case 3: abc = "C"
    Case 4: abc = "D"
    Case 5: abc = "E"
    Case 6: abc = "F"
    Case 7: abc = "G"
    Case 8: abc = "H"
    Case 9: abc = "I"
    Case 10: abc = "J"
    Case 11: abc = "K"
    Case 12: abc = "L"
    Case 13: abc = "M"
    Case 14: abc = "N"
    Case 15: abc = "O"
    Case 16: abc = "P"
    Case 17: abc = "Q"
    Case 18: abc = "R"
    Case 19: abc = "S"
    Case 20: abc = "T"
    Case 21: abc = "U"
    Case 22: abc = "V"
    Case 23: abc = "W"
    Case 24: abc = "X"
    Case 25: abc = "Y"
    Case 26: abc = "Z"
End Select
End Function
Tuy nhiên khi chạy nó thường bị lỗi tại vị trí chữ Z, A1, Z1, A2 mà không chình được. Các bác xem giúp tôi cái nhé. Xin cảm ơn trước.
 
Lần chỉnh sửa cuối:
Hàm của bạn cho kết quả = A1 nếu đối số là 26 ---> Vậy kết quả đúng là bao nhiêu?
Thấy hơi giống giống hàm lấy tên cột (mà lại không giống)
Mô tả rõ 1 chút về mục đích của hàm bạn à!
 
Upvote 0
Nếu kết quả mong muốn của bạn là thế này:

|
A​
|
B​
|
C​
|
D​
|
E​
|
F​
|
1​
|
Số​
|
Chữ​
|
Số​
|
Chữ​
|
Số​
|
Chữ​
|
2​
|
1​
|A|
27​
|A1|
53​
|A2|
3​
|
2​
|B|
28​
|B1|
54​
|B2|
4​
|
3​
|C|
29​
|C1|
55​
|C2|
5​
|
4​
|D|
30​
|D1|
56​
|D2|
6​
|
5​
|E|
31​
|E1|
57​
|E2|
7​
|
6​
|F|
32​
|F1|
58​
|F2|
8​
|
7​
|G|
33​
|G1|
59​
|G2|
9​
|
8​
|H|
34​
|H1|
60​
|H2|
10​
|
9​
|I|
35​
|I1|
61​
|I2|
11​
|
10​
|J|
36​
|J1|
62​
|J2|
12​
|
11​
|K|
37​
|K1|
63​
|K2|
13​
|
12​
|L|
38​
|L1|
64​
|L2|
14​
|
13​
|M|
39​
|M1|
65​
|M2|
15​
|
14​
|N|
40​
|N1|
66​
|N2|
16​
|
15​
|O|
41​
|O1|
67​
|O2|
17​
|
16​
|P|
42​
|P1|
68​
|P2|
18​
|
17​
|Q|
43​
|Q1|
69​
|Q2|
19​
|
18​
|R|
44​
|R1|
70​
|R2|
20​
|
19​
|S|
45​
|S1|
71​
|S2|
21​
|
20​
|T|
46​
|T1|
72​
|T2|
22​
|
21​
|U|
47​
|U1|
73​
|U2|
23​
|
22​
|V|
48​
|V1|
74​
|V2|
24​
|
23​
|W|
49​
|W1|
75​
|W2|
25​
|
24​
|X|
50​
|X1|
76​
|X2|
26​
|
25​
|Y|
51​
|Y1|
77​
|Y2|
27​
|
26​
|Z|
52​
|Z1|
78​
|Z2|
28​
|
27​
|A1|
53​
|A2|
79​
|A3|

Thì code sẽ là thế này:

PHP:
Private Function ref(ByVal y As Integer) As String
Dim a As Integer
     a = IIf(y Mod 26 > 0, y Mod 26, 26)
     ref = abc(a) & IIf(y <= 26, "", (Int(y / 26) - IIf(y Mod 26 = 0, 1, 0)))
End Function

PHP:
Private Function abc(ByVal x As Integer) As String
abc = Chr(x + 64)
End Function

Ghi chú:
Vì Function abc() chỉ có 1 dòng lệnh nên nếu bạn không dùng cho việc gì khác, tích hợp nó vào trong function Ref() luôn cho khoẻ.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi nghĩ chắc bạn muốn tạo một Function để tạo mã. Kết quả là A, B, C,..., Y, Z, A1, B1,..., Y1, Z1, A2, B2,...
Nếu như vậy thì Function của bạn có thể sửa lại như thế này:
PHP:
Private Function ref(ByVal y As Integer) As String
Dim i As Integer
Dim so, a As Integer
       For so = 1 To 1000
        If so < 27 Then
            Select Case y
                Case so: ref = abc(so)
            End Select
        Else
            a = (so - 1) Mod 26 + 1
            Select Case y
                   Case so: ref = abc(a) & Str(Int((so - 1) / 26))
            End Select
        End If
       Next so
End Function
Private Function abc(ByVal x As Integer) As String
Select Case x
    Case 1: abc = "A"
    Case 2: abc = "B"
    Case 3: abc = "C"
    Case 4: abc = "D"
    Case 5: abc = "E"
    Case 6: abc = "F"
    Case 7: abc = "G"
    Case 8: abc = "H"
    Case 9: abc = "I"
    Case 10: abc = "J"
    Case 11: abc = "K"
    Case 12: abc = "L"
    Case 13: abc = "M"
    Case 14: abc = "N"
    Case 15: abc = "O"
    Case 16: abc = "P"
    Case 17: abc = "Q"
    Case 18: abc = "R"
    Case 19: abc = "S"
    Case 20: abc = "T"
    Case 21: abc = "U"
    Case 22: abc = "V"
    Case 23: abc = "W"
    Case 24: abc = "X"
    Case 25: abc = "Y"
    Case 26: abc = "Z"
End Select
End Function
Còn nếu là tôi thì tôi dùng công thức. Như thế này:
Mã:
=CHAR(64+MOD(A1-1,26)+1)&IF(A1<27,""," "&INT((A1-1)/26))
Nếu muốn Function riêng thì đưa công thức vào code hoặc viết code theo thuật toán của công thức này. Sẽ nhanh hơn so với Function của bạn.
 
Upvote 0
Cũng bon chen cái cho rôm rã, hén:

Mã:
[B][B] Function ABC(ByVal Num As Integer) As String[/B][/B]
Dim GPE As String, Xx As Integer
If Num <= 26 Then
   Xx = Num
Else
   Xx = (Num Mod 26):                        If Xx = 0 Then Xx = 26
   GPE = Str(Num - 1) \ 26
End If
ABC = CHR(64 + Xx) & GPE
[B]   
End Function[/B]
 
Lần chỉnh sửa cuối:
Upvote 0
Cảm ơn tất cả các bác. Pro quá, em xin mang sách đến học các bác.--=--
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom