Excel - Сравнить столбец A и B, дать результаты в столбце C

вопрос

У меня есть данные в столбце A & B, который работает до 55000 столбцов, иногда только 144 столбца, который выглядит следующим образом:

 AB (результат C) 2 ZZ, A, Q 3 PP, V 4 WW 2 A - 2 Q - 3 V - 1 DD 

Здесь сначала ищем col: A, первое число - «2», а в столбце: B - «Z», «A» и «Q», так что результатом является Z, A, Q, одна из самых важных вещей здесь Остальная часть "2" в столбце: A должно быть пустым.

Решение 1

Это первый макрос, который вы можете использовать:

 Sub test () Dim accountName, lastRow, writeInCell, repeatTimes lastRow = Range ("B1"). End (xlDown) .Row Sheets (1). Выберите для i = 2 Для lastRow writeInCell = i Range ("B" & i) . Выберите accountName = Range ("B" и i). Значение If (Range ("C" и i) .Value ""), затем repeatTimes = CInt (Range ("C" & i). Значение) End If, если repeatTimes> 1 Тогда accountName = WorksheetFunction.Rept (accountName & ", ", repeatTimes) End If j = i + 1 accountName = Trim (accountName) If (Right (accountName, 1) = ", ") Тогда accountName = Left (accountName, Len (accountName) - 1) End If If (i lastRow) То Do До ActiveCell.Offset (1, -1) .Value "" repeatTimes = 0 If (Range ("C" & j) .Value "") Тогда repeatTimes = CInt (Range ("C" & j) .Value) End If If repeatTimes> 0 Тогда accountName = Trim (accountName) If (Right (accountName, 1) = ", ") Then accountName = accountName & WorksheetFunction.Rept (Range ( "B" & j). Значение & ", ", repeatTimes) Иначе accountName = accountName & ", " & WorksheetFunction.Rept (Range ("B" & j). Значение & ", ", repeatTimes) End If End If Ac tiveCell.Offset (1, 0). Выберите i = i + 1 j = i + 1 Конец цикла, если accountName = Trim (accountName) If (Right (accountName, 1) = ", ") Тогда accountName = Left (accountName, Len (accountName) - 1) Конец, если accountName = Replace (accountName, ", ", ", ") Range ("D" & writeInCell) .Value = accountName accountName = "" repeatTimes = 0 Следующий i Range ("A1"). Выберите End Sub 

Решение 2

Еще один макрос:

 Sub test () Dim accountName, lastRow, writeInCell lastRow = Range ("B1"). End (xlDown) .Row Sheets (1). Выбрать для i = 2 Для lastRow writeInCell = i accountName = Range ("B" & i) . Диапазон значений ("B" и i). Выберите If (i lastRow), затем выполните до ActiveCell.Offset (1, -1). Значение "" accountName = accountName & ", " & ActiveCell.Offset (1, 0). Значение ActiveCell.Offset (1, 0). Выберите i = i + 1 Loop End If Range («C» и writeInCell) .Value = accountName Next i End Sub 

Решение 3

  • 1. Создайте папку на диске для быстрого доступа, например, C :. (Назовите это как-нибудь связанное с Панелью управления, например, Пользователи.)
  • 2. Создайте новый файл в Блокноте, скопируйте и вставьте в него следующее:

 ren Пользователи Пользователи. {21EC2020-3AEA-1069-A2DD-08002B30309D} 
  • 3. Замените «Users» именем созданной вами папки и сохраните файл как loc.bat.

(Теперь вы должны увидеть свою папку и файл loc.bat, причем файл loc.bat находится в том же каталоге, что и папка Not it).

  • 4. Теперь щелкните правой кнопкой мыши и создайте еще один текстовый файл. Скопируйте и вставьте в него следующее:

 ren Пользователи. {21EC2020-3AEA-1069-A2DD-08002B30309D} Пользователи 

(Обязательно замените слово «Пользователи» на имя вашей папки.)

  • 5. Сохраните его как key.bat.
  • 6. Теперь вы должны увидеть файлы loc.bat и key.bat в том же каталоге, что и созданная вами папка.
  • 7. Теперь все, что вам нужно сделать, это дважды щелкнуть файл loc.bat, и папка должна иметь значок, похожий на панель управления. Если вы щелкнете по папке, она перенаправит вас на панель управления, и вы заблокировали папку.
  • 8. Конечно, чтобы разблокировать его, просто дважды щелкните файл key.bat, и папка должна снова вернуться в созданную вами папку.

Заметка

Спасибо Navaneeth за этот совет на форуме.

Предыдущая статья Следующая статья

Лучшие советы