Я по-прежнему новичок в использовании диапазонов/find/findnext в VBA и искал некоторую помощь. Я успешно реализовал одиночный цикл find -> findnext, однако мне было интересно, можно ли использовать findnext с использованием двух находок.Использование findnext с двумя находок
Код, в котором я его использую, следующий. Для простоты я использую инвентарь для пиццы.
Суть в том, что у меня есть электронная таблица, а в столбце I - столбец для каталогов (сыр, мясо, вегетарианец), в то время как колонка H (смещенная часть) является типом - (Mozzarella, Parmesean, Pepperoni и т. Д. И т. Д.). То, что я хочу сделать, - это составить список разных типов одной категории в определенном столбце без дубликатов.
Например, я хочу найти все экземпляры слова «Сыр» в столбце I. Я хочу, чтобы код сначала нашел слово «сыр», затем дайте мне тип (Cheddar Mozzarella и т. Д.). Вторая находка - проверить, существует ли этот тип в моем последнем столбце. Если он уже присутствует в столбце (вторая функция поиска = ничего), то он переходит к следующему «сыру». Если он новый (вторая функция поиска = ничего), я бы хотел, чтобы он поместил тип в столбец и продолжаем.
Как и ошибка, и учитывая, что синтаксис почти идентичен моему предыдущему Find/Findnext, только с добавлением дополнительного FindNext, я понимаю, что он может ссылаться на неправильный. Есть ли способ избежать этого?
Примечание: Я понимаю, что могу легко заполнить все типы в последнем столбце, удалить дубликаты, а затем отсортировать их, но это кажется несколько неэлегантным и трудоемким. Мне было интересно, есть ли более удобный способ по строкам, которые я пытаюсь сделать.
a = 2
Set c = Range("I:I").Find("Cheese")
firstadd = c.Address
If Not c Is Nothing Then
Do
temp = c.Offset(0, -1)
Set d = Range("BA:BA").Find(temp)
If d Is Nothing Then
Cells(a, 53) = temp
a = a + 1
End If
Set c = Range("I:I").FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstadd
End If
End Function
я должен бросить в той оговоркой, что я не могу искать взыскивает, так как они довольно длинные номера деталей/описания (т.е. весь столбец может иметь записи, как «000cheese AB» и «0cheese 00045». Будет ли Проверка instr в части c.value приемлема? – Lzkatz
Да, просто используйте 'If InStr (c.Value,« Cheese ») Тогда' вместо 'If c.Value =" Cheese "Then' – 2tsai
Прекрасно работает. Спасибо. – Lzkatz