Dùng VBA để tổ hợp các kí tự (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Tăng 9x

Thành viên mới
Tham gia
18/10/22
Bài viết
1
Được thích
0
Chào mọi người !
Mình đang muốn viết một hàm VBA để tổ hợp một chuỗi kí tự có độ dài cố định 21 kí tự được tổ hợp từ Số 0->9 và chữ từ A->Z (phân biệt cả chữ thường và chữ hoa)
như ví dụ bên dưới. Các pro giúp mình giải quyết với ạ. Mình làm một số cách nhưng chưa ra. làm bo bằng tay thì lâu quá mà lại còn sót nữa :wounded1:hinh anh vi du.png
 
Chào mọi người !
Mình đang muốn viết một hàm VBA để tổ hợp một chuỗi kí tự có độ dài cố định 21 kí tự được tổ hợp từ Số 0->9 và chữ từ A->Z (phân biệt cả chữ thường và chữ hoa)
như ví dụ bên dưới. Các pro giúp mình giải quyết với ạ. Mình làm một số cách nhưng chưa ra. làm bo bằng tay thì lâu quá mà lại còn sót nữa :wounded1:
.
Dưới đây là hàm lấy ngẫu nhiên 21 ký tự, không phải liệt kê:

PHP:
Public Function RandString(ByVal NumOfString As Long) As String
Const s  As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" '<=Change here
Dim i As Long
Dim rd As Long
Dim lenS As Long
Dim temp As String
lenS = Len(s)
Randomize
If NumOfString > 0 Then
    For i = 1 To NumOfString
        rd = Int(Rnd() * lenS) + 1
        temp = temp & Mid(s, rd, 1)
    Next i
    RandString = temp
End If
End Function

Cách sử dụng:

=RandString(21)

1. Có thể tạo chuỗi ngẫu nhiên có độ dài khác bằng cách thay số 21

2. Có thể thêm, bớt ký tự chuỗi s trong code


.
 
Chào mọi người !
Mình đang muốn viết một hàm VBA để tổ hợp một chuỗi kí tự có độ dài cố định 21 kí tự được tổ hợp từ Số 0->9 và chữ từ A->Z (phân biệt cả chữ thường và chữ hoa)
như ví dụ bên dưới. Các pro giúp mình giải quyết với ạ. Mình làm một số cách nhưng chưa ra. làm bo bằng tay thì lâu quá mà lại còn sót nữa :wounded1:View attachment 282285
Kết quả rất nhiều, file kết quả quá nặng thường không mở và lưu file được
 
PHP:
Public Function RandString(ByVal NumOfString As Long) As String
Const s  As String = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" '<=Change here
Dim i As Long
Dim rd As Long
Dim lenS As Long
Dim temp As String
lenS = Len(s)
Randomize
If NumOfString > 0 Then
    For i = 1 To NumOfString
        rd = Int(Rnd() * lenS) + 1
        temp = temp & Mid(s, rd, 1)
    Next i
    RandString = temp
End If
End Function
Hàm xịn :D
Cho hỏi trong ứng dụng thực tế, ví dụ khi tạo 1 mã dài 11 ký tự để đặt tên (ví dụ jD2uOUAll6Q)
Thì có khi nào hàm trên tạo ra mã đã có ? và để chắc chắn chuyện không có lặp lại thì cần phải làm gì ? có 1 bước duyệt lại tất cả các mã đã tạo ra ?
 
Thì có khi nào hàm trên tạo ra mã đã có ? và để chắc chắn chuyện không có lặp lại thì cần phải làm gì ? có 1 bước duyệt lại tất cả các mã đã tạo ra ?
Nó cũng như mấy web rút gọn link "biệt ly" thôi :D
Chắc chắn là phải tính tới không trùng nhau rồi
 
Số lượng chuỗi là hữu hạn & sẽ phải ấn định trước:

PHP:
Sub TaoChuoi21()
 Const Alf As String = "0123456789ABCDEFGHIJKLMNOPQRTSUVWXYZ"
 Dim Tmp As Byte, J0 As Long, Solg As Integer, Dem As Byte
 Dim StrC As String, GPE As String
 
1 'Xáo Trôn Chuôi   '
 Randomize:                     StrC = Alf
 For J0 = 1 To 999
    Tmp = 6 + 12 * Rnd() \ 1
    If Tmp < 13 Then
        StrC = Mid(StrC, Tmp + 7, Len(StrC)) & Mid(StrC, Tmp, 7) & Left(StrC, Tmp - 1)
    Else
        StrC = Mid(StrC, Tmp, 7) & Left(StrC, Tmp - 1) & Mid(StrC, Tmp + 7, Len(StrC))
    End If
 Next J0
2 ' Cát Doan    '
 Solg = InputBox("Ban Cân Bao Nhiêu Kêt Qua:", "Xin Chào Nha!", "9")
 If Solg > 9 Then Exit Sub
 For J0 = 1 To Solg
    GPE = GPE & StrC
 Next J0
 For J0 = 1 To Len(GPE) Step 21
    Dem = Dem + 1:              If Dem > Solg Then Exit For
    [B1].Offset(Dem).Value = Mid(GPE, J0, 21)
 Next J0
End Sub
 
Lần chỉnh sửa cuối:
Ngon.
Thớt đòi "pro" giúp cho mình. Té ra GPE này cũng được mấy mạng.
Cỡ gu-ru như mình hổng thèm làm đâu. Cứ mách thẳng bài này đã có nhiều bài giải rồi.
 
Web KT

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

Back
Top Bottom