#vba #excel
#vba #excel
Вопрос:
Я пытаюсь создать новые серийные идентификаторы на основе данных в двух ячейках в MS Excel 2010.
Первая ячейка содержит текущий серийный идентификатор, например, A ^ B Вторая ячейка содержит количество, например, 4
Результат, который я хочу получить в третьей ячейке, должен идентифицировать число во второй ячейке и последовательно объединять значение в третьей ячейке, т.е. Выход из первой и второй ячеек, указанных в приведенном выше примере, должен быть
A ^ B ^ 1 A ^ B ^ 2 A ^ B ^ 3 A ^ B ^ 4 (все в разных ячейках столбца)
У меня есть 500 серийных номеров с различным количеством величин для каждого, поэтому я хотел бы запросить помощь с процедурой или способом, который может помочь мне быстро создать третью ячейку.
Спасибо.
Ответ №1:
Вы говорите, что третья ячейка должна быть объединена, но затем говорите, что она должна быть в разных ячейках…. Если вы хотите, чтобы они были объединены, тогда UDF должен быть довольно простым..
что-то вроде:
Function myfunction(Ftext As String, Ntimes As Integer) As String
Dim chk As Integer
chk = 1
Do While chk <= Ntimes
myfunction = myfunction amp; Ftext amp; chk amp; " "
chk = chk 1
Loop
myfunction = Trim(myfunction)
End Function
Вы бы просто использовали это на листе, как и любую другую функцию
=myfunction(cell1,cell2)
Комментарии:
1. Спасибо за функцию. Я попробовал, но это не дало никакого результата. Просто показывает #VALUE в третьем столбце при попытке вызвать эту функцию.
2. Чтобы уточнить мое утверждение, я имел в виду, что ячейки 1 и 2 должны объединяться последовательно, но результат должен быть показан в третьем столбце. Например, если у нас есть следующие входные данные: столбец 1, столбец 2 A_12 ^ 2, 3 A_37 ^ B, 4 На основе этого ввода, вывод столбца 3 должен быть столбцом 3 A_12 ^ 2 ^ 1 A_12 ^ 2 ^ 2 A_12 ^ 2 ^ 3 A_37 ^ B ^ 1 A_37 ^ B ^2 A_37 ^ B ^ 3 A_37 ^ B ^ 4
Ответ №2:
Вот пример использования макроса для заполнения всех ячеек:
Sub CreateSerialNumbers()
Dim i As Integer, j As Integer
With Sheets("Sheet1") 'Change to your sheet name
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row 'Assume we start in row 2 and work to the bottom of the sheet
For j = 1 To .Cells(i, 2).Value
.Cells(i, j 2).Value = .Cells(i, 1).Value amp; "^" amp; j
Next j
Next i
End With
End Sub
Предполагается, что ваши данные начинаются со строки 2, и что сериалы находятся в столбце A, а числа — в столбце B.
Комментарии:
1. Спасибо за код. Я добавил его, но он выдает ошибку несоответствия типов, хотя я проверил типы обоих входных данных.
2. Я бы предположил, что у вас есть нечисловые данные во втором столбце, в котором указаны цифры. Используйте немедленное окно, чтобы найти значение i при возникновении ошибки. Это покажет вам строку с «плохими» данными.