2016-03-08 7 views
-1

Мне нужна помощь в создании макроса для очистки листа csv, который содержит информацию о продажах продукта, включая метод доставки, который необходимо использовать. Есть около 10 наших продуктов, которые не могут быть отправлены с помощью обычных способов доставки, и мне нужно перезаписать метод доставки, который присваивается заказам, которые содержат эти продукты.VBA Как изменить содержимое ячейки на основе содержимого двух других ячеек в одной строке

  • Колонка А порядковые номера
  • Колонка B является продукт, приобретенный
  • Колонка C является метод

перевозка груза Если кто-то покупает несколько товаров в одном заказе номер заказа дублируется в следующая строка, метод доставки отображается только в первой строке с этим номером заказа, и каждый последовательный продукт, приобретенный в том же порядке, просто добавляет новую строку с названием продукта в колонку B

Мне нужно использовать VBA для проверки списка из 10 или около того конкретных продуктов в столбце B и обновления метода доставки для всего заказа (верхняя часть ячейки в столбце C, которая имеет такое же значение в ячейке A), если она содержит один из этих 10 продуктов.

Я думаю, что это нужно сделать что-то вроде этого:

  1. посмотреть на колонке B и поиск строки текста
  2. если ячейка соответствует критериям поиска посмотрите на значение в колонке А в то же самое строка
  3. найти первый экземпляр этого значения в колонке А
  4. заменить содержимое в колонке B в той же строке с новым методом доставки

Мне понадобится это в цикле, чтобы он выполнял его для каждого экземпляра строки поиска в столбце B в электронной таблице.

Я надеюсь, что этот вопрос ясен, я искал SO и не могу найти ответ на этот вопрос. Любая помощь или альтернативные исправления приветствуются.

ответ

0

Попробуйте следующий код, учитывая установки и привести к следующим скриншотам:

Sub test() 

Dim pRange As Range 
Dim nShip As Range 

Set pRange = Range("E2") 
pRange.Select 

While ActiveCell.Value <> "" 

Range("B2").Select 

While ActiveCell.Value <> "" 

If ActiveCell.Offset(0, -1).Value <> ActiveCell.Offset(-1, -1).Value Then 

Set nShip = ActiveCell.Offset(0, 1) 

End If 

If ActiveCell.Value = pRange.Value Then 

nShip.Value = pRange.Offset(0, 1).Value 
ActiveCell.Offset(1, 0).Select 

Else 

ActiveCell.Offset(1, 0).Select 

End If 

Wend 

Set pRange = pRange.Offset(1, 0) 
pRange.Select 

Wend 

End Sub 

Начало списка:

enter image description here

Результат после макроса:

enter image description here

+0

Привет за это от то, что я вижу, будет делать то, что мне нужно, - но есть одна проблема, которая выполняет итерацию через каждую строку X количество продуктов, которые мне нужно проверить. Это означает, что если я скажу 1000 строк и 10 продуктов, он выбирает 10 000 ячеек один за другим. В результате этот макрос занимает очень много времени для запуска, я блуждаю, если есть более эффективный способ поиска столбца, купленного продуктом, для любых элементов, находящихся в продуктах для поиска столбца? –

+0

Также я подумал, что один из способов, которым это может быть расколото, - это то, что он не ищет точное соответствие продуктов.Например, если у меня есть продукты для поиска в качестве стула и телевизора, тогда он будет рассматривать «Chair-large» и «Tv -42 inch» в списке приобретенных продуктов в качестве соответствия. Я не знаю, как это сделать? –

+0

Извините, не понял, сколько времени было сохранено, если обновить экран во время его запуска! Гораздо быстрее, когда ему не нужно беспокоиться о том, чтобы показать мне все! –

Смежные вопросы