0

この場合、セル内の最初のテキストを抽出し、残りはそのまま残したいと思います。たとえば、一連のセルには以下が含まれます。

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

前の行のフォーマットが異なり、これらの最後の数行は処理したい外れ値であるため、Text to columns を使用せずにこれを分割したいと考えています。

正規表現でできると思ったのですが、少し複雑です。

私のアルゴリズムのアイデアは次のとおりです。1.必要なテキストを取得します(どの関数またはカスタムサブがそれを行うでしょうか?) 2.テキストを新しい場所に貼り付けます 3.セルからテキストを切り取り、残りのテキストを残します。

単純に思えますが、私はまだ VBA フォレストを進んでいます。このままでは、手動で実行する方が速くなります。しかし、これは VBA のトリックを学ぶ良い機会のようです。

ティア

更新:「.\」までのテキストを別の列に移動し、残りの部分はそのままにしたいと考えています。

4

3 に答える 3

3

VBAは不要です。セル A1 の .\ の後のテキストを取得するには: =MID(A1,FIND(".\",A1,1)+2,LEN(A1))A1 の .\ の前のテキストを取得するには: =LEFT(A1,FIND(".\",A1,1)-1).

追加情報として、表示Findされる文字列内の配置を返します.\InStrVBAと同等です。エラーチェックをわざわざ追加しなかったので、.\がセルにない場合は と表示されます。#VALUE

于 2012-09-23T02:18:24.913 に答える
2

Since you seem to want to modify the cell text in place, VBA will be required.

Inside a loop that sets cl to the cell to be processed:

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 に答える