[英](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.