Удалить текст после второго дефиса - PullRequest
1 голос
/ 28 ноября 2011

Я хочу удалить текст и дефис справа в Excel.

Пример моего столбца:

Fresh Start Recovery, Inc. - Wayne
FSA Property Mgmt - Danny
Georgia Securing Svcs, Inc. - Katrina
Georgia - SFFS - Joe & Roxana
Greenwood - Lonnie
Griffis Recovery, LLC - Tyler (5% WC)
Hi Cap, Inc. - Doug

Мне нужно, чтобы он выглядел так:

Fresh Start Recovery, Inc.
FSA Property Mgmt
Georgia Securing Svcs, Inc.
Georgia - SFFS
Greenwood
Griffis Recovery, LLC
Hi Cap, Inc.

У меня есть код, который удалит текст и дефис справа, но если у меня есть два дефиса, мне нужно удалить второй, мой код удаляет первый.

Dim iPos As String
Dim c As Range

For Each c In Range("a1:a" & Range("a" & Rows.Count).End(xlUp).Row)
iPos = InStr(1, c.Value, " - ")
If iPos > 0 Then
c.Value = Left(c.Value, iPos - 1)
End If
Next
End Sub

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

InStrRev находит последнее совпадение строки, оглядываясь назад.

В этом обновленном коде

  • используются вариативные массивы для скорости, а не циклы диапазона
  • тесты для«-» затем использует InStrRev, чтобы найти позицию последнего вхождения
  • использует строковую функцию Left$ вместо варианта Left

    Sub Test()
    Dim rng1 As Range
    Dim X
    Dim lngrow As Long
    Set rng1 = Range([a1], Cells(Rows.Count, "A").End(xlUp))
    X = rng1.Value2
    For lngrow = 1 To UBound(X)
    If InStr(X(lngrow, 1), " -") Then X(lngrow, 1) = Left$(X(lngrow, 1), InStrRev(X(lngrow, 1), " -", , vbBinaryCompare) - 1)
    Next
    rng1.Value2 = X
    End Sub
    
0 голосов
/ 28 ноября 2011

Использование InStrRev вместо InStr

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...