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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 12.02.2019, 14:53   #1
Alex_Dom
Пользователь
 
Регистрация: 23.11.2018
Сообщений: 21
Репутация: 10
По умолчанию 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, 16:26   #2
Казанский
Профессионал
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
Репутация: 938
По умолчанию

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

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

Вместо существующего цикла 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, 11:57   #5
Alex_Dom
Пользователь
 
Регистрация: 23.11.2018
Сообщений: 21
Репутация: 10
По умолчанию

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


15:01.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.