【问题标题】:Extracting text from string - Excel VBA从字符串中提取文本 - Excel VBA
【发布时间】:2016-05-07 15:03:54
【问题描述】:

我正在尝试从文本文件生成 X、Y、Z 字符串以输入到 CAD 程序(如 AutoCAD 或 Inventor)中。我想使用 VBA 在 Excel 中执行此操作。

文本文件包含如下字符串:

G0X.5384Z.05
G1X.634Z-.0327F.004
Z-.9184F.006
X.592Z-.9548F.004

我想从中提取 X、Y 和 Z 坐标。为了清楚起见,此文本已粘贴到 Excel 中,A 列包含每一行。第 1 行在一列中显示为“X.5384”,在另一列中显示为“Z.05”。

我知道足够多的 VBA 可以从字符串中删除 XYZ,但我不知道如何拉出特定部分。无法保证它们将按 XYZ 顺序排列,或者其他字母不会在它们中间。

我已经阅读了一些关于 Regex.Split 的内容,如果有足够的时间,我可能会得到它来拆分整个字符串,但我想只拉出 X、Y 和 Z 坐标,如果可能的话,忽略其余的。

【问题讨论】:

  • 你不能直接关闭文本文件吗?
  • 我可以,但我不知道该怎么做。
  • 你可以从this开始;-)

标签: vba excel


【解决方案1】:

首先把这个小用户定义函数放在一个标准模块中:

Public Function GetData(r As Range, CH As String) As String
   Dim v As String, i As Long, j As Long, L As Long, CHm As String

   v = r.Text
   L = Len(v)
   GetData = ""
   i = InStr(1, v, CH)
   If i = 0 Then Exit Function
   GetData = CH

   For j = i + 1 To L
      CHm = Mid(v, j, 1)
      If CHm = "-" Or CHm = "." Or CHm Like "[0-9]" Then
         GetData = GetData & CHm
      Else
         Exit Function
      End If
   Next j
End Function

然后在 B1 中输入:=getdata(A1,"X") 并复制下来。
C1 中输入:=getdata(A1,"Y") 并复制下来。
D1 中输入:=getdata(A1,"Z") 并复制下来。

【讨论】:

  • 这是一个很棒的解决方案。
  • 很抱歉回复晚了,但这对我很有用。我能够(可能是错误的方式)在 GetData = GetData & CHm 之后添加一个替换代码并拉出 X、Y 和 Z 字母以留下坐标。感谢您的帮助。
【解决方案2】:

对于不使用 VBA 的替代解决方案,使用第 1 行作为标题行并输入您要查找的字母,如下图所示:

在B2单元格中是这个公式,然后上下复制:

=IF(COUNTIF($A2,"*"&B$1&"*")=0,"",MID($A2,SEARCH(B$1,$A2),MATCH(FALSE,INDEX(ISNUMBER(--(MID($A2&" ",SEARCH(B$1,$A2)+1,ROW($1:$10))&0)),),0)))

【讨论】:

  • 您的代码也运行良好,但我选择了另一个,因为在 VBA 中拉出 X、Y 和 Z 对我来说更容易。感谢您的代码,我仍在努力理解它!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多