Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 以大写字母生成字母_Excel_Vba - Fatal编程技术网

Excel 以大写字母生成字母

Excel 以大写字母生成字母,excel,vba,Excel,Vba,使用excel在visual basic中生成大写的第一个和最后一个字母 我想用Vb代码在Excel中创建密码 第一个字母大写和最后一个字母大写 示例:A245F Public Sub CmdCreatePassword_Click() Dim i As Integer, j As Integer For i = 1 To 70 j = Int(Rnd(99) * 100) k = Int(Rnd(9)) Cells

使用excel在visual basic中生成大写的第一个和最后一个字母

我想用Vb代码在Excel中创建密码 第一个字母大写和最后一个字母大写 示例:A245F

Public Sub CmdCreatePassword_Click()
     Dim i As Integer, j As Integer
     For i = 1 To 70
          j = Int(Rnd(99) * 100)
          k = Int(Rnd(9))
          Cells(i, "a") = Chr(97 + Int(Rnd(26) * 26)) & IIf(j < 10, j + 27, j) & IIf(k < 9, k + 9, k) & Chr(122 - Int(Rnd(26) * 26))
     Next i
End Sub
Private Sub CmdCreatePassword_KeyDown(ByVal KeyCode As 
 MSForms.ReturnInteger, ByVal Shift As Integer)
    CmdCreatePassword_Click
End Sub
Public Sub CmdCreatePassword\u Click()
尺寸i为整数,j为整数
对于i=1到70
j=Int(Rnd(99)*100)
k=整数(Rnd(9))
细胞(i,“a”)=Chr(97+Int(Rnd(26)*26))&IIf(j<10,j+27,j)&IIf(k<9,k+9,k)&Chr(122-Int(Rnd(26)*26))
接下来我
端接头
Private Sub CMDREATEPASSWORD_KeyDown(ByVal KeyCode为
MSForms.ReturnInteger,ByVal移位为整数)
CmdCreatePassword\u单击
端接头

从任何一个字符中都可以看到,字符“a”是97,“z”是122。此外,“A”是65,“Z”是90。因此,如果您使用大写字母而不是小写字母,请将97和122的值分别替换为65和90

即:

Cells(i,“a”)=Chr(65+Int(Rnd(26)*26))&IIf(j<10,j+27,j)&IIf(k<9,k+9,k)&Chr(90-Int(Rnd(26)*26))

将第6行替换为以下内容

Cells(i,“a”)=Chr(65+Int(Rnd(26)*26))&IIf(j<10,j+27,j)&IIf(k<9,k+9,k)&Chr(90-Int(Rnd(26)*26))
Public Sub CmdCreatePassword\u Click()
尺寸i为整数,j为整数
对于i=1到70
j=Int(Rnd(99)*100)
k=整数(Rnd(9))
细胞(i,“a”)=UCase(Chr(97+Int(Rnd(26)*26))&IIf(j<10,j+27,j)&IIf(k<9,k+9,k)&Chr(122-Int(Rnd(26)*26)))
接下来我
端接头
使用生成的密码添加Ucase函数。它会将所有字符转换为大写


希望它对你有用

为什么不换一个简单的公式呢

=UPPER(LEFT(A1,1))&MID(A1,2,LEN(A1)-2)&UPPER(RIGHT(A1, 1))
按预期生成结果


编辑:正如评论中指出的,如果您不特别关心其他可能的字符变成大写,或者您的数据总是遵循
alpha-num-alpha
格式,那么您可以使用以下简化公式:

=UPPER(A1)

这有点浮华,有点懒。它使用正则表达式模式,
[a-z]
,将小写替换为大写。它在本例中有效,因为您只在开始和结束处有,并且您希望同时替换这两个位置。它有点懒,好像第一个字母和结尾字母要匹配,但仍然尝试替换

Option Explicit
Public Sub CmdCreatePassword_Click()
     Dim i As Long, j As Long, k As Long
     For i = 1 To 70
          j = Int(Rnd(99) * 100)
          k = Int(Rnd(9))
          Cells(i, "a") = UcaseString(Chr(97 + Int(Rnd(26) * 26)) & IIf(j < 10, j + 27, j) & IIf(k < 9, k + 9, k) & Chr(122 - Int(Rnd(26) * 26)), "[a-z]")
     Next i
End Sub

Public Function UcaseString(Text As String, Pattern As String, Optional IgnoreCase As Boolean) As String
    Dim re As Object, matches As Object, i As Long
    Set re = CreateObject("VBScript.RegExp")

    With re
        .Global = True
        .MultiLine = True
        .IgnoreCase = IgnoreCase
        .Pattern = Pattern

        If .test(Text) Then
            Set matches = .Execute(Text)
            For i = 0 To matches.Count - 1
                Text = Replace$(Text, matches(i), UCase$(matches(i)))
            Next i
            UcaseString = Text
        Else
            UcaseString = Text
        End If
    End With   
End Function
选项显式
Public Sub CmdCreatePassword_Click()
我长,j长,k长
对于i=1到70
j=Int(Rnd(99)*100)
k=整数(Rnd(9))
单元(i,“a”)=UcaseString(Chr(97+Int(Rnd(26)*26))&IIf(j<10,j+27,j)&IIf(k<9,k+9,k)&Chr(122-Int(Rnd(26)*26)),“[a-z]”)
接下来我
端接头
公共函数ucasString(文本作为字符串,模式作为字符串,可选IgnoreCase作为布尔值)作为字符串
Dim re作为对象,匹配作为对象,i作为长
Set re=CreateObject(“VBScript.RegExp”)
带re
.Global=True
.MultiLine=True
.IgnoreCase=IgnoreCase
.模式
如果。测试(文本)然后
设置匹配项=.Execute(文本)
对于匹配的i=0。计数-1
Text=Replace$(Text,matches(i),UCase$(matches(i)))
接下来我
ucasString=文本
其他的
ucasString=文本
如果结束
以
端函数

您的问题是什么?请查看StackOverflow帮助部分,特别是关于。最重要的是,确保问题包括实际问题。另外,当回复评论者以提供更多信息时,不要将您的回复添加为回答。答案旨在为用户提供您问题的答案。确切地说;),打败我it@JvdV这是我最初的解决方案,但这将使整个字符串大写,而不是第一个和最后一个字母。出于某种原因,我在第4行中包含了额外的小写字符,但在这个特定情况下,OP会创建3个数值,而密码中只有第一个和第五个字符是文本。一个公式的附加值是多少?@JvdV嗯,我倒是有点怀疑,可能有数据不符合格式。如果数据始终遵循
alpha num alpha
表达式,那么,
=UPPER(A1)
就足够了。没有造成任何伤害真的,使用我的公式并不会让你失去任何显著的处理能力,而且我总是采取“安全胜于遗憾”的方法来处理数据。这肯定不是冒犯性的评论,也许看起来是这样的。我只是想知道,在这种特殊情况下,用一个词修改VBA就可以了,为什么还要添加一个公式呢?别担心,没有人会冒犯你。事后看来,我应该把我原来的解决方案也作为我答案的一部分,现在就把它编辑回去
=UPPER(LEFT(A1,1))&MID(A1,2,LEN(A1)-2)&UPPER(RIGHT(A1, 1))
=UPPER(A1)
Option Explicit
Public Sub CmdCreatePassword_Click()
     Dim i As Long, j As Long, k As Long
     For i = 1 To 70
          j = Int(Rnd(99) * 100)
          k = Int(Rnd(9))
          Cells(i, "a") = UcaseString(Chr(97 + Int(Rnd(26) * 26)) & IIf(j < 10, j + 27, j) & IIf(k < 9, k + 9, k) & Chr(122 - Int(Rnd(26) * 26)), "[a-z]")
     Next i
End Sub

Public Function UcaseString(Text As String, Pattern As String, Optional IgnoreCase As Boolean) As String
    Dim re As Object, matches As Object, i As Long
    Set re = CreateObject("VBScript.RegExp")

    With re
        .Global = True
        .MultiLine = True
        .IgnoreCase = IgnoreCase
        .Pattern = Pattern

        If .test(Text) Then
            Set matches = .Execute(Text)
            For i = 0 To matches.Count - 1
                Text = Replace$(Text, matches(i), UCase$(matches(i)))
            Next i
            UcaseString = Text
        Else
            UcaseString = Text
        End If
    End With   
End Function