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

Вход

Регистрация

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

 

= Мир MS Excel/Перенести некоторые строки из табл. 1 в табл 2 по их сумме? - Мир MS Excel

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

Excel 2010
Здравствуйте. Помогите с написанием макроса или формулы. Просто не знаю возможно ли так сделать средствами excel. На одном листе две таблицы. таблица 1 с данными, таблица 2 пустая Нужно чтобы из табл 1 перемещались строки в табл 2 сумма которых равна определенному числу.
К сообщению приложен файл: 8936020.xlsx (20.3 Kb)


[IMG]http://s7.hostingkartinok.com/uploads/images/2015/02/cbbf474101dc6824df2133572b91715e.gif[/IMG]
 
Ответить
СообщениеЗдравствуйте. Помогите с написанием макроса или формулы. Просто не знаю возможно ли так сделать средствами excel. На одном листе две таблицы. таблица 1 с данными, таблица 2 пустая Нужно чтобы из табл 1 перемещались строки в табл 2 сумма которых равна определенному числу.

Автор - kirkato
Дата добавления - 06.07.2015 в 12:01
Pelena Дата: Понедельник, 06.07.2015, 12:34 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19197
Репутация: 4423 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте. Попробуйте поискать по форуму по ключевым словам Задача о рюкзаке


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗдравствуйте. Попробуйте поискать по форуму по ключевым словам Задача о рюкзаке

Автор - Pelena
Дата добавления - 06.07.2015 в 12:34
miver Дата: Понедельник, 06.07.2015, 14:01 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
kirkato, Если пробывать набирать самым простым перебором без точного решения Задачи о рюкзаке, то смотри вложеный файл
К сообщению приложен файл: 8936020_m.xlsm (28.6 Kb)
 
Ответить
Сообщениеkirkato, Если пробывать набирать самым простым перебором без точного решения Задачи о рюкзаке, то смотри вложеный файл

Автор - miver
Дата добавления - 06.07.2015 в 14:01
kirkato Дата: Понедельник, 06.07.2015, 14:58 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Пока разбирался как все таки переделать вариант от Pelena под свой. тут уже оказался готовый вариант спасибо Miver'у. Miver ваш способ при числе допустим "23000" выдает результат 22990, при числе "50" выдает 30, при "1000" - 990 и тд. Можно ли это как то подправить? и еще а как прописать в макросе чтоб не копировались строки а переносились? В принципе точность можно и руками подправить, а вот как именно перенести


[IMG]http://s7.hostingkartinok.com/uploads/images/2015/02/cbbf474101dc6824df2133572b91715e.gif[/IMG]

Сообщение отредактировал kirkato - Понедельник, 06.07.2015, 15:00
 
Ответить
СообщениеПока разбирался как все таки переделать вариант от Pelena под свой. тут уже оказался готовый вариант спасибо Miver'у. Miver ваш способ при числе допустим "23000" выдает результат 22990, при числе "50" выдает 30, при "1000" - 990 и тд. Можно ли это как то подправить? и еще а как прописать в макросе чтоб не копировались строки а переносились? В принципе точность можно и руками подправить, а вот как именно перенести

Автор - kirkato
Дата добавления - 06.07.2015 в 14:58
miver Дата: Понедельник, 06.07.2015, 15:50 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Miver ваш способ при числе допустим "23000" выдает результат 22990, при числе "50" выдает 30, при "1000" - 990 и тд.
Я же писал
без точного решения


как прописать в макросе чтоб не копировались строки а переносились?

Просто пропишите в макросе после копирования стирание данных

И в конце выгрузка на лист[vba]
Код
Range("D7:F" & 6 + UBound(arr)).Value = arr
[/vba]
[moder]Оформляйте коды тегами (кнопка #)[/moder]


Сообщение отредактировал Manyasha - Понедельник, 06.07.2015, 18:56
 
Ответить
Сообщение
Miver ваш способ при числе допустим "23000" выдает результат 22990, при числе "50" выдает 30, при "1000" - 990 и тд.
Я же писал
без точного решения


как прописать в макросе чтоб не копировались строки а переносились?

Просто пропишите в макросе после копирования стирание данных

И в конце выгрузка на лист[vba]
Код
Range("D7:F" & 6 + UBound(arr)).Value = arr
[/vba]
[moder]Оформляйте коды тегами (кнопка #)[/moder]

Автор - miver
Дата добавления - 06.07.2015 в 15:50
kirkato Дата: Понедельник, 06.07.2015, 16:02 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Прописал как сказали. теперь выдает ошибку на строку 26 "summ = summ - arr(i, 3)"


[IMG]http://s7.hostingkartinok.com/uploads/images/2015/02/cbbf474101dc6824df2133572b91715e.gif[/IMG]
 
Ответить
СообщениеПрописал как сказали. теперь выдает ошибку на строку 26 "summ = summ - arr(i, 3)"

Автор - kirkato
Дата добавления - 06.07.2015 в 16:02
miver Дата: Понедельник, 06.07.2015, 16:27 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
А если подумать
К сообщению приложен файл: 8936020_m2.xlsm (27.7 Kb)
 
Ответить
СообщениеА если подумать

Автор - miver
Дата добавления - 06.07.2015 в 16:27
kirkato Дата: Понедельник, 06.07.2015, 16:32 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Ну я бы честно не догадался бы так сделать, сколько бы не думал :) Спасибо огромное


[IMG]http://s7.hostingkartinok.com/uploads/images/2015/02/cbbf474101dc6824df2133572b91715e.gif[/IMG]
 
Ответить
СообщениеНу я бы честно не догадался бы так сделать, сколько бы не думал :) Спасибо огромное

Автор - kirkato
Дата добавления - 06.07.2015 в 16:32
kirkato Дата: Понедельник, 06.07.2015, 17:48 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Появилась проблемка с макросом. Загрузил данные, примерно 520000 строк и попробывал сформировать по нужной мне сумме. в первый раз работает отлично набирает столько сколько и нужно, а вот во второй и последующие разы макрос вообще не срабатывает. Как заставить его работать корректно?


[IMG]http://s7.hostingkartinok.com/uploads/images/2015/02/cbbf474101dc6824df2133572b91715e.gif[/IMG]
 
Ответить
СообщениеПоявилась проблемка с макросом. Загрузил данные, примерно 520000 строк и попробывал сформировать по нужной мне сумме. в первый раз работает отлично набирает столько сколько и нужно, а вот во второй и последующие разы макрос вообще не срабатывает. Как заставить его работать корректно?

Автор - kirkato
Дата добавления - 06.07.2015 в 17:48
miver Дата: Вторник, 07.07.2015, 08:56 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
Дело все в пробелах в данных. Было прописано до первого пропуска сверху. Поменял на первую строку с низу.
Лучше отсортировать данные по убыванию
Посмотри код с коментариями ниже.
Если один раз разобратся, то дальше проще переделывать под себя
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ArrRez()
Dim TmpArrRez()

If (Union(Target.Cells(1), Range("H6")).Address = Range("H6").Address) Then
'-------------------------------------------------
'-- Блок сортировки
Лист2.ListObjects("Реестр").Sort.SortFields.Clear
Лист2.ListObjects("Реестр").Sort.SortFields.Add _
Key:=Range("Реестр[Сумма]"), _
SortOn:=xlSortOnValues, _
Order:=xlDescending, _
DataOption:=xlSortNormal

[color=red]With Лист2.ListObjects("Реестр").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With[/color]
'-------------------------------------------------
'-- Задаем нужную сумму
summ = Range("H6").Value

'-- Копируем масив данных в память
[color=red]arr = Range("D7:F" & Range("F1048000").End(xlUp).Row).Value[/color]

'-- Очищаем правую таблицу
Range("K7:M" & Range("M7").End(xlDown).Row).ClearContents

ReDim TmpArrRez(LBound(arr, 2) To UBound(arr, 2), 1 To 1)

'-- Перебор данных в памяти
For i = LBound(arr) To UBound(arr)
[color=red]A = Val(arr(i, 3))[/color]
'-- Если очередное значение менше суммы и болше нуля переносим в таблицу
[color=red]If A <= summ And A > 0 Then[/color]
For j = LBound(arr, 2) To UBound(arr, 2)
'-- Сам перенос знрачений
TmpArrRez(j, UBound(TmpArrRez, 2)) = arr(i, j)
arr(i, j) = ""
Next j
ReDim Preserve TmpArrRez(LBound(arr, 2) To UBound(arr, 2), 1 To UBound(TmpArrRez, 2) + 1)
summ = summ - A
End If
If summ = 0 Then Exit For
Next i

'-- Транспонируем полученую таблицу
ReDim ArrRez(LBound(TmpArrRez, 2) To UBound(TmpArrRez, 2), LBound(TmpArrRez) To UBound(TmpArrRez))
For i = LBound(ArrRez) To UBound(ArrRez)
For j = LBound(arr, 2) To UBound(arr, 2)
ArrRez(i, j) = TmpArrRez(j, i)
Next j
Next i

'-- Вывод значений на лист
Range("K7:M" & 6 + UBound(ArrRez)).Value = ArrRez
Range("D7:F" & 6 + UBound(arr)).Value = arr
End If
End Sub
[/vba]


Сообщение отредактировал Pelena - Вторник, 07.07.2015, 10:54
 
Ответить
СообщениеДело все в пробелах в данных. Было прописано до первого пропуска сверху. Поменял на первую строку с низу.
Лучше отсортировать данные по убыванию
Посмотри код с коментариями ниже.
Если один раз разобратся, то дальше проще переделывать под себя
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ArrRez()
Dim TmpArrRez()

If (Union(Target.Cells(1), Range("H6")).Address = Range("H6").Address) Then
'-------------------------------------------------
'-- Блок сортировки
Лист2.ListObjects("Реестр").Sort.SortFields.Clear
Лист2.ListObjects("Реестр").Sort.SortFields.Add _
Key:=Range("Реестр[Сумма]"), _
SortOn:=xlSortOnValues, _
Order:=xlDescending, _
DataOption:=xlSortNormal

[color=red]With Лист2.ListObjects("Реестр").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With[/color]
'-------------------------------------------------
'-- Задаем нужную сумму
summ = Range("H6").Value

'-- Копируем масив данных в память
[color=red]arr = Range("D7:F" & Range("F1048000").End(xlUp).Row).Value[/color]

'-- Очищаем правую таблицу
Range("K7:M" & Range("M7").End(xlDown).Row).ClearContents

ReDim TmpArrRez(LBound(arr, 2) To UBound(arr, 2), 1 To 1)

'-- Перебор данных в памяти
For i = LBound(arr) To UBound(arr)
[color=red]A = Val(arr(i, 3))[/color]
'-- Если очередное значение менше суммы и болше нуля переносим в таблицу
[color=red]If A <= summ And A > 0 Then[/color]
For j = LBound(arr, 2) To UBound(arr, 2)
'-- Сам перенос знрачений
TmpArrRez(j, UBound(TmpArrRez, 2)) = arr(i, j)
arr(i, j) = ""
Next j
ReDim Preserve TmpArrRez(LBound(arr, 2) To UBound(arr, 2), 1 To UBound(TmpArrRez, 2) + 1)
summ = summ - A
End If
If summ = 0 Then Exit For
Next i

'-- Транспонируем полученую таблицу
ReDim ArrRez(LBound(TmpArrRez, 2) To UBound(TmpArrRez, 2), LBound(TmpArrRez) To UBound(TmpArrRez))
For i = LBound(ArrRez) To UBound(ArrRez)
For j = LBound(arr, 2) To UBound(arr, 2)
ArrRez(i, j) = TmpArrRez(j, i)
Next j
Next i

'-- Вывод значений на лист
Range("K7:M" & 6 + UBound(ArrRez)).Value = ArrRez
Range("D7:F" & 6 + UBound(arr)).Value = arr
End If
End Sub
[/vba]

Автор - miver
Дата добавления - 07.07.2015 в 08:56
ShAM Дата: Вторник, 07.07.2015, 10:42 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1347
Репутация: 249 ±
Замечаний: 0% ±

Excel 2010
Модератор:
Оформляйте коды тегами (кнопка #)
Михаил (miver), не надо игнорировать замечание модератора!
 
Ответить
Сообщение
Модератор:
Оформляйте коды тегами (кнопка #)
Михаил (miver), не надо игнорировать замечание модератора!

Автор - ShAM
Дата добавления - 07.07.2015 в 10:42
kirkato Дата: Вторник, 07.07.2015, 11:17 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 15
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Вопрос закрыт. Код работает на все 100%. Еще раз спасибо Miver


[IMG]http://s7.hostingkartinok.com/uploads/images/2015/02/cbbf474101dc6824df2133572b91715e.gif[/IMG]
 
Ответить
СообщениеВопрос закрыт. Код работает на все 100%. Еще раз спасибо Miver

Автор - kirkato
Дата добавления - 07.07.2015 в 11:17
miver Дата: Вторник, 07.07.2015, 12:16 | Сообщение № 13
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 190
Репутация: 37 ±
Замечаний: 0% ±

Excel 2010
[offtop]
Михаил (miver), не надо игнорировать замечание модератора!

Никого не хотел обидеть. Просто хотел выделить красным цветом строки на которые нужно обратить внимание kirkato,
В теге нельзя этого сделать [/offtop]
 
Ответить
Сообщение[offtop]
Михаил (miver), не надо игнорировать замечание модератора!

Никого не хотел обидеть. Просто хотел выделить красным цветом строки на которые нужно обратить внимание kirkato,
В теге нельзя этого сделать [/offtop]

Автор - miver
Дата добавления - 07.07.2015 в 12:16
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Перенести некоторые строки из табл. 1 в табл 2 по их сумме? (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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