Lấy ngẫu nhiên các kí tự trong excel

Liên hệ QC

tieulongphi

Thành viên mới
Tham gia
25/9/07
Bài viết
8
Được thích
3
Mình có một đề bài như thế này:
Nếu ô A1 có từ 12 kí tự trở lên thì ô B1 cho xuất hiện lại các kí tự đó, ngược lại nếu chưa đủ 12 kí tự thì cho xuất hiện lại ô A1 và thêm một số kí tự ngẫu nhiên cho đủ 12 kí tự. Ví dụ:
A1 B1
TANDA TANDABCHGAKI
NGUYENCONGHOAN NGUYENCONGHOAN
Có thể dùng công thức hoặc VBA đều được
Nhờ bạn nào biết chỉ giùm mình. Xin cám ơn nhiều
 
Mình có một đề bài như thế này:
Nếu ô A1 có từ 12 kí tự trở lên thì ô B1 cho xuất hiện lại các kí tự đó, ngược lại nếu chưa đủ 12 kí tự thì cho xuất hiện lại ô A1 và thêm một số kí tự ngẫu nhiên cho đủ 12 kí tự. Ví dụ:
A1 B1
TANDA TANDABCHGAKI
NGUYENCONGHOAN NGUYENCONGHOAN
Có thể dùng công thức hoặc VBA đều được
Nhờ bạn nào biết chỉ giùm mình. Xin cám ơn nhiều
Bạn dùng thử đoạn code này xem!
Mã:
Public Sub kt_NgauNhien1()
Dim i As Long, j As Long, Lr As Long, SN As Long
Dim Arr(), tmp As String
    Lr = Sheet1.Range("A10000").End(xlUp).Row
    Arr = Sheet1.Range("A2:B" & Lr)
For i = 1 To UBound(Arr)
        tmp = ""
    If Arr(i, 2) = "" Then
        If Len(Arr(i, 1)) >= 12 Then
            Arr(i, 1) = Arr(i, 1): Arr(i, 2) = Arr(i, 1)
        Else
            For j = 1 To 12 - Len(Arr(i, 1))
                SN = Application.WorksheetFunction.RandBetween(65, 85)
                tmp = tmp & Chr(SN)
                Arr(i, 1) = Arr(i, 1): Arr(i, 2) = Arr(i, 1) & tmp
            Next j
        End If
    End If
Next i
    Sheet1.Range("A2").Resize(UBound(Arr), 2) = Arr
End Sub
 

File đính kèm

  • KyTu_NgauNhien.xlsm
    19.1 KB · Đọc: 16
Mình có một đề bài như thế này:
Nếu ô A1 có từ 12 kí tự trở lên thì ô B1 cho xuất hiện lại các kí tự đó, ngược lại nếu chưa đủ 12 kí tự thì cho xuất hiện lại ô A1 và thêm một số kí tự ngẫu nhiên cho đủ 12 kí tự. Ví dụ:
A1 B1
TANDA TANDABCHGAKI
NGUYENCONGHOAN NGUYENCONGHOAN
Có thể dùng công thức hoặc VBA đều được
Nhờ bạn nào biết chỉ giùm mình. Xin cám ơn nhiều

dzọc thử...............
Mã:
Function lamchodu(rng As Range)
Dim st As String, tam As Variant, d As Object
Set d = CreateObject("Scripting.Dictionary")
st = rng.Value
st = StrConv(st, vbUnicode)
tam = Split(Left(st, Len(st) - 1), vbNullChar)
   For i = 0 To UBound(tam)
    If Not d.exists(tam(i)) Then d.Add tam(i), ""
   Next
   
If d.Count > 11 Then
    lamchodu = st
Else
    For i = 1 To 12
        lamchodu = lamchodu & Chr(Int((25 * Rnd) + 65))
    Next
End If
End Function

Mã:
B1=lamchodu(A1)
 
dzọc thử...............
Mã:
Function lamchodu(rng As Range)
Dim st As String, tam As Variant, d As Object
Set d = CreateObject("Scripting.Dictionary")
st = rng.Value
st = StrConv(st, vbUnicode)
tam = Split(Left(st, Len(st) - 1), vbNullChar)
   For i = 0 To UBound(tam)
    If Not d.exists(tam(i)) Then d.Add tam(i), ""
   Next
   
If d.Count > 11 Then
    lamchodu = st
Else
    For i = 1 To 12
        lamchodu = lamchodu & Chr(Int((25 * Rnd) + 65))
    Next
End If
End Function

Mã:
B1=lamchodu(A1)
Hình như code của bạn Let'GâuGâu chưa đúng ý tác giả thì phải. Của bạn Let'GâuGâu nếu ô đã đủ 12 kí tự trở lên nó vấn thay đổi giá trị. Trong trường hợp này tác giả yêu cầu giữ nguyên.
 
Mình có một đề bài như thế này:
Nếu ô A1 có từ 12 kí tự trở lên thì ô B1 cho xuất hiện lại các kí tự đó, ngược lại nếu chưa đủ 12 kí tự thì cho xuất hiện lại ô A1 và thêm một số kí tự ngẫu nhiên cho đủ 12 kí tự. Ví dụ:
A1 B1
TANDA TANDABCHGAKI
NGUYENCONGHOAN NGUYENCONGHOAN
Có thể dùng công thức hoặc VBA đều được
Nhờ bạn nào biết chỉ giùm mình. Xin cám ơn nhiều

Muốn làm bằng công thức excel cũng dc nhưng hơi dài:
B1=IF(LEN(A1)>=12,A1,A1&LEFT(CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(65,90))&CHAR(RANDBETWEEN(65,90)),12-LEN(A1)))
 
dzọc thử...............
Mã:
Function lamchodu(rng As Range)Dim st As String, tam As Variant, d As ObjectSet d = CreateObject("Scripting.Dictionary")st = rng.Valuest = StrConv(st, vbUnicode)tam = Split(Left(st, Len(st) - 1), vbNullChar)   For i = 0 To UBound(tam)    If Not d.exists(tam(i)) Then d.Add tam(i), ""   Next   If d.Count > 11 Then    lamchodu = stElse    For i = 1 To 12        lamchodu = lamchodu & Chr(Int((25 * Rnd)   65))    NextEnd IfEnd Function
Mã:
B1=lamchodu(A1)
Câu hỏi đâu có nói là 12 ký tự không trùng đâu bạn.Tôi nghĩ nếu dùng UDF thì code chỉ cần vầy:
PHP:
Function MuoiHai(Str As String)
Dim i As Long
MuoiHai = Str
For i = Len(Str) + 1 To 12
    MuoiHai = MuoiHai & Chr(Int(25 * Rnd) + 65)
Next
End Function
 
Lần chỉnh sửa cuối:
Mình có một đề bài như thế này:
Nếu ô A1 có từ 12 kí tự trở lên thì ô B1 cho xuất hiện lại các kí tự đó, ngược lại nếu chưa đủ 12 kí tự thì cho xuất hiện lại ô A1 và thêm một số kí tự ngẫu nhiên cho đủ 12 kí tự. Ví dụ:
A1 B1
TANDA TANDABCHGAKI
NGUYENCONGHOAN NGUYENCONGHOAN
Có thể dùng công thức hoặc VBA đều được
Nhờ bạn nào biết chỉ giùm mình. Xin cám ơn nhiều

Buồn quá nên làm trò... tà đạo chơi:
Mã:
Function MuoiHai(ByVal text As String) As String
  Dim tmp As String
  If Len(text) = 0 Then Exit Function
  If Len(text) < 12 Then
    tmp = CreateObject("Scripting.FileSystemObject").GetTempName
    tmp = UCase(Mid(tmp, 4, 5))
    tmp = tmp & tmp & tmp
    MuoiHai = Left(text & tmp, 12)
  Else
    MuoiHai = text
  End If
End Function
Ẹc... Ẹc...
 
Nếu dùng hàm Rnd thì thường thường có khúc này:
Function CaiGiDo(...) as ...
Static FirstRandom as Boolean
if FirstRandom then
Randomize
FirstRandom = False
end if

... code ở đây
End Function
 
Web KT
Back
Top Bottom