gpt4 book ai didi

regex - VBA Excel : Pattern creation function replacing numbers with characters

转载 作者:行者123 更新时间:2023-12-03 02:46:55 25 4
gpt4 key购买 nike

我已经编写了下面提到的代码,但它不起作用。有人可以帮忙吗?

说明:设置 7 或 8 位数字。如果号码是 8 位,则删除前 2 个数字,如果号码是 7 位,则删除第一个数字。留下一个 6 位数字,其中每个数字都可以不受任何限制地重复。因此,可以拥有 000001 到 999999 之间的数字。(左侧的零也被计算在内)。

该代码在前 3 位数字上可以正常工作,但稍后尽管我使用相同的逻辑,但无法正常工作。代码的功能是通过将数字翻译成字符来生成所有可能的模式。

限制:

  • 仅使用 a、b、c、d、e 和 f。
  • 角色应该按照系统顺序运行

按照这个逻辑:

  • 模式的范围可以介于 aaaaaa 和 abcdef 之间。
  • 第一个字符始终为“a”,最后一个字符可能为“f”,以防所有数字彼此不同。

因此,数字 454657 被转换为 abacbd,或者 123456 被转换为 abcdef。 (没有b就不能存在c,没有b和c就不能存在d)。

 Private Sub CommandButton1_Click()
Dim GSM_Counter, GSM, GSM_Range, a, b, c, d, e, f As String
Dim GSM_length, Num1, Num2, Num3, Num4, Num5, Num6, a1, b1, c1, d1, e1, f1 As integer
GSM_Counter = Application.WorksheetFunction.CountA(Range("A:A"))
For i = 2 To GSM_Counter
GSM_length = Len(Range("A" & i))
Select Case GSM_length
Case Is = 8
Range("B" & i) = Left(Range("A" & i), 2)
Num1 = Right(Left(Range("A" & i), 3), 1)
Num2 = Right(Left(Range("A" & i), 4), 1)
Num3 = Right(Left(Range("A" & i), 5), 1)
Num4 = Right(Left(Range("A" & i), 6), 1)
Num5 = Right(Left(Range("A" & i), 7), 1)
Num6 = Right(Left(Range("A" & i), 8), 1)
Case Is = 7
Range("B" & i) = Left(Range("A" & i), 1)
Num1 = Right(Left(Range("A" & i), 2), 1)
Num2 = Right(Left(Range("A" & i), 3), 1)
Num3 = Right(Left(Range("A" & i), 4), 1)
Num4 = Right(Left(Range("A" & i), 5), 1)
Num5 = Right(Left(Range("A" & i), 6), 1)
Num6 = Right(Left(Range("A" & i), 7), 1)
End Select
Range("C" & i) = Num1
Range("D" & i) = Num2
Range("E" & i) = Num3
Range("F" & i) = Num4
Range("G" & i) = Num5
Range("H" & i) = Num6
Next i

For k = 2 To GSM_Counter
a1 = Range("C" & k)
b1 = Range("D" & k)
c1 = Range("E" & k)
d1 = Range("F" & k)
e1 = Range("G" & k)
f1 = Range("H" & k)
a = "a"
Range("K" & k) = a
If b1 = a1 Then
b = "a"
Else
b = "b"
End If
Range("L" & k) = b
If c1 = a1 Then
c = "a"
ElseIf c1 = b1 Then
c = "b"
Else
c = "c"
End If
Range("M" & k) = c
If d1 = a1 Then
d = "a"
ElseIf d1 = b1 Then
d = "b"
ElseIf d1 = c1 Then
d = "c"
Else
d = "d"
End If
Range("N" & k) = d
If e1 = a1 Then
e = "a"
ElseIf e1 = b1 Then
e = "b"
ElseIf e1 = c1 Then
e = "c"
ElseIf e1 = d1 Then
e = "d"
Else
e = "e"
End If
Range("O" & k) = e
If f1 = a1 Then
f = "a"
ElseIf f1 = b1 Then
f = "b"
ElseIf f1 = c1 Then
f = "c"
ElseIf f1 = d1 Then
f = "d"
ElseIf f1 = e1 Then
f = "e"
Else
f = "f"
End If
Range("P" & k) = f
Next k
End Sub

最佳答案

这是另一种方法..

'~~> Test Data
Sub Sample()
Dim TestArray(1 To 6) As Long
Dim i As Long

TestArray(1) = 468013: TestArray(2) = 12234455: TestArray(3) = 234523
TestArray(4) = 44444444: TestArray(5) = 123: TestArray(6) = 111222

For i = 1 To 6
Debug.Print TestArray(i) & " --> " & Encrypt(TestArray(i))
Next i
End Sub

'~~> Actual Function
Function Encrypt(n As Long) As String
Dim j As Long, k As Long, sNum As String

sNum = Format(CLng(Right(n, 6)), "000000")

j = 97

For k = 1 To 6
If IsNumeric(Mid(sNum, k, 1)) Then
sNum = Replace(sNum, Mid(sNum, k, 1), Chr(j))
j = j + 1
End If
Next k
Encrypt = sNum
End Function

输出

468013 --> abcdef
12234455 --> abccdd
234523 --> abcdab
44444444 --> aaaaaa
123 --> aaabcd
111222 --> aaabbb

编辑:

如果您打算将其用作工作表函数,并且不确定将有什么样的输入,那么请更改

Function Encrypt(n As Long) As String

Function Encrypt(n As Variant) As String

关于regex - VBA Excel : Pattern creation function replacing numbers with characters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26250355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com