Đây file của bạn đây! Bạn xem đúng chưa?Các huynh thông cảm nhé, mình gửi file này lần cuối (có giải thích lại theo mình thì khá rõ).Mong các huynh cố gắng giúp mình.
Lần sau vào diễn đàn chắc sẽ k bị ăn mắng nhiều thế này nữa, hi vọng thế!
Option Explicit
Dim StrC As String: Dim rBD As Long
Const Chu As String = _
"0001020304050607080910111213141516171819202122232425262728293031.."
Const DD As Byte = 70
Sub TimKiem()
Dim sCll As String: Dim jJ As Byte, rKT As Long
Dim Cls As Range, Rg0 As Range, Clls As Range
[d1].Value = "STT": Columns("D:F").Select
Selection.Sort Key1:=[E2], Order1:=xlAscending, Key2:=[D2], _
Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1
[e9].End(xlDown).Offset(1).Value = "@GPE@"
[F1].CurrentRegion.Offset(1, 2).Resize(, 3).ClearContents
For Each Cls In Range([E2], [E65500].End(xlUp))
If sCll <> Cls.Value Then
sCll = Cls.Value
If Cls.Row = 2 Then
rBD = Cls.Row
Else
rKT = Cls.Row: DinhChuoi Cls.Offset(-1).Value
Set Rg0 = Cells(rBD, "E").Resize(rKT - rBD)
jJ = 0
For Each Clls In Rg0.Offset(, 1)
jJ = jJ + 1:
If jJ < Len(StrC) / 2 Then
Clls.Value = Mid(StrC, 2 * jJ - 1, 2)
Else
Clls.Value = "Nothing"
End If
Next Clls
rBD = rKT: rKT = 0
End If
End If
Next Cls
Columns("E:E").Find("@GPE@").Value = ""
End Sub
[B]Sub DinhChuoi(SCell As String)[/B]
Dim Rng As Range, sRng As Range, jJ As Byte, MyAdd As String
Const Hh As String = "@@"
Set Rng = Range([A1], [A65500].End(xlUp)): StrC = Chu
Set sRng = Rng.Find(SCell, , xlFormulas, xlWhole)
If Not sRng Is Nothing Then
MyAdd = sRng.Address
Do
jJ = 2 * sRng.Offset(, 1).Value + 1
If jJ = 1 Then
StrC = Hh & Mid(StrC, 3, DD)
Else
StrC = Left(StrC, jJ - 1) & Hh & Mid(StrC, jJ + 2, DD)
End If
Set sRng = Rng.FindNext(sRng)
Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
End If
StrC = Replace(StrC, Hh, ""): Cells(rBD, "h").Value = StrC
DaoChuoi StrC: Cells(rBD + 2, "h").Value = StrC
[B]End Sub[/B]
[B]Sub DaoChuoi(StrC As String)[/B]
Dim jJ As Byte, Vtr As Byte, Num As Byte
Num = Len(StrC) - 2
For jJ = 1 To 99
Randomize: Vtr = 1 + 2 * Int(Num * Rnd)
If Vtr > 9 Then
StrC = Mid(StrC, Vtr, DD) & Mid(StrC, 3, Vtr - 3) & Left(StrC, 2)
Else
StrC = Mid(StrC, Vtr, DD) & Left(StrC, Vtr - 1)
End If
Next jJ
StrC = Replace(StrC, "..", "") & ".."
[B]End Sub[/B]
Cảm ơn các bác đã góp ý. vd: như trong file mình gửi, mình nghĩ nó rõ đấy chứ. như trong giải pháp các huynh giúp thì chỉ tìm dc 31 giá trị ở cột E mà thôi,mình muốn tìm các giá trị như file mình điền ấy. Huynh nào cho mình số fone, mình alo hỏi cho rõ luôn. nick của mình tuanvtbk41.
Nếu muốn vậy thì bạn chỉ thay công thức là: F2=IF(E2="","",IF(ISNA(Pos),RANDBETWEEN(0,31),IF(COUNT(Pos)>=COUNTIF($E$2:$E2,$E2),SMALL(Pos,COUNTIF($E$2:$E2,$E2)),"hết giá trị trong giải 0-31")))Chào các bác, nhờ các bác sửa giúp em thêm 1 chút nữa. Nếu giá trị cần tìm ở cột E mà không có trong cột A thì nó sẽ tự động lấy giá trị bất kỳ trong dải 0-31. Em ví dụ 2 thằng SAV0123, KHA0112 bôi vàng ở dưới. Cám ơn các bác nhiều!
Nếu muốn vậy thì bạn chỉ thay công thức là: F2=IF(E2="","",IF(ISNA(Pos),RANDBETWEEN(0,31),IF(COUNT(Pos)>=COUNTIF($E$2:$E2,$E2),SMALL(Pos,COUNTIF($E$2:$E2,$E2)),"hết giá trị trong giải 0-31")))
là được thôi
Nếu vậy thì lấy lần lượt từ 0~31 nhé!Bác ơi, ví dụ này thì thấy hàm đó vẫn chưa đúng, nhờ bác giúp sửa lại (giá trị phải duy nhất trong dải 0-31)
Nếu vậy thì lấy lần lượt từ 0~31 nhé!
E2=IF(E2="","",IF(AND(ISNA(Pos),COUNTIF($E$2:E2,E2)=COUNTIF($E2:$E$99,$E2),SMALL(Pos,COUNTIF($E2:$E$99,$E2)),"hết giá trị trong giải 0-31")))