Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2013, 16:27   #1
TNTAH666
 
Регистрация: 05.12.2009
Сообщений: 6
По умолчанию Помогите с Excel

смысл проблемы в следующем
Есть таблицы со следующими данными

города______Услуга________Цена

Москва_____Доставка_______800
Питер_______Джемпер_______3000
Питер_______Доставка_______800
Москва______шорты_________2000
Москва______Доставка______800

и вторая таблица
Город_______Стоймость
Москва______200
Питер_______300


надо чтобы формула сначала выбрала все строки из первой таблицы содержащие слово доставка и отняла от цены сумму из 2 таблицы то-есть остаться должно

города__________Цена

Москва_________600(800-200)
Питер___________500(800-300)
Москва__________600(800-200)
TNTAH666 вне форума Ответить с цитированием
Старый 18.10.2013, 09:07   #2
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Лучше бы файл приложили...

Смотрите вложение.
Вложения
Тип файла: zip Доставки.zip (14.9 Кб, 13 просмотров)
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 18.10.2013 в 09:26.
SaLoKiN вне форума Ответить с цитированием
Старый 18.10.2013, 11:19   #3
TNTAH666
 
Регистрация: 05.12.2009
Сообщений: 6
По умолчанию

Цитата:
Сообщение от SaLoKiN Посмотреть сообщение
Лучше бы файл приложили...

Смотрите вложение.
Спасибо друг.
Я в макросах полный 0 не мог-бы ты сказать какие строчки там надо править чтобы изменить расположение массива начального поиска (таблицы 1), массива таблицы 2, ну и соответственно массива вывода ответов=)
TNTAH666 вне форума Ответить с цитированием
Старый 18.10.2013, 11:25   #4
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

свою таблицу приложите, я исправлю в макросе и коменты подпишу.
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 18.10.2013, 11:30   #5
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

ну или вот
Код:
Sub subsub()

Dim i As Integer, j As Integer
Dim iLastRow As Integer, ii As Integer
Dim a

Application.ScreenUpdating = False


With ThisWorkbook.ActiveSheet
iLastRow = .Cells(1, 1).End(xlDown).Row
a = .Range(.Cells(3, 1), .Cells(iLastRow, 7)) ' загрузили массив
End With

' подчистили от преидущего раза
For j = 3 To ThisWorkbook.ActiveSheet.Cells(3, 1).End(xlDown).Row
ThisWorkbook.ActiveSheet.Cells(j + 1, 8) = ""
ThisWorkbook.ActiveSheet.Cells(j + 1, 9) = ""
Next
j = 2
'условия для сравнения
compared1 = "Доставка"


'начинаем поиск
For i = 1 To UBound(a)
    If a(i, 2) = compared1 Then ' если доставка
            ThisWorkbook.ActiveSheet.Cells(j + 1, 8) = a(i, 1) ' заносим город в табл.3
                For ii = 1 To UBound(a)
                    If a(i, 1) = a(ii, 5) Then 'Если нашел сумму доставки
                        ThisWorkbook.ActiveSheet.Cells(j + 1, 9) = a(i, 3) - a(ii, 6) 'считаем итоговую сумму
                    End If
                Next
j = j + 1

End If
Next    
End Sub
у меня обе таблицы хранятся в одном массиве. который загружается здесь
Код:
With ThisWorkbook.ActiveSheet
iLastRow = .Cells(1, 1).End(xlDown).Row
a = .Range(.Cells(3, 1), .Cells(iLastRow, 7)) ' загрузили массив
End With
где
Код:
iLastRow = .Cells(1, 1).End(xlDown).Row
это кол-во элементов в столбце А, начиная с 1-ого индекса.
а здесь
Код:
a = .Range(.Cells(3, 1), .Cells(iLastRow, 7))
загружаем сам массив.
Cells(3, 1) - это левый верхний элемент массива(столбец А строка 3)
Cells(iLastRow, 7) - это правый нижний элемент.(столбец G строка -последняя из iLastRow)

ну и вывод результата
Код:
ThisWorkbook.ActiveSheet.Cells(j + 1, 8) = a(i, 1) ' заносим город в табл.3
ThisWorkbook.ActiveSheet.Cells(j + 1, 9) = a(i, 3) - a(ii, 6) 'считаем итоговую сумму
как видите столбец под номером 8 и 9

P/S не забудьте при смене адреса результирующей таблицы исправить еще тут
Код:
' подчистили от преидущего раза
For j = 3 To ThisWorkbook.ActiveSheet.Cells(3, 1).End(xlDown).Row
ThisWorkbook.ActiveSheet.Cells(j + 1, 8) = ""
ThisWorkbook.ActiveSheet.Cells(j + 1, 9) = ""
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 18.10.2013 в 11:38.
SaLoKiN вне форума Ответить с цитированием
Старый 18.10.2013, 11:50   #6
TNTAH666
 
Регистрация: 05.12.2009
Сообщений: 6
По умолчанию

Спасибо огромное.
Боле менее понял.
И самое главное понял что надо учить VBA =)
TNTAH666 вне форума Ответить с цитированием
Старый 18.10.2013, 12:51   #7
TNTAH666
 
Регистрация: 05.12.2009
Сообщений: 6
По умолчанию

А можешь поправить макрос чтобы он работал с разными листами то есть брать данные с 1 и второго листа а выводить в 3
Вложения
Тип файла: zip Книга1.zip (3.5 Кб, 8 просмотров)
TNTAH666 вне форума Ответить с цитированием
Старый 18.10.2013, 13:17   #8
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

Код:
Sub subsub()

Dim i As Integer, j As Integer
Dim iLastRow As Integer, ii As Integer
Dim a, b

Application.ScreenUpdating = False


With ThisWorkbook.Sheets(1) ' с листа 1
iLastRow = .Cells(1, 1).End(xlDown).Row
a = .Range(.Cells(2, 1), .Cells(iLastRow, 8)) ' загрузили массив
End With

With ThisWorkbook.Sheets(2)' с листа 2
iLastRow = .Cells(1, 1).End(xlDown).Row
b = .Range(.Cells(1, 1), .Cells(iLastRow, 3)) ' загрузили массив
End With

' подчистили от предидущего раза

If Application.CountA(Rows(2)) <> 0 Then
    For j = 1 To ThisWorkbook.Sheets(3).Cells(2, 1).End(xlDown).Row
        ThisWorkbook.ActiveSheet.Cells(j + 1, 1) = ""
        ThisWorkbook.ActiveSheet.Cells(j + 1, 2) = ""
    Next
End If

j = 1 ' если будет шапка на листе 3 то j=2
'условия для сравнения
compared1 = "Доставка"


'начинаем поиск
For i = 1 To UBound(a)
    If a(i, 6) = compared1 Then ' если доставка
            ThisWorkbook.Sheets(3).Cells(j + 1, 1) = a(i, 1) ' заносим город в табл.3
                For ii = 1 To UBound(b)
                    If a(i, 1) = b(ii, 1) Then 'Если нашел сумму доставки
                        ThisWorkbook.Sheets(3).Cells(j + 1, 2) = a(i, 7) - b(ii, 2) 'a(i, 7) - b(ii, 2) 'считаем итоговую сумму
                    End If
                Next
j = j + 1

End If
Next
End Sub
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 18.10.2013 в 13:44.
SaLoKiN вне форума Ответить с цитированием
Старый 18.10.2013, 13:24   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

можно и без макросов.
Вложения
Тип файла: zip Доставки.zip (8.2 Кб, 11 просмотров)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 18.10.2013, 13:37   #10
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

сильно не раскуривал,но не верно считает цены.
При добавлении новой строки в таблицу1 в таблице3 появляется город. когда добавляем стоимость и во второю таблицу стоимость суммы - не считает. Так же не пересчитывает при изменении стоимости доставки. Office 2010
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!

Последний раз редактировалось SaLoKiN; 18.10.2013 в 13:43.
SaLoKiN вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите с Excel ksu25 Помощь студентам 0 05.10.2009 21:02
Помогите с Excel. Nsrvitaliy Помощь студентам 4 28.04.2009 12:09
Помогите с Excel Надежда Карпушина Microsoft Office Excel 5 21.02.2009 06:22
Помогите (EXCEL) ahtung Microsoft Office Excel 2 21.12.2008 06:33
помогите в excel Norik-74 Microsoft Office Excel 2 04.06.2008 11:27