Удалить ведущую точку с запятой в ячейке - PullRequest
0 голосов
/ 06 августа 2020

У меня есть предоставленный мне код VBA, который удалит начальную точку с запятой в заданной ячейке в столбце c. Однако некоторые ячейки в этом столбце начинаются с двух или более точек с запятой. Мне нужно пропустить l oop и удалить все точки с запятой в начале. например .. ;;; машина; ссуда; сбережения; дом - машина; ссуда; сбережения; дом Я хочу оставлять точки с запятой между элементами .... просто удалите ведущие. Я не знаю, как добавить правильный l oop в приведенный ниже код. Любая помощь приветствуется. Спасибо.

код:

   With ThisWorkbook.Worksheets("Sheet1")
      lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row
      With Range("Q2:Q" & lastrow)
       .Value = Evaluate(Replace("IF(LEFT(@,1)="";"",replace(@,1,1,""""),@)", "@", .Address))
      End With
   End With

Ответы [ 3 ]

0 голосов
/ 06 августа 2020
.Value = Evaluate(Replace("IF(LEFT(@,1)="";"",MID(@,FIND(LEFT(SUBSTITUTE(@,"";"",""""),1),@),LEN(@)),@)", "@", .Address))

Это займет всю строку, определит первый символ без точки с запятой (удалите все точки с запятой, возьмите первый оставшийся символ в LEFT), затем FIND там, где он появляется в исходном тексте, и вернуть всю строку, начиная с этой точки.

MID(A1, 'Extract from the text
    FIND( 'Starting with
        LEFT(SUBSTITUTE(A1,";",""),1), 'The first non-semicolon character
        A1), 'in the text
    LEN(A1)) 'until the end of the text

(NB. Если в строке нет символов, отличных от точки с запятой, например «;;;;;», то будет возвращена вся строка. Вы можете добавить дополнительный оператор IF для проверки LEN(SUBSTITUTE(@,";",""))>0, если вы не хотите этого результата)

0 голосов
/ 06 августа 2020

Насколько я понимаю, у вас есть текст в ячейке, в которой может быть 2 или более ";" в начале строки. И вы sh убираете их из ячейки. Это проходит по ячейке и удаляет любое начало ";" для тебя. Затем он переходит к следующей ячейке и повторяется, пока не встретит пустую ячейку.

Private Sub whatever()

Dim myString As String
myString = Selection.Cells.Value

Do While IsEmpty(Selection.Cells.Value) = False
    Do While Left(myString, 1) = ";"
        Selection.Cells.Value = Right(myString, Len(myString) - 1)
        myString = Selection.Cells.Value
    Loop

    ActiveCell.Offset(1).Select
    myString = Selection.Cells.Value
Loop
0 голосов
/ 06 августа 2020

L oop через каждую ячейку в диапазоне, а затем l oop через символы, пока вы не получите тот, который не является ";".

    Dim cell As Variant
    Dim lastrow As Long
    Dim mystr As String
    
    With ThisWorkbook.Worksheets("Sheet1")
        lastrow = .Cells(.Rows.Count, 1).End(xlUp).Row
        For Each cell In Range("Q2:Q" & lastrow)
            mystr = cell.Value
            Do Until Left(mystr, 1) <> ";"
                mystr = Right(mystr, Len(mystr) - 1)
            Loop
            cell.Value = mystr
        Next cell
    End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...