Непростое решение простой проблемы

Программирование на Visual Basic for Applications
Disa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 16.08.2006 (Ср) 14:03

Непростое решение простой проблемы

Сообщение Disa » 17.08.2006 (Чт) 5:17

В поиске к сожалению ничего не нашел
Имеется таблица в экселе с ключевым столбцом. Например код товара, а остальные столбцы это значения для этих кодов.

Код товара иногда повторяется, нужно сделать так чтобы он не повторялся причем чтобы в других столбцах значения суммировались по этим кодам товара. Можно чтобы это была уже новая таблица.
В аксцессе это все стандартными средствами решается, но нужно в экселе.
Стандартными формулами как то не получается. Алгоритм в принципе понятен сделать все с помощью циклов, но не знаю как "привязаться" к ячейкам.

Зараннее спасибо :D

inq
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 185
Зарегистрирован: 12.04.2006 (Ср) 7:50
Откуда: 78

Сообщение inq » 17.08.2006 (Чт) 7:48

но не знаю как "привязаться" к ячейкам.



cells(i,j) ?
подписи нет и не будет

Disa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 16.08.2006 (Ср) 14:03

Сообщение Disa » 17.08.2006 (Чт) 7:51

Если правильно понял i - это номер столбца, а j - это номер ячейки

inq
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 185
Зарегистрирован: 12.04.2006 (Ср) 7:50
Откуда: 78

Сообщение inq » 17.08.2006 (Чт) 7:57

Нет. i - номер строки, j -номер столбца.
А вообще можно справку почитать, книжку по экселевскому ВБА...
подписи нет и не будет

HandKot
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 28.06.2006 (Ср) 13:34
Откуда: Sergiev Posad

Сообщение HandKot » 17.08.2006 (Чт) 8:48

а если запросик сделать?
Тем более это для Вас в Акцессе проблем не вызывает

Disa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 16.08.2006 (Ср) 14:03

Сообщение Disa » 17.08.2006 (Чт) 9:07

Запрос это все понятно если не получится так и сделаю
Но требуется в экселе, неужели не станартных средств.

I10
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 14.08.2006 (Пн) 10:11

Сообщение I10 » 17.08.2006 (Чт) 9:23

Сводную таблицу (PivotTable) пробовал?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 17.08.2006 (Чт) 9:43

Блин. Есть стандартная фича в Excel, я не помню как она называется, что то типа Итоги или как то так.

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 17.08.2006 (Чт) 10:43

Мне кажется задача решается стандартными формулами. Если будет пример таблички, то скажу точно, а пока не очень понятно.

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.08.2006 (Чт) 10:52

:shock:

СУММЕСЛИ
Быть... или не быть. Вот. В чём вопрос?

Disa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 16.08.2006 (Ср) 14:03

Сообщение Disa » 17.08.2006 (Чт) 11:43

uhm писал(а)::shock:

СУММЕСЛИ


Подразумевалось что одинаковые ячейки не будут располагаться рядом, а все будет вразнобой.

Помойму тут одиними формулами не разрулишь
Только с помощью сводной таблицы

Или может поподробнее объяснишь? :D

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.08.2006 (Чт) 12:03

Хелп посмотри по функции, а? :roll:
Если я правильно понял твои условия, это все, что тебе нужно.
Быть... или не быть. Вот. В чём вопрос?

Disa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 16.08.2006 (Ср) 14:03

Сообщение Disa » 17.08.2006 (Чт) 12:10

Ну вроде разобрался

Но тут появилась более сложная задача
Имеется таблица с ключевым столбцом и другими столбцами.
К ней справа пристыковывается вторая таблица, тоже с ключевым столбцом и другими столбцами. Нужно сделать так чтобы во второй таблице строки переставились таким образом когда одно и тоже значение в ключевой столбце 2-й таблици находится напротив такого же значения в ключевом столбце из 1-й таблицы

В экселевском файле можете посмотреть весит мало :)
Думаю там более понятно
Зараннее сапибо всем кто откликается
Вложения
Книга1.xls
(13.5 Кб) Скачиваний: 85

I10
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 14.08.2006 (Пн) 10:11

Сообщение I10 » 17.08.2006 (Чт) 12:19

Количество строк у таблиц и значения ключевых полей одинаковые?

Disa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 16.08.2006 (Ср) 14:03

Сообщение Disa » 17.08.2006 (Чт) 12:21

да

I10
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 14.08.2006 (Пн) 10:11

Сообщение I10 » 17.08.2006 (Чт) 12:24

Сортировать нельзя?

Disa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 16.08.2006 (Ср) 14:03

Сообщение Disa » 17.08.2006 (Чт) 12:43

увы нельзя

Disa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 16.08.2006 (Ср) 14:03

Сообщение Disa » 17.08.2006 (Чт) 12:47

в перспективе в новых таблицах может быть меньше строк чем главной таблице

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.08.2006 (Чт) 12:49

Теперь смотрим хелп по функции ВПР (или ГПР). :)
Быть... или не быть. Вот. В чём вопрос?

Disa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 16.08.2006 (Ср) 14:03

Сообщение Disa » 17.08.2006 (Чт) 12:52

ГРП?
как расшифровывается?

I10
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 14.08.2006 (Пн) 10:11

Сообщение I10 » 17.08.2006 (Чт) 12:53

можно создать из второй таблицы третью, строки которой будут идти в нужном порядке и пристыковывать ее.

таб 3

Код
=INDEX($C$6:$D$12; MATCH( A6 ;$C$6:$C$12;0); 1 )
=INDEX($C$6:$D$12; MATCH( A7 ;$C$6:$C$12;0); 1 )
...

данные2
=INDEX($C$6:$D$12;MATCH( A6 ;$C$6:$C$12;0); 2 )
=INDEX($C$7:$D$12;MATCH( A7 ;$C$6:$C$12;0); 2 )
...

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.08.2006 (Чт) 12:56

Вертикальный просмотр, или горизонтальный просмотр. VLOOKUP и HLOOKUP в английской версии.

Вариант с индексом, предложенный I10
, кстати, тоже видимо покатит. Только нужно правильно обрабатывать ненайденные значения.
Быть... или не быть. Вот. В чём вопрос?

Disa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 16.08.2006 (Ср) 14:03

Сообщение Disa » 17.08.2006 (Чт) 13:16

uhm писал(а):Вертикальный просмотр, или горизонтальный просмотр. VLOOKUP и HLOOKUP в английской версии.

Вариант с индексом, предложенный I10
, кстати, тоже видимо покатит. Только нужно правильно обрабатывать ненайденные значения.


Видимо и прокатит
Но выдает ошибку
Вы правы

I10
Начинающий
Начинающий
 
Сообщения: 15
Зарегистрирован: 14.08.2006 (Пн) 10:11

Сообщение I10 » 17.08.2006 (Чт) 13:37

Если руссифицированный Excel, то используются русские аналоги этих функций

Если ошибка связана с тем, что значение не найдено, то можно проверять функцией iserror

Disa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 16.08.2006 (Ср) 14:03

Сообщение Disa » 17.08.2006 (Чт) 13:55

хорошо попробую перевести функции на русский

GAGArin
Неистовый флудер
Неистовый флудер
 
Сообщения: 1777
Зарегистрирован: 23.12.2002 (Пн) 12:46
Откуда: я тут взялся, не знаю...

Сообщение GAGArin » 17.08.2006 (Чт) 16:52

Код: Выделить всё
=ВПР(A6;$C$6:$D$12;2;ЛОЖЬ)

Для первой строчки. У меня выдает как надо.

Главное указать интервальный просмотр в False иначе он считает таблицу отсортированной.

Bagathur
Обычный пользователь
Обычный пользователь
 
Сообщения: 88
Зарегистрирован: 10.08.2006 (Чт) 12:36
Откуда: Moscow

Сообщение Bagathur » 17.08.2006 (Чт) 22:58

Код: Выделить всё
Private Sub Сравнить()
Row = Application.CountA(Sheets("ХХХХ").Columns(1)) 'находит последнюю незаполненную строку таблицы
With ActiveWorkbook.Sheets("лист1")
For i = 1 To Row
For j = 1 To Row
If .Cells(i, 1).Text = .Cells(j, 3).Text Then 'сравнивает коды
.Cells(i, 5).Value = .Cells(i, 1).Value 'делает новую таблицу вплотную с первой
.Cells(i, 6).Value = .Cells(i, 2).Value
.Cells(i, 7).Value = .Cells(j, 3).Value
.Cells(i, 8).Value = .Cells(j, 4).Value
End If
Next
Next
End With
End Sub


У меня вроде работает. Хотя если строк много на быстроту расчитывать не приходится.
Последний раз редактировалось Bagathur 18.08.2006 (Пт) 7:49, всего редактировалось 1 раз.
'Til the blood on your hans is the blood of the King!

Disa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 16.08.2006 (Ср) 14:03

Сообщение Disa » 18.08.2006 (Пт) 5:14

GAGArin писал(а):
Код: Выделить всё
=ВПР(A6;$C$6:$D$12;2;ЛОЖЬ)

Для первой строчки. У меня выдает как надо.

Главное указать интервальный просмотр в False иначе он считает таблицу отсортированной.


Работает
Ура!
Слушай а если еще куча столбцов с данными еще к ним это как "прикрутить"? Чтобы они тоже сортировались
Попробовал скопировать эту формулу не пашет для других столбцов

Disa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 16.08.2006 (Ср) 14:03

Сообщение Disa » 18.08.2006 (Пт) 5:18

Bagathur писал(а):
Код: Выделить всё
Private Sub Сравнить()
Row = Application.CountA(Sheets("ХХХХ").Columns(1)) 'находит последнюю незаполненную строку таблицы
With ActiveWorkbook.Sheets("лист1")
For i = 1 To Row
For j = 1 To Row
If .Cells(j, 1).Text = .Cells(j, 3).Text Then 'сравнивает коды
.Cells(i, 5).Value = .Cells(i, 1).Value 'делает новую таблицу вплотную с первой
.Cells(i, 6).Value = .Cells(i, 2).Value
.Cells(i, 7).Value = .Cells(j, 3).Value
.Cells(i, 8).Value = .Cells(j, 4).Value
End If
Next
Next
End With
End Sub


У меня вроде работает. Хотя если строк много на быстроту расчитывать не приходится.



Спасибо с быстротой нет проблем комп мощный и времени хватает
Только вопрос этот файл для наглядности, на самом деле будет несколько столбцов с данными и несколько тысяч строк.

Если много строк, то все строки придется руками прописывать?

Disa
Новичок
Новичок
 
Сообщения: 29
Зарегистрирован: 16.08.2006 (Ср) 14:03

Сообщение Disa » 18.08.2006 (Пт) 5:21

To GAGARIN
Ступил разобрался сам все работает для нескольких столбцов СПАСИБО
Какие все тут умные.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 63

    TopList