(VBA Excel) 从字符串中提取文本和相关字母并输出结果

(VBA Excel) Extract Text and related Letter from String and output result

所以我的场景是有带数字的字母:

程序后的期望输出(注意视觉上使用了下划线,但我需要 space:

____________F
__G
_____E
__G__E______F

目前我已经在Number and First Letter Column中编写了提取数字和首字母的代码:

第一个字母:

LEFT(A2,1)

人数:

=SUMPRODUCT(MID(0&A2,LARGE(INDEX(ISNUMBER(--MID(A2,ROW(:),1))*ROW(:),0),ROW(:))+1,1)*10^ROW(:)/10)

现在我的 VBA 脚本可以使用数字和字符来获取信息并输出 (对于一个错误代码):

Private Sub Code_Printer_Click()

Dim myFile As String, rng As Range, cellValue As Variant, I As Integer, j As Integer

myFile = "C:\Reformatted.txt"
Set rng = Selection

Open myFile For Output As #1

For I = 1 To rng.Rows.Count
    For j = 1 To rng.Columns.Count

If j = rng.Columns.Count Then
    cellValue = Space(rng.Cells(I, 1)) + CStr(rng.Cells(I, 2).Value)
    Print #1, cellValue
End If

    Next j
    cellValue = ""
Next I

Close #1
Shell "C:\Windows\Notepad.exe C:\Reformatted.txt", 1

End Sub

结果:

所以请帮我在同一个事件中处理多个代码。

如果需要完成 excel 功能,那很好。如果它更容易提取 VBA 中的数字,那就可以了。非技术人员会使用所以 VBA 越多越好。 请告诉我这是否很慢,或者是否有更快、更简单的方法来执行此操作! :)

----------------------------最终数据---------------- --------------------------

这不是一个完整的答案,但是对于伪代码的第二点,您可以使用通配符 # 在字符串中搜索任何数字字符。更多信息在这里 MSDN.

我就是这样做的 -

Sub test()
Dim myFile As String
myFile = "C:\reformatted.txt"
Open myFile For Output As #1
Dim iPar As Integer
Dim sChar As String
Dim sBlank As Long
Dim cont As Boolean

Dim mystring As String

For Each c In Range("A:A")
If c <> "" Then
'Get first
        iPar = InStr(1, c, "(")
        If Mid(c, iPar - 1, 1) = "" Then
            If Mid(c, iPar - 2, 1) = "" Then
            sChar = Mid(c, iPar - 3, 1)
            Else: sChar = Mid(c, iPar - 2, 1)
            End If
        Else: sChar = Mid(c, iPar - 1, 1)
        End If
        If IsNumeric(Mid(c, iPar + 1, 2)) Then
            sBlank = Mid(c, iPar + 1, 2)
        Else: sBlank = Mid(c, iPar + 1, 1)
        End If
        mystring = Space(sBlank) & sChar
        cont = InStr(iPar + 1, c, "(")

    Do While cont = True

        iPar = InStr(iPar + 1, c, "(")
        If Mid(c, iPar - 1, 1) = "" Then
            If Mid(c, iPar - 2, 1) = "" Then
            sChar = Mid(c, iPar - 3, 1)
            Else: sChar = Mid(c, iPar - 2, 1)
            End If
        Else: sChar = Mid(c, iPar - 1, 1)
        End If
        If IsNumeric(Mid(c, iPar + 1, 2)) Then
            sBlank = Mid(c, iPar + 1, 2)
        Else: sBlank = Mid(c, iPar + 1, 1)
        End If

        If sBlank + 1 > Len(mystring) Then
            mystring = mystring & Space(sBlank - Len(mystring)) & sChar
        Else: mystring = Application.WorksheetFunction.Replace(mystring, sBlank + 1, 1, sChar)
        End If
        cont = InStr(iPar + 1, c, "(")

    Loop

       Print #1, mystring
     Else: Exit For
   End If
Next
Close #1
Shell "C:\Windows\Notepad.exe C:\reformatted.txt", 1

End Sub

所以它搜索第一个括号 ( 并处理字符和空格。然后它寻找另一个 ( - 如果它找到一个,它继续,否则它完成(并打印)。

如果继续,它会找到下一个 ( 并进行相同的测试以找到字符和空格,然后检查字符串以查看字符串的长度是否大于空格数。如果是,它将用您的字符替换空白字符。如果不是,它会附加空格,然后在末尾插入字符。

然后它再次搜索 ( 以重复该过程。

目前正在搜索 A 列并在 B 列中打印 - 根据需要进行调整。您可以打印 mystring 到文件。