ledangvan > 06-06-21, 12:21 PM
(05-06-21, 02:24 PM)tungthoi15 Đã viết:(05-06-21, 09:55 AM)ledangvan Đã viết: Đại khái như này : https://www.mediafire.com/file/qvncuql1i...p.mdb/fileRất cám ơn bác Ledangvan ạ! Nhưng
Chẳng cần tẹo code nào
(Tôi mới thử phân tích 4 số cuối chùng nhau, ví dụ : 1111, 2222, 3333 ...)
Vấn đề là không đơn giản như thế đâu bác ơi.
Vì đấy là số lặp cuối 3 số, hay 4 số hay 7, hoặc 8 số thì cũng dễ thôi
Thế bây giờ tìm số tài khoản đấy có bao nhiêu số tam hoa, mà tam hoa thì tính bất kỳ đâu trong số tài khoản
Có 1 tam hoa, hay là 2 tam hoa, hay là 3 tam hoa
Bác có liệt kê hết được không??
Tài khoản của Agribank thì luôn là 13 số theo dạng: xxxx-yyyyyyyyy
Trong đó xxxx là mã chi nhánh, còn yyyyyyyyy thì tự ý thay đổi
ongke0711 > 08-06-21, 08:25 AM
Option Compare Database
Option Explicit
Const sNumList As String = "0123456789"
Sub test()
Dim inputNum As String, i As Integer
inputNum = "1523276723456"
Debug.Print "[So TK: " & inputNum & "]"
For i = 3 To 6
Call kiemTraSoTienCuoi(i, inputNum)
Next
End Sub
Sub test1()
Dim inputNum As String, i As Integer
inputNum = "1523696781436"
Debug.Print "[So TK: " & inputNum & "]"
For i = 3 To 6
Call kiemTraSoTienBatKy(i, inputNum)
Next
End Sub
Sub test2()
Dim inputNum As String, i As Integer
inputNum = "1536787333333"
Debug.Print "[So TK: " & inputNum & "]"
For i = 3 To 6
Call kiemTraSoTrungCuoi(i, inputNum)
Next
End Sub
Sub kiemTraSoTienBatKy(so As Integer, inputNum As String) 'so: 3,4,5,6 sô tién
Dim arrListNum() As String, i As Integer, k As Integer, ret As Boolean
arrListNum = Split(listSoTien3456Cuoi(so), ",")
ret = False
For i = 0 To UBound(arrListNum)
For k = 5 To Len(inputNum) - so + 1
If Mid(inputNum, k, so) = arrListNum(i) Then
ret = True
Exit For
End If
Next k
Next i
'MsgBox "- " & so & " so tien vi tri bat ky: " & ret
Debug.Print "- " & so & " so tien vi tri bat ky: " & ret
End Sub
Sub kiemTraSoTienCuoi(so As Integer, inputNum As String) 'so: 3,4,5,6 sô tién
Dim arrListNum() As String, i As Integer, ret As Boolean
arrListNum = Split(listSoTien3456Cuoi(so), ",")
ret = False
For i = 0 To UBound(arrListNum)
If Right(inputNum, so) = arrListNum(i) Then
ret = True
Exit For
End If
Next
'MsgBox "- " & so & " so tien cuoi: " & ret
Debug.Print "- " & so & " so tien cuoi: " & ret
End Sub
Sub kiemTraSoTrungCuoi(so As Integer, inputNum As String) 'so: 3,4,5 sô trùng - tam, tu ngu hoa
Dim arrListNum() As String, i As Integer, ret As Boolean
arrListNum = Split(listSoCuoiTrung345(so), ",")
ret = False
For i = 0 To UBound(arrListNum)
If Right(inputNum, so) = arrListNum(i) Then
ret = True
Exit For
End If
Next
'MsgBox "- " & so & " so trung cuoi: " & ret
Debug.Print "- " & so & " so trung cuoi: " & ret
End Sub
Function listSoTien3456Cuoi(iNumOfDigit As Integer) As String
Dim i As Long
listSoTien3456Cuoi = ""
For i = 1 To Len(sNumList) - (iNumOfDigit - 1)
listSoTien3456Cuoi = listSoTien3456Cuoi & Mid(sNumList, i, iNumOfDigit) & ","
Next
listSoTien3456Cuoi = Left(listSoTien3456Cuoi, Len(listSoTien3456Cuoi) - 1)
End Function
Function listSoCuoiTrung345(iNumOfDigit As Integer) As String
Dim i As Integer, k As Integer
listSoCuoiTrung345 = ""
For i = 0 To Len(sNumList) - 1
For k = 1 To iNumOfDigit
listSoCuoiTrung345 = listSoCuoiTrung345 & i
Next k
listSoCuoiTrung345 = listSoCuoiTrung345 & ","
Next i
listSoCuoiTrung345 = Left(listSoCuoiTrung345, Len(listSoCuoiTrung345) - 1)
End Function
ongke0711 > 08-06-21, 06:11 PM
Sub test3()
Dim inputNum As String, i As Integer
inputNum = "1536743434343"
Debug.Print "[So TK: " & inputNum & "]"
For i = 2 To 4
Call kiemTra2SoLap(i, inputNum)
Next
End Sub
Sub kiemTra2SoLap(solan As Integer, inputNum As String) '2,3,4 lan
Dim i As Integer, ret As Boolean
ret = False
For i = 0 To UBound(arrChinhHop2)
If Right(inputNum, solan * 2) = repeatString(solan, arrChinhHop2(i)) Then
ret = True
Exit For
End If
Next
'MsgBox "- " & so & " so trung cuoi: " & ret
Debug.Print "- 2 so cuoi lap " & solan & " lan: " & ret
End Sub
Function arrChinhHop2() As Variant 'n=10
Dim s As String
Const sNum As String = "0123456789"
'01 02 03 04 05 06 07 08 09 10 12 13 14 15 16 ...: 89 cap so
Dim i As Integer, k As Integer
s = ""
For i = 1 To Len(sNum)
For k = 1 To Len(sNum)
If Mid(sNum, i, 1) <> Mid(sNum, k, 1) Then 'bo qua so 00,11,22,...,99
s = s & Mid(sNum, i, 1) & Mid(sNum, k, 1) & ","
End If
Next k
Next i
s = Left(s, Len(s) - 1)
'Debug.Print s
arrChinhHop2 = Split(s, ",")
'Debug.Print UBound(arrChinhHop2)
End Function
Function repeatString(n As Integer, str As Variant) As String
repeatString = Replace(Space(n), " ", str)
End Function
tungthoi15 > 09-06-21, 10:11 AM
(08-06-21, 06:11 PM)ongke0711 Đã viết: Hàm kiểm tra 2 số lập lại 2, 3, 4 lần.Em chân thành cảm ơn @OngKe0711 ạ, Diễn đàn này thật may mắn có được thành viên như bác, đầy nhiệt tình và tâm huyết.
Mã PHP:Sub test3()
Dim inputNum As String, i As Integer
inputNum = "1536743434343"
Debug.Print "[So TK: " & inputNum & "]"
For i = 2 To 4
Call kiemTra2SoLap(i, inputNum)
Next
End Sub
Sub kiemTra2SoLap(solan As Integer, inputNum As String) '2,3,4 lan
Dim i As Integer, ret As Boolean
ret = False
For i = 0 To UBound(arrChinhHop2)
If Right(inputNum, solan * 2) = repeatString(solan, arrChinhHop2(i)) Then
ret = True
Exit For
End If
Next
'MsgBox "- " & so & " so trung cuoi: " & ret
Debug.Print "- 2 so cuoi lap " & solan & " lan: " & ret
End Sub
Function arrChinhHop2() As Variant 'n=10
Dim s As String
Const sNum As String = "0123456789"
'01 02 03 04 05 06 07 08 09 10 12 13 14 15 16 ...: 89 cap so
Dim i As Integer, k As Integer
s = ""
For i = 1 To Len(sNum)
For k = 1 To Len(sNum)
If Mid(sNum, i, 1) <> Mid(sNum, k, 1) Then 'bo qua so 00,11,22,...,99
s = s & Mid(sNum, i, 1) & Mid(sNum, k, 1) & ","
End If
Next k
Next i
s = Left(s, Len(s) - 1)
'Debug.Print s
arrChinhHop2 = Split(s, ",")
'Debug.Print UBound(arrChinhHop2)
End Function
Function repeatString(n As Integer, str As Variant) As String
repeatString = Replace(Space(n), " ", str)
End Function
ongke0711 > 12-06-21, 10:42 AM
Sub test4()
Dim inputNum As String, i As Integer
inputNum = "1536743342243"
Debug.Print "[So TK: " & inputNum & "]"
For i = 2 To 3
Call kiemTraDaoSo(i, inputNum)
Next
End Sub
Sub kiemTraDaoSo(sokytu As Integer, inputNum As String)
'Dao 2 so: 5665
'Dao 3 so: 867769
Dim strDaoSo As String, ret As Boolean
ret = False
strDaoSo = DaoChuSo(Right(inputNum, sokytu)) & Right(inputNum, sokytu)
If Right(inputNum, sokytu * 2) = strDaoSo Then
ret = True
End If
Debug.Print "- Dao " & sokytu & " so cuoi: " & ret
End Sub
Function DaoChuSo(sText As String, Optional isNum As Boolean) As Variant
Dim i As Integer
Dim strNewTxt As String
Dim strOld As String
strOld = Trim(sText)
For i = 1 To Len(strOld)
strNewTxt = Mid(strOld, i, 1) & strNewTxt
Next i
If isNum = True Then
DaoChuSo = CLng(strNewTxt)
Else
DaoChuSo = strNewTxt
End If
End Function
ongke0711 > 15-06-21, 12:37 AM
tungthoi15 > 15-06-21, 11:16 AM
(15-06-21, 12:37 AM)ongke0711 Đã viết: Chốt bài phân tích mấy con số này nhé. Các trường hợp khác nhìn bẳng mắt vậy.
Bạn muốn chế biến kiểu khác thì vẫn dùng mấy cái hàm kiểm số rồi biến tấu lên form thôi.
Link demo: https://drive.google.com/file/d/1_LYbZh8...sp=sharing
tungthoi15 > 15-06-21, 11:28 AM
Sub kiemTra2SoLap234(inputNum As String) '2,3,4 lan
'Lap 2 lan: 1212
'Lap 3 lan: 121212
Dim checkStr As String, i As Integer, j As Integer, ret As Boolean
checkStr = Right(inputNum, 2)
If IsIn(checkStr, "00,11,22,33,44,55,66,77,88,99") Then Exit Sub 'Loai bo truong hop so Tam hoa, so trung
For i = 2 To 4
If Right(inputNum, i * 2) = repeatString(i, checkStr) Then
ret = True
j = i
End If
Next i
If j > 0 Then
sMsgTotal = sMsgTotal & vbCrLf & vbCrLf & "# 2 s" & ChrW(7889) & " cu" & ChrW(7889) & "i l" & ChrW(7863) & "p [" & j & "] l" & ChrW(7847) & "n: " & Right(inputNum, j * 2)
Debug.Print "# 2 so cuoi lap " & j & " lan: " & ret
End If
End Sub
ongke0711 > 15-06-21, 12:56 PM
(15-06-21, 11:28 AM)tungthoi15 Đã viết: To: OngKe0711
Em xong hết rồi, còn đúng 1 trường hợp nữa là tính các cặp số kép 00, 11 ,22....99 liền nhau nằm bất kỳ đâu trong dãy số, bác giúp em với
Nó gần giống đoạn code này của bác, nhưng em chưa chế biến theo được
Sub kiemTraDaySoDoi(inputNum As String)
Dim sLis2soTrung As String, checkStr As String, ret As Boolean
Dim i As Integer, j As Integer, k As Integer, n As Integer, so As String
sLis2soTrung = listSoCuoiTrung3456(2)
j = 0
For i = 2 To 4 '2-4 cap so trùng
For k = 1 To Len(inputNum) - i + 1
checkStr = Mid$(inputNum, k, i * 2)
ret = IsIn(Left$(checkStr, 2), sLis2soTrung) And IsIn(Right$(checkStr, 2), sLis2soTrung)
For n = 2 To i
ret = ret And IsIn(Mid$(checkStr, n * 2 - 1, 2), sLis2soTrung)
Next n
If ret = True Then
j = i 'Luu so cap cao nhat
so = Mid$(inputNum, k, j * 2)
Exit For
End If
Next k
Next i
If j >= 2 Then
sMsgTotal = sMsgTotal & vbCrLf & vbCrLf & "# Có [" & j & "] c" & ChrW(7863) & "p s" & ChrW(7889) & " " & ChrW(273) & "ôi: " & so
Debug.Print "# Có [" & j & "] cap so doi: " & so
End If
End Sub
tungthoi15 > 15-06-21, 04:34 PM
(15-06-21, 12:56 PM)ongke0711 Đã viết:(15-06-21, 11:28 AM)tungthoi15 Đã viết: To: OngKe0711
Em xong hết rồi, còn đúng 1 trường hợp nữa là tính các cặp số kép 00, 11 ,22....99 liền nhau nằm bất kỳ đâu trong dãy số, bác giúp em với
Nó gần giống đoạn code này của bác, nhưng em chưa chế biến theo được
Chế biến từ code lấy số Tam Hoa kép + số tiến vị trí bất kỳ.
Mã PHP:Sub kiemTraDaySoDoi(inputNum As String)
Dim sLis2soTrung As String, checkStr As String, ret As Boolean
Dim i As Integer, j As Integer, k As Integer, n As Integer, so As String
sLis2soTrung = listSoCuoiTrung3456(2)
j = 0
For i = 2 To 4 '2-4 cap so trùng
For k = 1 To Len(inputNum) - i + 1
checkStr = Mid$(inputNum, k, i * 2)
ret = IsIn(Left$(checkStr, 2), sLis2soTrung) And IsIn(Right$(checkStr, 2), sLis2soTrung)
For n = 2 To i
ret = ret And IsIn(Mid$(checkStr, n * 2 - 1, 2), sLis2soTrung)
Next n
If ret = True Then
j = i 'Luu so cap cao nhat
so = Mid$(inputNum, k, j * 2)
Exit For
End If
Next k
Next i
If j >= 2 Then
sMsgTotal = sMsgTotal & vbCrLf & vbCrLf & "# Có [" & j & "] c" & ChrW(7863) & "p s" & ChrW(7889) & " " & ChrW(273) & "ôi: " & so
Debug.Print "# Có [" & j & "] cap so doi: " & so
End If
End Sub