簡體   English   中英

(VBA Excel) 從字符串中提取文本和相關字母並輸出結果

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

所以我的情況是有一個帶數字的字母:

在此處輸入圖片說明

程序后所需的輸出(注意下划線在視覺上使用,但我需要一個空格:

____________F
__G
_____E
__G__E______F

目前我已經在數字和首字母列中編寫了代碼來提取數字和首字母:

第一個字母:

LEFT(A2,1)

數字:

=SUMPRODUCT(MID(0&A2,LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$25),1))*ROW($1:$25),0),ROW($1:$25))+1,1)*10^ROW($1:$25)/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 越多越好。 如果這很慢,或者是否有更快、更簡單的方法來做到這一點,請告訴我! :)

-----------------------------最終數據------------------- --------------------最終數據

這就是我要做的 -

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打印到文件。

這不是一個完整的答案,但是對於偽代碼的第二點,您可以使用通配符 # 在字符串中搜索任何數字字符。 更多信息在這里MSDN

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM