Если в Excel поле пустое, автоматически генерируйте NL-1, NL-2 ........ Nl-n по нажатию кнопки - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь создать кнопку в Excel таким образом, чтобы при нажатии на нее она генерировала 'NL-1, NL-2, ..... NL-n' до конца строки в Excel.

Например,

Sample No    Value       
123           1
245           2
              3
345           4
678           5
345           6
              7
              8
347           9
678          10
343          11
             12
098          13

При нажатии на кнопку

Sample No    Value       
123           1
245           2
NL-1          3
345           4
678           5
345           6
NL-2          7
NL-3          8
347           9
678          10
343          11
NL-4         12
098          13

я смог построить логику, используя третий ссылочный столбец и оператор IF, т.е. IF (A $ 2 = "", C $ 2) где C было" NL-1 ...... NL-99 ", и это дало мне решение, подобное этому

Sample No    Value     NL(Hidden)  
123           1          NL-1
245           2          NL-2
NL-3          3          NL-3
345           4          NL-4
678           5          NL-5
345           6          NL-6
NL-7          7          NL-7
NL-8          8          NL-8

Но я хотел бы иметь его в качестве второй таблицыкак показано! Любая помощь могла бы быть полезна. Спасибо.

1 Ответ

3 голосов
/ 09 октября 2019

Очевидно, что есть несколько способов решения этой проблемы, позвольте мне показать вам один из них:


Без VBA или вспомогательного столбца

  • Выберите столбец Диапазон A A2:A14
  • Нажмите F5 > Special> Empty Values> OK
  • Нажмите F2 или поместите курсор на панель формул
  • Введите следующую формулу: ="NL-"&COUNTIF($A$1:INDEX(A:A,ROW()-1),"NL-*")+1
  • Нажмите Ctrl + Введите

С VBA

Назначьте для вашей кнопки следующее:

Sub Test()

Dim lr As Long, x As Long
Dim rng1 As Range, rng2 As Range, cl As Range

With Sheet1 'Change this into the CodeName of the sheet you refering too
    lr = .Cells(.Rows.Count, 2).End(xlUp).Row
    Set rng1 = .Range("A1:A" & lr)
    If Application.WorksheetFunction.CountBlank(rng1) > 0 Then
        Set rng2 = Intersect(rng1, rng1.SpecialCells(xlCellTypeBlanks))
        x = 1
        For Each cl In rng2
            cl.Value = "NL-" & x
            x = x + 1
        Next cl
    End If
End With

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