Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скинуть только уникальные записи и проссумировать, VBA.xl 
:(
    Опции темы
Staruha
Дата 1.3.2005, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Код

Dim i As Integer
Dim d As Integer
Dim dd As Integer
dd = UsedRange.Rows.Count
Range("A3", "L" & dd).Value = "" 'очистка листа
d = Лист2.UsedRange.Rows.Count

A = InputBox("Введите название месяца", "Отчет за месяц", "")
 For q = 2 To d
        If Лист2.Range("A" & q).Value = A Then

     i = i + 1 'кол.записей в месяце

     Range("A" & i + 1).Value = Лист2.Range("B" & q).Value 'данные за месяц
    Range("B" & i + 1).Value = Лист2.Range("C" & q).Value

End If
Next
Range("A1:B21").AdvancedFilter Action:=xlFilterInPlace, Unique:=True 'вывод уникальных записей.
End Sub
'На Лист2 заносятся записи по столбцам: Месяц! Бригада! Объект! Часы!
Данный код выводит все записи за месяц на лист,а потом фильтрует.
Это все ,что получилось.А хотелось бы ,что бы на лист сразу сбрасывались только уникальные записи,
т.к. нужно по ним проссумировать столбец Часы. smile

Это сообщение отредактировал(а) Старуха - 1.3.2005, 14:52


--------------------
Возмездие настигнет
PM MAIL   Вверх
Akina
Дата 1.3.2005, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Погоди... ты слизываешь данные с листа Лист2... а НА НЕМ предварительно отфильтровать уникальные записи нельзя?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Staruha
Дата 1.3.2005, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Ну там таблица отличается от той куда скидываются донные.В конечной таблице еще столбцы будут для обработки полученных данных


--------------------
Возмездие настигнет
PM MAIL   Вверх
Jureth
Дата 2.3.2005, 08:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 23.11.2004
Где: где-то в Западной Сибири

Репутация: 1
Всего: 3



Если время не критично и база небольшая, то можно так:
Код
A = InputBox("Введите название месяца", "Отчет за месяц", "")
For q = 2 To d
   If Лист2.Range("A" & q).Value = A Then
       F = False
       For j = 2 To q - 1
           If Лист2.Range("A" & j).Value = Лист2.Range("A" & q).Value Then 'Здесь идёт сравнение по столбцу "А", можно ещё что-нить добавить
               F = True
               Exit For
           End If
       Next j
       If Not F Then
           i = i + 1 'кол.записей в месяце
           Range("A" & i + 1).Value = Лист2.Range("B" & q).Value 'данные за месяц
           Range("B" & i + 1).Value = Лист2.Range("C" & q).Value
       End If
   End If
Next

PM   Вверх
Staruha
Дата 2.3.2005, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Кое что подправила.Получилось то что надо!

Я у тебя уже не первый раз встречаю это F- обьясни как это работает,надо ли на него переменную обьявлять.
Огромное спасибо!Сейчас займусь суммой,думаю управлюсь

Код

Private Sub CommandButton1_Click()

Dim d As Integer
Dim i As Integer
Dim j As Integer


d = Лист2.UsedRange.Rows.Count
A = InputBox("Введите название месяца", "Отчет за месяц", "")
For q = 2 To d
  If Лист2.Range("A" & q).Value = A Then
      F = False
      For j = 2 To q - 1
          If Range("A" & j).Value = Лист2.Range("B" & q).Value And Range("B" & j).Value = Лист2.Range("C" & q).Value Then 'Здесь идёт сравнение по столбцу "А", можно ещё что-нить добавить
              F = True
              Exit For
          End If
      Next j
      If Not F Then
          i = i + 1 'кол.записей в месяце
          Range("A" & i + 1).Value = Лист2.Range("B" & q).Value 'данные за месяц
          Range("B" & i + 1).Value = Лист2.Range("C" & q).Value
      End If
  End If
Next

End Sub


Это сообщение отредактировал(а) Старуха - 2.3.2005, 11:54


--------------------
Возмездие настигнет
PM MAIL   Вверх
Akina
Дата 2.3.2005, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



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

ОБычный флаг. Dim F as Boolean


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Staruha
Дата 2.3.2005, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Цитата
ОБычный флаг

Akina ,расскажи еще что нибудь о флаге.

Это сообщение отредактировал(а) Старуха - 2.3.2005, 11:59


--------------------
Возмездие настигнет
PM MAIL   Вверх
Akina
Дата 2.3.2005, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Флаг (в данном случае и аналогичных) есть переменная (булева или иного типа), которой присваивается значение в зависимости от неких условий для передачи информации в другое место программы, где на основе запомненного значения принимается решение о выполнении одной из веток кода.

В указанном примере в цикле производится сравнение с уже имеющимися значениями. Если равно - событие запоминается в значении флага и ниже по коду используется условное выполнение в зависимости от того было событие "равно" или нет.

Флаг может быть Boolean (для передачи сведений "было событие"/"не было события") или, например, Integer (чтобы передать еще и, скажем, какое именно событие из списка возможных).




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Staruha
Дата 2.3.2005, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Akina большое спасибо.И Jureth еще раз спасибо. Самая трудная часть сделана.Остается на к-ты это умножить.С суммой долго возилось .Наконец получилось.Может полегче можно сделать.Хотя работает быстро.А на какой объем хватит этого F?
Код


Private Sub CommandButton1_Click()
Dim F As Boolean
Dim d As Integer
Dim dd As Integer
Dim i As Integer
Dim j As Integer
Dim A As String
dd = UsedRange.Rows.Count
Range("A2", "L" & dd).Value = "" 'очистка листа


d = Лист2.UsedRange.Rows.Count
A = InputBox("Введите название месяца", "Отчет за месяц", "")
For q = 2 To d
  If Лист2.Range("A" & q).Value = A Then
      F = False
      For j = 2 To q
          If Range("A" & j).Value = Лист2.Range("B" & q).Value And Range("B" & j).Value = Лист2.Range("C" & q).Value Then 'Здесь идёт сравнение по столбцу "А", можно ещё что-нить добавить
         F = True
       Range("D" & j).Value = Range("D" & j).Value + Лист2.Range("E" & q).Value
       Range("E" & j).Value = Range("E" & j).Value + Лист2.Range("F" & q).Value
       Range("F" & j).Value = Range("F" & j).Value + Лист2.Range("G" & q).Value
       Range("G" & j).Value = Range("G" & j).Value + Лист2.Range("H" & q).Value
              Exit For
             
          End If
      Next j
     
      If Not F Then
          i = i + 1 'кол.записей в месяце
          Range("A" & i + 1).Value = Лист2.Range("B" & q).Value 'данные за месяц
          Range("B" & i + 1).Value = Лист2.Range("C" & q).Value
          Range("D" & i + 1).Value = Range("D" & i + 1).Value + Лист2.Range("E" & q).Value
          Range("E" & i + 1).Value = Range("E" & i + 1).Value + Лист2.Range("F" & q).Value
          Range("F" & i + 1).Value = Range("F" & i + 1).Value + Лист2.Range("G" & q).Value
          Range("G" & i + 1).Value = Range("G" & i + 1).Value + Лист2.Range("H" & q).Value
            End If
         
  End If
 
Next
End Sub


Это сообщение отредактировал(а) Старуха - 2.3.2005, 16:31


--------------------
Возмездие настигнет
PM MAIL   Вверх
Akina
Дата 2.3.2005, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата
на какой объем хватит этого F?

издеваешься?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Staruha
Дата 2.3.2005, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1292
Регистрация: 1.2.2004
Где: Казань

Репутация: 13
Всего: 27



Цитата
база небольшая, то можно так
- для чего-то это писали.
А f для меня на тот момент было белым пятном.Не знаю как другим ,но мне надо время ,чтоб понять ноывое.Пока с работы ехала все по полочкам разложилось.И как это работает дошло.Вот такой канфуз. smile


--------------------
Возмездие настигнет
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0528 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.