Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сравнение переменной, больше/меньше, и удаление меньшей - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение переменной, больше/меньше, и удаление меньшей (Макросы/Sub)
Сравнение переменной, больше/меньше, и удаление меньшей
Espada Дата: Понедельник, 06.10.2014, 11:54 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 0 ±
Замечаний: 40% ±

Здравствуйте! есть код
[vba]
Код

Sub Main()

Dim wshDel As Worksheet, wshAdd As Worksheet
     Dim i As Long, j As Long, nDoc As String, dDoc As Date, bRem As Boolean, Nrec As String, Kolvo As Long
      
     ' Определить листы для сравнения
     Set wshDel = ThisWorkbook.Worksheets("Удалённые")
     Set wshAdd = ThisWorkbook.Worksheets("Добавленные")
      
     ' Просмотр первого листа со 2 строки до первой пустой ячейки в первом столбце
     i = 2
     Do While wshDel.Cells(i, 1) <> Empty
         nDoc = CStr(wshDel.Cells(i, 1)) ' Номер документа
         dDoc = CDate(wshDel.Cells(i, 2)) ' Дата документа
         Nrec = CStr(wshDel.Cells(i, 3)) 'Наименование
         Kolvo = CLng(wshDel.Cells(i, 5)) 'Количество

         bRem = False ' Совпадение пока не произошло
          
         ' Просмотр второго листа со 2 строки до первой пустой ячейки в первом столбце
         j = 2
         Do While wshAdd.Cells(j, 1) <> Empty
             ' Если найден документ, совпадающий по номеру и по дате
             If nDoc = CStr(wshAdd.Cells(j, 1)) And _
                dDoc = CDate(wshAdd.Cells(j, 2)) And _
                Nrec = CStr(wshAdd.Cells(j, 3)) And _
                Kolvo = CLng(wshAdd.Cells(j, 5)) Then
                 ' Удалить строку во втором документе
                 wshAdd.Rows(j).Delete Shift:=xlShiftUp
                 j = j - 1 ' На следующем шаге проверяем ту же строку
                 bRem = True ' Установить флаг "произошло совпадение"
             End If
             j = j + 1 ' Перейти к следующей строке на первом листе
         Loop
          
         ' Если во втором листе встречалось совпадение,
         ' то удалить все аналогичные строки на первом листе
         If bRem Then
             j = i
             Do While wshDel.Cells(j, 1) <> Empty
                 If nDoc = CStr(wshDel.Cells(j, 1)) And _
                    dDoc = CDate(wshDel.Cells(j, 2)) And _
                    Nrec = CStr(wshDel.Cells(j, 3)) And _
     Kolvo = CLng(wshDel.Cells(j, 5)) Then
                     ' Удалить строку в первом листе при совпадении
                     wshDel.Rows(j).Delete Shift:=xlShiftUp
                     j = j - 1 ' На следующем шаге проверяем ту же строку
                 End If
                 j = j + 1
             Loop
         Else
             ' Иначе перейти к следующей строке на первом листе
             i = i + 1
         End If
     Loop
      
     ' Освободить объекты листов
     Set wshDel = Nothing
     Set wshAdd = Nothing

End Sub
[/vba]
здесь идёт сравнение таблиц на двух листах, по четырём переменным(nDoc,dDoc,Nrec,Kolvo). Сравнение идёт по полному совпадению... у меня такой вопрос: можно ли сделать, чтобы сравнение по переменной Kolvo было не по полному совпадению, а больше/меньше. т.е. если на первом листе KOlvo будет равно 3, а на втором 5-и, то строка удаляется с первого листа, а если на первом 5, а на втором 3, то строка удаляется со второго листа. а если ровны удаляются обе.
 
Ответить
СообщениеЗдравствуйте! есть код
[vba]
Код

Sub Main()

Dim wshDel As Worksheet, wshAdd As Worksheet
     Dim i As Long, j As Long, nDoc As String, dDoc As Date, bRem As Boolean, Nrec As String, Kolvo As Long
      
     ' Определить листы для сравнения
     Set wshDel = ThisWorkbook.Worksheets("Удалённые")
     Set wshAdd = ThisWorkbook.Worksheets("Добавленные")
      
     ' Просмотр первого листа со 2 строки до первой пустой ячейки в первом столбце
     i = 2
     Do While wshDel.Cells(i, 1) <> Empty
         nDoc = CStr(wshDel.Cells(i, 1)) ' Номер документа
         dDoc = CDate(wshDel.Cells(i, 2)) ' Дата документа
         Nrec = CStr(wshDel.Cells(i, 3)) 'Наименование
         Kolvo = CLng(wshDel.Cells(i, 5)) 'Количество

         bRem = False ' Совпадение пока не произошло
          
         ' Просмотр второго листа со 2 строки до первой пустой ячейки в первом столбце
         j = 2
         Do While wshAdd.Cells(j, 1) <> Empty
             ' Если найден документ, совпадающий по номеру и по дате
             If nDoc = CStr(wshAdd.Cells(j, 1)) And _
                dDoc = CDate(wshAdd.Cells(j, 2)) And _
                Nrec = CStr(wshAdd.Cells(j, 3)) And _
                Kolvo = CLng(wshAdd.Cells(j, 5)) Then
                 ' Удалить строку во втором документе
                 wshAdd.Rows(j).Delete Shift:=xlShiftUp
                 j = j - 1 ' На следующем шаге проверяем ту же строку
                 bRem = True ' Установить флаг "произошло совпадение"
             End If
             j = j + 1 ' Перейти к следующей строке на первом листе
         Loop
          
         ' Если во втором листе встречалось совпадение,
         ' то удалить все аналогичные строки на первом листе
         If bRem Then
             j = i
             Do While wshDel.Cells(j, 1) <> Empty
                 If nDoc = CStr(wshDel.Cells(j, 1)) And _
                    dDoc = CDate(wshDel.Cells(j, 2)) And _
                    Nrec = CStr(wshDel.Cells(j, 3)) And _
     Kolvo = CLng(wshDel.Cells(j, 5)) Then
                     ' Удалить строку в первом листе при совпадении
                     wshDel.Rows(j).Delete Shift:=xlShiftUp
                     j = j - 1 ' На следующем шаге проверяем ту же строку
                 End If
                 j = j + 1
             Loop
         Else
             ' Иначе перейти к следующей строке на первом листе
             i = i + 1
         End If
     Loop
      
     ' Освободить объекты листов
     Set wshDel = Nothing
     Set wshAdd = Nothing

End Sub
[/vba]
здесь идёт сравнение таблиц на двух листах, по четырём переменным(nDoc,dDoc,Nrec,Kolvo). Сравнение идёт по полному совпадению... у меня такой вопрос: можно ли сделать, чтобы сравнение по переменной Kolvo было не по полному совпадению, а больше/меньше. т.е. если на первом листе KOlvo будет равно 3, а на втором 5-и, то строка удаляется с первого листа, а если на первом 5, а на втором 3, то строка удаляется со второго листа. а если ровны удаляются обе.

Автор - Espada
Дата добавления - 06.10.2014 в 11:54
0beorn Дата: Вторник, 07.10.2014, 10:46 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: -5 ±
Замечаний: 0% ±

Excel 2010
Прикрепите файл для примера.
 
Ответить
СообщениеПрикрепите файл для примера.

Автор - 0beorn
Дата добавления - 07.10.2014 в 10:46
alex77755 Дата: Вторник, 07.10.2014, 12:11 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Цитата
вопрос: можно ли сделать

Ответ: Можно!


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
Сообщение
Цитата
вопрос: можно ли сделать

Ответ: Можно!

Автор - alex77755
Дата добавления - 07.10.2014 в 12:11
Espada Дата: Вторник, 07.10.2014, 15:34 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 121
Репутация: 0 ±
Замечаний: 40% ±

Прикрепите файл для примера

да конечно
К сообщению приложен файл: _-__-.xlsx (12.2 Kb) · 4644225.xlsx (12.4 Kb)
 
Ответить
Сообщение
Прикрепите файл для примера

да конечно

Автор - Espada
Дата добавления - 07.10.2014 в 15:34
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение переменной, больше/меньше, и удаление меньшей (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!