Если первые символы ячейки являются GUF, то удалите GUF, если нет, оставьте ее пустой

#excel #vba #if-statement #character

#excel #vba #if-оператор #символ

Вопрос:

Я все еще новичок в программировании, поэтому приношу извинения, если я не все понимаю.

Мне нужно проверить каждую ячейку D3: D5000, начинаются ли они с GUF. Затем удалите из нее GUF. Остальное ничего не делайте.

Это то, что я пытался использовать, но я получаю сообщение об ошибке Do ohne Loop:

 Sub RemoveGUFfromcellsstartingwithGUF()

Range("D3").Select
    Selection.End(xlDown).Offset(1, 0).Select
    ActiveCell = "end"

    Range("B1").Select

    Do Until ActiveCell = "end"
    If ActiveCell = "GUF*" Then
    ActiveCell.Value = Mid(Cell, 4, 999999)
    End If
    ActiveCell.Offset(1, 0).Select



End Sub
  

Спасибо за любую помощь / предложения

Ячейки с данными

Комментарии:

1. Эмм, как насчет использования поиска / замены? Выполните поиск "GUF" на место с помощью "" .

Ответ №1:

Во-первых, при циклическом просмотре ячеек лучше всего использовать For each cell in cells , тогда не нужно изменять выделение.

Во-первых, задайте диапазон, в котором вы хотите, чтобы он выполнялся.

 Sub RemoveGUFfromcellsstartingwithGUF()
    dim first_cell as Range 
    dim last_cell as Range 
    dim rng as Range
    set first_cell = ActiveSheet.Range("D1") 'first cell of your range
    set last_cell = ActiveSheet.Range("D5000") 'last cell of your range
    set rng = Range(first_cell, last_cell) 'range from first_cell to last_cell

     For Each cell in rng.cells 'looping through cells of the range
        'What you do here will be done to every cell.
        if left(cell.value, 3) = "GUF" then cell.value = Mid(cell.value,4)
     Next cell
End Sub
  

Я надеюсь, что это поможет.

Ответ №2:

Это то, что вы пытаетесь?

 Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long, i As Long

    Set ws = Sheet1 '<~~ Change this to the relevant sheet

    With ws
        '~~> Find last row in Col D
        lRow = .Range("D" amp; .Rows.Count).End(xlUp).Row

        '~~> Loop through cell in Col D
        For i = 3 To lRow
            If .Range("D" amp; i).Value Like "GUF*" Then
                .Range("D" amp; i).Value = Mid(.Range("D" amp; i).Value, 4)
            End If
        Next i
    End With
End Sub
  

Комментарии:

1. Как насчет изменения If .Range("D" amp; i).Value Like "GUF*" Then на If Left(.Range("D" amp; i).Value,3) = "GUF" Then

2. @Yane: Могу я спросить, почему я должен это менять? 🙂 Хотя вы также можете использовать Left() . много способов освежевать кошку…

3. неудачный выбор слов, то, что он должен сказать, это » Я бы использовал Left() вместо … 🙂

4. @Yane: А, хорошо… Теперь это личный выбор 🙂

5. @Cedric обратите внимание, что в Set ws = Sheet1 the Sheet1 указано VBA-название листа, а не название на вкладке. Если вы хотите использовать название вкладки, используйте Set ws = ThisWorkbook.Worksheets("EVA") вместо этого.