#excel #vba
#excel #vba
Вопрос:
Excel-таблица
| A | B
-----|--------------|-----------------
1 | Product_A |
2 | Product_A |
3 | Product_A |
4 | Product_B | 1
5 | Product_C | 2
6 | Product_C |
7 | Product_D | 1
8 | Product_E | 2
9 | Product_E |
10 | Product_E |
11 | Product_F | 1
12 | |
В приведенной выше таблице Excel у меня есть список разных продуктов Column A
.
Продукт может отображаться несколько раз.
В настоящее время я использую это VBA
, чтобы проверить Column A
, переключается ли продукт между текущей и предыдущей строкой.
Если продукты переключаются, номер 1
вставляется Column B
.
Sub FilB()
Dim N As Long
N = Cells(Rows.Count, "A").End(xlUp).Row
Range("B2:B" amp; N).Formula = "=IF(A2=A1,"""",1)"
End Sub
Однако теперь я хочу включить условие, что если предыдущее вставленное число было 1
следующим, должно быть 2
следующее число, и если предыдущее вставленное число было 2
следующим, должно быть 1
следующее число.
Как мне изменить VBA
для достижения этой цели?
Ответ №1:
Чередующиеся значения
Excel
=IF(A2=A1,"",MOD(COUNT(B$1:B1),2) 1)
VBA
Option Explicit
Sub FilB()
Dim n As Long
n = Cells(Rows.Count, "A").End(xlUp).Row
Range("B2:B" amp; n).Formula = "=IF(A2=A1,"""",MOD(COUNT(B$1:B1),2) 1)"
End Sub
Ответ №2:
Вы могли бы сделать это с помощью формулы. Скопируйте приведенную ниже формулу в B2, а затем полностью вниз
=ЕСЛИ($ A2<>$ A1, ЕСЛИ(ISNUMBER($B1), $ B1 1, 1), «»)
РЕДАКТИРОВАТЬ 1
Согласно комментариям, ниже приведена обновленная формула
=ЕСЛИ($ A2<>$ A1, ЕСЛИ(ИЛИ($ B1= 2, $ B1 = «»), 1, 2), «»)
Комментарии:
1. Будет ли это чередоваться между 1 и 2?
2. Я думаю, вы получили свой ответ, но просто чтобы объяснить, сначала проверяется, отличаются ли значения в столбце A , если да, то затем проверяется, имеет ли строка выше в столбце B номер. Если это произойдет, он добавит единицу к этому числу и поместит его в столбец текущей строки B. Если этого не произойдет, он поместит 1 в столбец текущей строки B
3. Zac — OP хочет, чтобы он чередовался между 1 и 2, а не продолжал добавлять 1, и я не вижу, что ваша формула делает это?
4. Если вы введете
A, B, C, D
диапазонA2:A5
, то ваши формулы в диапазонеB2:B5
вернутся1, 2, 3, 4
вместо1, 2, 1, 2
.5. @SJR и VBasic2008: абсолютно правильно. Я пропускаю требования read OP. Я удалю ответ, поскольку OP уже принял ответ