Как вставить определенное значение в столбце в Excel VBA? - PullRequest
2 голосов
/ 04 ноября 2019

Я пытаюсь вставить этот символ "-" в начале каждого текста в столбце F.

Мой столбец F выглядит следующим образом:

BP850
BP851
BT100
GP160
GP161

У меня уже естьпопытался использовать этот код безуспешно:

Option Explicit

Sub test()

    Dim LastRow As Long, i As Long
    Dim str As String

'Change sheet if needed
    With ThisWorkbook.Worksheets("Sheet1")
        'Find the last row of column F
        LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row

'Loop column F
        For i = 1 To LastRow
            'Replace the first occurance
            str = Replace(.Range("F" & i).Value, "", "-", 1, 1)
            .Range("F" & i).Value = str
        Next i

    End With

End Sub

Результат, который я ожидаю, таков:

-BP850
-BP851
-BT100
-GP160
-GP161

Я очень надеюсь на вашу помощь, спасибо.

Ответы [ 6 ]

3 голосов
/ 04 ноября 2019

В качестве альтернативы вы можете попробовать использовать .Evaluate. Это исключает необходимость в любом цикле:

enter image description here

Option Explicit

Sub test()

    Dim LastRow As Long
    Dim rng As Range

'Change sheet if needed
    With ThisWorkbook.Worksheets("Sheet1")
        'Find the last row of column F
        LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row
        Set rng = .Range("F1:F" & LastRow)
        rng.Value = .Evaluate("""'-""&" & rng.Address)
    End With

End Sub

enter image description here

2 голосов
/ 04 ноября 2019

Посмотрите, поможет ли следующий подход. Также будет проверяться

  1. Ячейка не пуста

  2. Ячейка не начинается с "-"

, который должен помочь в случае случайного перезапуска макроса!

Option Explicit

Sub test2()
    Dim LastRow As Long, i As Long
    'Change sheet if needed
    Application.ScreenUpdating = False
    With ThisWorkbook.Worksheets("Sheet1")
        'Find the last row of column F
         LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row
        'Loop column F
        For i = 1 To LastRow
            If Len(.Range("F" & i).Value) > 0 And Left(.Range("F" & i).Value, 1) <> "-" Then _
            .Range("F" & i).Value = "-" & .Range("F" & i).Value
        Next i
    End With
    Application.ScreenUpdating = True
End Sub
2 голосов
/ 04 ноября 2019

попробуйте это, т.е. добавьте «-» перед значением. Обратите внимание на одинарную кавычку перед -

For i = 1 To lastRow
  If .Range("F" & i).Value <> "" Then
    If Left(.Range("F" & i).Value, 1) <> "-" Then
      .Range("F" & i).Value = "'-" & .Range("F" & i).Value
    End If
  End If
Next i
2 голосов
/ 04 ноября 2019

Ваш str = Replace(.Range("F" & i).Value, "", "-", 1, 1) имеет проблемы. Измените его следующим образом:

    For i = 1 To LastRow
        .Range("F" & i).Value = "-" & .Range("F" & i).Value
    Next i

Нет необходимости использовать str переменную здесь.

2 голосов
/ 04 ноября 2019

Вместо использования замены просто объедините "-" перед str

Sub test()

    Dim LastRow As Long, i As Long
    Dim str As String

'Change sheet if needed
    With ThisWorkbook.Worksheets("Sheet1")
        'Find the last row of column F
        LastRow = .Cells(.Rows.Count, "F").End(xlUp).Row

'Loop column F
        For i = 1 To LastRow
            'Replace the first occurance
            str = "-" & .Range("F" & i).Value  '<== EDIT
            .Range("F" & i).Value = str
        Next i

    End With

End Sub
1 голос
/ 04 ноября 2019
Option Explicit

Sub test()

    Dim LastRow As Long, i As Long
    Dim AdditionString As String, CellString As String, CompleteString As String

    AdditionString = "'-"

    With ThisWorkbook.Worksheets("Sheet1")

         LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

         For i = 1 To LastRow

            CellString = .Range("A" & i).Value
            CompleteString = AdditionString & CellString
            .Range("A" & i).Value = CompleteString

         Next i

    End With

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