(VBA Excel) 从字符串中提取文本和相关字母并输出结果
Posted
技术标签:
【中文标题】(VBA Excel) 从字符串中提取文本和相关字母并输出结果【英文标题】:(VBA Excel) Extract Text and related Letter from String and output result 【发布时间】:2015-06-16 19:38:29 【问题描述】:所以我的场景是有一个带数字的字母:
程序后所需的输出(注意下划线在视觉上使用,但我需要一个空格:
____________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 脚本可以使用数字和字符来获取 (对于 ONE 错误代码)的信息和输出:
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 越多越好。 如果这很慢,或者是否有更快、更简单的方法,请告诉我! :)
------------------最终数据---------------- ----------------------
【问题讨论】:
该列表是在一个单元格中还是在 3 个单元格中? 通常一个事件/条目有一个代码在其单独的单元格中,但有时一个事件可能有多个单元格都填充到一个单元格中,如 S、G、E 所示。 @Raystafarian 嘿,伙计,我能够澄清很多问题并包括屏幕截图。 我对你示例中的 122 感到困惑。 【参考方案1】:我就是这样做的-
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
打印到文件中。
【讨论】:
这个选择的范围是怎么设置的?如何添加这行代码:Set rng = Selection 这个宏实用程序实际上是为其他人准备的。主要思想是他们打开模板,填充它,然后选择并单击一个按钮。所以我必须做那些跑腿的工作。大声笑。 我似乎无法完成这项工作。您介意使用 rng 选择和 shell 命令吗?具体来说,我对 else 子句中有“退出子”命令感到困惑 我明白了。另外我不太清楚如何以及何时打印到文件。如果您有时间,您可以输入文件的 print mystring 和 open 和 shell 命令吗?我尝试添加所有这些,但程序无法运行。 由于某种原因,这不会打印字符。我做了这个修改和一个空格的字符:Else: sChar = Mid(Cells(I, j).Value, iPar - 4, 1)【参考方案2】:这不是一个完整的答案,但对于伪代码的第二点,您可以使用通配符 # 在字符串中搜索任何数字字符。更多信息在这里MSDN。
【讨论】:
我对这个问题澄清了很多。如果您有更多建议,请告诉我。 我相信 Raystafarians 的搜索方法是一种更好的方法,尤其是如果您想保留空格以上是关于(VBA Excel) 从字符串中提取文本和相关字母并输出结果的主要内容,如果未能解决你的问题,请参考以下文章
从 pdf 中提取表格(到 excel),pref。带 vba
为啥 Excel 2010 VBA 用户窗体文本框字体会根据框架的大小而变化?