Проверить столбец, если значения отличаются между строками, и вставить номер поочередно

#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 уже принял ответ