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

Вход

Регистрация

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

 

= Мир MS Excel/Сравнение данных в одном столбце - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение данных в одном столбце (Макросы Sub)
Сравнение данных в одном столбце
lexa19921904 Дата: Вторник, 11.02.2014, 15:58 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Подскажите пожалуйста как можно сделать макрос, который будет делать следующее:
в имеющейся таблице есть n столбцов. в первом столбце есть поля, которые повторяются(например, "кот"), в другом столбце есть, стоимость 1-го столбца, нужно посчитать итого по полю "кот".
Помогите пожалуйста!
К сообщению приложен файл: test.xlsx (9.4 Kb)
 
Ответить
СообщениеПодскажите пожалуйста как можно сделать макрос, который будет делать следующее:
в имеющейся таблице есть n столбцов. в первом столбце есть поля, которые повторяются(например, "кот"), в другом столбце есть, стоимость 1-го столбца, нужно посчитать итого по полю "кот".
Помогите пожалуйста!

Автор - lexa19921904
Дата добавления - 11.02.2014 в 15:58
nilem Дата: Вторник, 11.02.2014, 16:03 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
Например, для котов:
Код
=СУММЕСЛИ(A1:A19;"кот";C1:C19)

пойдет?


Яндекс.Деньги 4100159601573
 
Ответить
СообщениеНапример, для котов:
Код
=СУММЕСЛИ(A1:A19;"кот";C1:C19)

пойдет?

Автор - nilem
Дата добавления - 11.02.2014 в 16:03
lexa19921904 Дата: Вторник, 11.02.2014, 16:29 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
ну это через функцию. а как это сделать через макрос?
 
Ответить
Сообщениену это через функцию. а как это сделать через макрос?

Автор - lexa19921904
Дата добавления - 11.02.2014 в 16:29
lexa19921904 Дата: Вторник, 11.02.2014, 16:54 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
и при всем при этом надо, что бы макрос сам определил сколько таких повторяющихся полей типа "кот" и "слон", т.е. их нужно вводить не руками.
 
Ответить
Сообщениеи при всем при этом надо, что бы макрос сам определил сколько таких повторяющихся полей типа "кот" и "слон", т.е. их нужно вводить не руками.

Автор - lexa19921904
Дата добавления - 11.02.2014 в 16:54
lexa19921904 Дата: Вторник, 11.02.2014, 16:57 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
типа того, как это делается в сводной таблице. но ее нельзя использовать.
 
Ответить
Сообщениетипа того, как это делается в сводной таблице. но ее нельзя использовать.

Автор - lexa19921904
Дата добавления - 11.02.2014 в 16:57
nilem Дата: Вторник, 11.02.2014, 17:26 | Сообщение № 6
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
пробуйте так:
[vba]
Код
Sub ertert()
Dim x, y(), i&, k&, n&, s$
x = Range("A1").CurrentRegion.Value
ReDim y(1 To UBound(x), 1 To 2)
On Error Resume Next
With New Collection
     For i = 2 To UBound(x)
         s = Trim$(x(i, 1))
         If IsEmpty(.Item(s)) Then
             k = k + 1
             y(k, 1) = "Total by field: " & s
             y(k, 2) = x(i, 3)
             .Add k, s
         Else
             n = .Item(s): y(n, 2) = y(n, 2) + x(i, 3)
         End If
     Next i
End With
With Range("A1").CurrentRegion
     With .Offset(.Rows.Count + 1, 1)
         .CurrentRegion.ClearContents
         .Resize(k, 2).Value = y()
     End With
End With
End Sub
[/vba]
К сообщению приложен файл: test.xlsm (17.4 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениепробуйте так:
[vba]
Код
Sub ertert()
Dim x, y(), i&, k&, n&, s$
x = Range("A1").CurrentRegion.Value
ReDim y(1 To UBound(x), 1 To 2)
On Error Resume Next
With New Collection
     For i = 2 To UBound(x)
         s = Trim$(x(i, 1))
         If IsEmpty(.Item(s)) Then
             k = k + 1
             y(k, 1) = "Total by field: " & s
             y(k, 2) = x(i, 3)
             .Add k, s
         Else
             n = .Item(s): y(n, 2) = y(n, 2) + x(i, 3)
         End If
     Next i
End With
With Range("A1").CurrentRegion
     With .Offset(.Rows.Count + 1, 1)
         .CurrentRegion.ClearContents
         .Resize(k, 2).Value = y()
     End With
End With
End Sub
[/vba]

Автор - nilem
Дата добавления - 11.02.2014 в 17:26
lexa19921904 Дата: Вторник, 11.02.2014, 17:30 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
БОЛЬШОЕ СПАСИБО!!!
 
Ответить
СообщениеБОЛЬШОЕ СПАСИБО!!!

Автор - lexa19921904
Дата добавления - 11.02.2014 в 17:30
lexa19921904 Дата: Вторник, 11.02.2014, 23:37 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
А как можно сделать, что бы итог выводился не снизу таблицы, а справа от нее?
 
Ответить
СообщениеА как можно сделать, что бы итог выводился не снизу таблицы, а справа от нее?

Автор - lexa19921904
Дата добавления - 11.02.2014 в 23:37
nilem Дата: Среда, 12.02.2014, 07:54 | Сообщение № 9
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
вот эту часть:
[vba]
Код
With Range("A1").CurrentRegion
     With .Offset(.Rows.Count + 1, 1)
         .CurrentRegion.ClearContents
         .Resize(k, 2).Value = y()
     End With
End With
[/vba]
переписываем так:
[vba]
Код
With Range("A1").CurrentRegion
     With .Offset(, .Columns.Count + 1)
         .CurrentRegion.ClearContents
         .Resize(k, 2).Value = y()
     End With
End With
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениевот эту часть:
[vba]
Код
With Range("A1").CurrentRegion
     With .Offset(.Rows.Count + 1, 1)
         .CurrentRegion.ClearContents
         .Resize(k, 2).Value = y()
     End With
End With
[/vba]
переписываем так:
[vba]
Код
With Range("A1").CurrentRegion
     With .Offset(, .Columns.Count + 1)
         .CurrentRegion.ClearContents
         .Resize(k, 2).Value = y()
     End With
End With
[/vba]

Автор - nilem
Дата добавления - 12.02.2014 в 07:54
lexa19921904 Дата: Среда, 12.02.2014, 08:53 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Спасибо большое!!!
 
Ответить
СообщениеСпасибо большое!!!

Автор - lexa19921904
Дата добавления - 12.02.2014 в 08:53
Матраскин Дата: Среда, 12.02.2014, 11:00 | Сообщение № 11
Группа: Друзья
Ранг: Обитатель
Сообщений: 375
Репутация: 81 ±
Замечаний: 0% ±

20xx
x = Range("A1").CurrentRegion.Value

nilem, можете объяснить, почему Вы использовали .Value, а не просто x = Range("A1").CurrentRegion


в интернете опять кто-то не прав
 
Ответить
Сообщение
x = Range("A1").CurrentRegion.Value

nilem, можете объяснить, почему Вы использовали .Value, а не просто x = Range("A1").CurrentRegion

Автор - Матраскин
Дата добавления - 12.02.2014 в 11:00
KuklP Дата: Среда, 12.02.2014, 11:22 | Сообщение № 12
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Позволю себе вместо Николая - во избежание неожиданностей всегда лучше явно указывать, какое именно свойство мы хотим получить. У ячейки, диапазона множество свойств и если не указать нужное явно, Эксель по своему усмотрению подставит подходящее. А это не обязательно совпадет с желанием программиста. :(


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
СообщениеПозволю себе вместо Николая - во избежание неожиданностей всегда лучше явно указывать, какое именно свойство мы хотим получить. У ячейки, диапазона множество свойств и если не указать нужное явно, Эксель по своему усмотрению подставит подходящее. А это не обязательно совпадет с желанием программиста. :(

Автор - KuklP
Дата добавления - 12.02.2014 в 11:22
lexa19921904 Дата: Среда, 12.02.2014, 13:03 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Почему, когда я изменил
[vba]
Код
With Range("A1").CurrentRegion

With .Offset(4, 13) написал это вместо Offset(, .Columns.Count + 1)

.CurrentRegion.ClearContents
.Resize(k, 2).Value = y()
End With
End With
[/vba]
то в результате показывается не все записи, а только две??

И еще один вопрос: можно сделать так, что бы,если в столбце "подарок" будут пустые поля, то их не выводить в результате???
К сообщению приложен файл: test2.xlsm (17.4 Kb)


Сообщение отредактировал Serge_007 - Среда, 19.02.2014, 12:28
 
Ответить
СообщениеПочему, когда я изменил
[vba]
Код
With Range("A1").CurrentRegion

With .Offset(4, 13) написал это вместо Offset(, .Columns.Count + 1)

.CurrentRegion.ClearContents
.Resize(k, 2).Value = y()
End With
End With
[/vba]
то в результате показывается не все записи, а только две??

И еще один вопрос: можно сделать так, что бы,если в столбце "подарок" будут пустые поля, то их не выводить в результате???

Автор - lexa19921904
Дата добавления - 12.02.2014 в 13:03
lexa19921904 Дата: Среда, 12.02.2014, 13:10 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Таблица, к которой я применяю этот макрос состоит из 486 строк и примерно из 25-30 столбцов.
не знаю может это повлиять на вывод результата или нет...
 
Ответить
СообщениеТаблица, к которой я применяю этот макрос состоит из 486 строк и примерно из 25-30 столбцов.
не знаю может это повлиять на вывод результата или нет...

Автор - lexa19921904
Дата добавления - 12.02.2014 в 13:10
nilem Дата: Среда, 12.02.2014, 15:27 | Сообщение № 15
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
вот без пустых подарков
[vba]
Код
Sub ertert()
Dim x, y(), i&, k&, n&, s$
x = Range("A1").CurrentRegion.Value
ReDim y(1 To UBound(x), 1 To 2)
On Error Resume Next
With New Collection
       For i = 2 To UBound(x)
           s = Trim$(x(i, 1))
           If Len(s) Then
               If IsEmpty(.Item(s)) Then
                   k = k + 1
                   y(k, 1) = "Итого по " & s
                   y(k, 2) = x(i, 4)
                   .Add k, s
               Else
                   n = .Item(s): y(n, 2) = y(n, 2) + x(i, 4)
               End If
           End If
       Next i
End With
With Range("A1").CurrentRegion
       With .Offset(.Rows.Count + 1, 1)
           .CurrentRegion.ClearContents
           .Resize(k, 2).Value = y()
       End With
End With
End Sub
[/vba]
...486 строк и примерно из 25-30 столбцов...

ограничено только памятью компа. Главное (и важно!), чтобы не было полностью пустых строк и/или столбцов внутри вашей таблицы.

...А это не обязательно совпадет с желанием программиста.

Да, точно :)
И еще потому, что так советует ZVI.


Яндекс.Деньги 4100159601573

Сообщение отредактировал nilem - Среда, 12.02.2014, 15:28
 
Ответить
Сообщениевот без пустых подарков
[vba]
Код
Sub ertert()
Dim x, y(), i&, k&, n&, s$
x = Range("A1").CurrentRegion.Value
ReDim y(1 To UBound(x), 1 To 2)
On Error Resume Next
With New Collection
       For i = 2 To UBound(x)
           s = Trim$(x(i, 1))
           If Len(s) Then
               If IsEmpty(.Item(s)) Then
                   k = k + 1
                   y(k, 1) = "Итого по " & s
                   y(k, 2) = x(i, 4)
                   .Add k, s
               Else
                   n = .Item(s): y(n, 2) = y(n, 2) + x(i, 4)
               End If
           End If
       Next i
End With
With Range("A1").CurrentRegion
       With .Offset(.Rows.Count + 1, 1)
           .CurrentRegion.ClearContents
           .Resize(k, 2).Value = y()
       End With
End With
End Sub
[/vba]
...486 строк и примерно из 25-30 столбцов...

ограничено только памятью компа. Главное (и важно!), чтобы не было полностью пустых строк и/или столбцов внутри вашей таблицы.

...А это не обязательно совпадет с желанием программиста.

Да, точно :)
И еще потому, что так советует ZVI.

Автор - nilem
Дата добавления - 12.02.2014 в 15:27
lexa19921904 Дата: Среда, 12.02.2014, 16:06 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Спасибо!!!
 
Ответить
СообщениеСпасибо!!!

Автор - lexa19921904
Дата добавления - 12.02.2014 в 16:06
lexa19921904 Дата: Среда, 19.02.2014, 11:49 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
а можно сделать так, что бы при сборе цифр, если в ячейке написан текст, то появлялось сообщение об этой ошибке, и подсчет шел дальше, а в ячейке с итогом появилась надпись, что "не верные данные"?
К сообщению приложен файл: test_cat.xlsm (17.4 Kb)
 
Ответить
Сообщениеа можно сделать так, что бы при сборе цифр, если в ячейке написан текст, то появлялось сообщение об этой ошибке, и подсчет шел дальше, а в ячейке с итогом появилась надпись, что "не верные данные"?

Автор - lexa19921904
Дата добавления - 19.02.2014 в 11:49
lexa19921904 Дата: Среда, 19.02.2014, 12:36 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 28
Репутация: 0 ±
Замечаний: 20% ±

Excel 2010
Файл в другом формате
К сообщению приложен файл: test_cat.xls (42.0 Kb)
 
Ответить
СообщениеФайл в другом формате

Автор - lexa19921904
Дата добавления - 19.02.2014 в 12:36
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сравнение данных в одном столбце (Макросы Sub)
  • Страница 1 из 1
  • 1
Поиск:

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