0

在这种情况下,我想提取单元格中的开始文本并保持其余部分不变。例如,一系列单元格包含:

2nd Unit. Miami
3rd Production Staff. Toronto
1st Ad. San Francisco

我想在不使用 Text to columns 的情况下将其分解,因为前几行的格式不同,而最后几行是我想要处理的异常值。

我认为正则表达式可能会做到这一点,但这似乎有点复杂。

我的算法思路是: 1. 抓取想要的文本(什么函数或自定义子会这样做?) 2. 将文本粘贴到新位置 3. 从单元格中剪切文本,留下剩余的文本。

看起来很简单,但我仍然在 VBA 森林中前进,而且按照我的速度,它最终会更快地手工完成。但这似乎是学习一些 VBA 技巧的好机会。

TIA

更新:我想将文本带到“。\”并将其移动到不同的列,将其余部分保持在原处。

4

3 回答 3

3

VBA 是不必要的。获取单元格 A1:=MID(A1,FIND(".\",A1,1)+2,LEN(A1))中 .\ 之后的文本 获取 A1: 中 .\ 之前的文本=LEFT(A1,FIND(".\",A1,1)-1)

作为附加信息,Find返回字符串中.\出现的位置。它相当于InStr在 VBA 中。如果.\不在单元格中,它将显示#VALUE,因为我没有费心添加错误检查。

于 2012-09-23T02:18:24.913 回答
2

由于您似乎想就地修改单元格文本,因此需要 VBA。

cl在设置为要处理的单元格的循环内:

str = cl.value
i = Instr(str, ".\")
cl = Trim(Mid$(str, i + 2))  ' assuming you want to exclude the ".\"
cl.Offset(0, 1) Trim(Left$(str, i - 1)) ' Places the original first part one cell to the right
于 2012-09-23T02:27:31.117 回答
0

为了任何有同样问题的人,这里是经过全面测试的工作代码。

Function RE6(strData As String) As String
  Dim RE As Object, REMatches As Object

  Set RE = CreateObject("vbscript.regexp")
  With RE
      .MultiLine = False
      .Global = False
      .IgnoreCase = True
      .Pattern = "[0-9][0-9][0-9][0-9]B"
      RE6 = .test(strData)
  End With

  Set REMatches = RE.Execute(strData)
  If REMatches.Count > 0 Then
      RE6 = True
  Else
      RE6 = False
  End If
End Function

Sub territory()
Dim strTest As String, str As String, cl As Range
  strTest = ActiveCell.Value
  Set cl = ActiveCell
  If RE6(strTest) = True Then
      str = cl.Value
      i = InStr(str, ". ")
      cl = Trim(Mid$(str, i + 2))
      cl.Offset(0, 1) = Trim(Left(str, i - 1))
      cl.Offset(0, 2) = "Instance"
      MsgBox RE6(strTest)
  End If
End Sub
于 2012-09-25T16:39:58.763 回答