У меня есть код, который автоматически заполняет ряды в столбце А. Моя рабочая таблица защищена паролем и может редактировать только определенные ячейки.

столбец A является базой или количеством запрошенных данных. Пример:

Gee-2019-000
Gee-2019-001 ...

Я просто хочу, чтобы значение в A2, которое является Gee-2019-000, было изменено. Если я введу Gee-2020-000 на A2, остальное последует. Пример:

Gee-2020-000
Gee-2020-001 ...

Примечание: только А2 разрешено редактировать для запрошенного номера.

Вот мой код На самом деле я не знаю, как это сделать, но я попробовал что-то на всякий случай, но это не сработало.

Dim target As Excel.Range
    With target
        If .Address = Range("A2").Address Then
            .AutoFill Destination:=Range("A2:A1222"), Type:=xlFillDefault
        End If
    End With

2 ответа2

0

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

  • Скопируйте и вставьте этот макрос как стандартный модуль.

    Sub IncremntValue()
    
    Dim code As String
    code = InputBox("Enter Code")
    
    Range("B1").Value = code
    Range("B2").Formula = "=LEFT(B1,9)&TEXT(ROW(A1),""000"")"
    Range("B2").Select
    Selection.AutoFill Destination:=Range("B2:B200"), Type:=xlFillDefault
    
    End Sub
    

Вы получите такой результат:

  • Я предполагаю, что значение Gee-2019-000 .

Как только вы измените исходное значение в B1 или введете новый код, вы получите это:

NB

  • Использование INPUTBOX делает код более грамотным и быстрым.
  • Формула, которую я использовал =LEFT(B1,9)&TEXT(ROW(A1),""000"")" является ситуативной, которая может изменяться, если изменяется структура кода в ячейке B1 .
  • При необходимости измените ссылку на ячейку в формуле.

Отредактировано:

Чтобы лучше автоматизировать событие автозаполнения, используйте команды, заключенные в событие изменения Worsheet, а не простой макрос.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("$A$1")) Is Nothing Then


Range("A2").Formula = "=LEFT($A$1,9)&TEXT(ROW(A1),""000"")"
Range("A2").Select
Selection.AutoFill Destination:=Range("A2:A20"), Type:=xlFillDefault

End If

End Sub
0

.AutoFill Destination:=Range("A2:A1222"), Type:=xlFillDefault с:

Dim r As Range
Dim prefixVal As String
Dim i As Integer

i = 1
prefixVal = Left(Range("A2"), InStrRev(Range("A2"),"-"))
For Each r In Range("A3:A1222")
    r.Value = prefixVal & Format(i, "000")
    i = i + 1
Next r

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .