Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 12.02.2019, 13:53   #1
Alex_Dom
Пользователь
 
Регистрация: 23.11.2018
Сообщений: 21
По умолчанию VBS как написать цикл Do While... Loop с исключением повторений

Есть столбецы с повторяющимися значениями. Есть цикл Do While... Loop обрабатывающий этот столбец до пустого значения. Как избавиться от повторяющихся значений?
Сравнивать нужно по двум ячейкам
Cells(i, 2) И Cells(i, 3)
Если строки равны по этим параметрам то записывать только одну.
Цикл:
Код:
'дизайны
        Set FILES = xml.createElement("FILES")
  i = Range("FirstID").Row
  Do
			Set FILE = xml.createElement("File")
			FILE.setAttribute "ID", Cells(i, 1)
			FILE.Text = Cells(i, 2) ' название файла 

			FILE.setAttribute "Angle", Cells(i, 3) ' угол поворота 
			objRoot.appendChild FILE
      i = i + 1
 'пока не будет пустой ячейки с именем файла
 Loop Until Cells(i, 2) = ""
		objRoot.appendChild FILES
Alex_Dom вне форума Ответить с цитированием
Старый 12.02.2019, 15:26   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Можно применить к диапазону .RemoveDuplicates (Данные - Работа с данными - Удалить дубликаты).
Или в VBA сначала собрать в словаре ключи cells(i,2) & vbtab & cells(i,3) , потом сплитить ключи и записывать в хмл.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 13.02.2019, 14:01   #3
Alex_Dom
Пользователь
 
Регистрация: 23.11.2018
Сообщений: 21
По умолчанию

И как такое через словари сделать?
Alex_Dom вне форума Ответить с цитированием
Старый 13.02.2019, 15:06   #4
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Вместо существующего цикла Do-Loop следующее. Не проверял - файла-примера нет.
Код:
  With CreateObject("scripting.dictionary")
    .comparemode = vbTextCompare 'не различать регистр
    Do
      .Item(Cells(i, 2) & vbTab & Cells(i, 3)) = Cells(i, 1)
      i = i + 1
    Loop Until Cells(i, 2) = ""  'пока не будет пустой ячейки с именем файла

    For Each x In .keys
      Set FILE = XML.createElement("File")
      FILE.setAttribute "ID", .Item(x)
      FILE.Text = Split(x, vbTab)(0)                          ' название файла
      FILE.setAttribute "Angle", Split(x, vbTab)(1)            ' угол поворота
      objRoot.appendChild FILE
    Next
  End With
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 15.02.2019, 10:57   #5
Alex_Dom
Пользователь
 
Регистрация: 23.11.2018
Сообщений: 21
По умолчанию

Вот файл.
Заменил Do-Loop на ваш код. Результатат нет т.к. в XML выдаёт
<File ID="" Angle=""></File>
Вложения
Тип файла: xls SPUSK_test.xls (48.5 Кб, 9 просмотров)
Alex_Dom вне форума Ответить с цитированием
Старый 15.02.2019, 10:59   #6
Alex_Dom
Пользователь
 
Регистрация: 23.11.2018
Сообщений: 21
По умолчанию

Разобрался.
Нужно было i поправить
i = Range("FirstID").Row 'возвращаем номер строки первой ячейки в таблице дизайнов

Спасибо.
Alex_Dom вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл с известным числом повторений (Цикл с параметром) roykami11er Паскаль, Turbo Pascal, PascalABC.NET 4 19.12.2018 20:08
Цикл с известным числом повторений roykami11er Паскаль, Turbo Pascal, PascalABC.NET 4 13.12.2018 12:30
написать процедуры для “Цикл For ... Next ” и «Цикл Do ... Loop» по ниже приведенному условию Кристина_Патачиц Microsoft Office Excel 3 17.04.2013 16:01
Цикл с известным числом повторений. Getman Помощь студентам 9 09.06.2012 13:26
Цикл с заданным числом повторений Extrem_um Помощь студентам 3 02.04.2008 20:00


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840