PDA

Показать полную графическую версию : Подскажите функцию для excel


Alexander_88
27-09-2015, 20:38
Здравствуйте подскажите возможно ли сделать следующее....

есть сверху большая таблица и снизу две мини таблицы (пример):

A B C D
90 Яблоки 5,6+4,6+9,6+10,5+15,0 45,3-5-6,5-9,6-6-8,3
150 Груши 5,6+4,6+9,6+10,5+15,0 45,3-5-6,5-9,6-6-8,3
350 Финики 5,6+4,6+9,6+10,5+15,0 45,3-5-6,5-9,6-6-8,3


A B C D
180 Груши 5,6
340 Курага 9,6
90 Яблоки 10

A B C D
90 Бананы 6,5
155 Груши 4,6
350 Финики 8,4

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

Т.е. объединив мини таблицы с большой, должна получится такая таблица

A B C D
90 Яблоки 5,6+4,6+9,6+10,5+15,0+10 45,3-5-6,5-9,6-6-8,3
150 Груши 5,6+4,6+9,6+10,5+15,0 45,3-5-6,5-9,6-6-8,3
350 Финики 5,6+4,6+9,6+10,5+15,0 45,3-5-6,5-9,6-6-8,3-8,4
180 Груши 5,6
340 Курага 9,6
90 Бананы 6,5
155 Груши 4,6

corbis
28-09-2015, 09:14
На счет функции не уверен, а вот макросом можно замутить.
Не понятно:
1. как соединяются столбцы при совпадении.
2. размеры таблиц.

Хорошо бы файл с таблицами..

a_axe
28-09-2015, 13:27
Alexander_88, предполагается, что на форуме создается только одна тема (без дублирования) на каждую из проблем.
Alexander_88, приложите файл с таблицами, так как Вы их видите.
Сводить таблицы можно в том числе и консолидацией (http://yandex.ru/yandsearch?clid=2028026&text=%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D0%B8%D0%B4%D0%B0%D1%86%D0%B8%D1%8F%20%D0%B2%20excel%20201 3), но для этого необходимо понимать структуру Вашей таблицы.

Alexander_88
28-09-2015, 14:56
Поправка.. как третий так и четвертый столбец должны сцепляться через знак +

Номера строк различные, я могу сам выделять данные, которые нужно объединять (если первый и второй столбец совпадает, сцеплять третьи и четвертые столбцы таблиц через знак + Если не совпадает, то просто добавлять четыре столбца ниже). Также должны игнорироваться пустые ячейки. Сделал небольшой пример, два листа, исходный (с данными до применения ф-ции) и результирующий (с данными после выполнения функции).

Желательно и удобно, чтобы объединение происходило с помощью кнопки.. т.е. я выделяю весь диапазон, который требуется объединить (на примере исходного листа это диапазон от ячейки А2 до ячейки D21), нажимаю эту кнопку и должно получиться то, что мы видим в листе "Результат".

Alexander_88
28-09-2015, 18:03
Если исключить пустые ячейки проблематично, я могу создавать таблицы слитно, т.е. будет одна большая таблица.. я выделю ее, нажму кнопку и произойдет слияние

Drongo
28-09-2015, 21:56
есть сверху большая таблица и снизу две мини таблицы (пример): »Меня интересует такой вопрос, допустим та, верхняя таблица, когда в неё в конец добавятся данные, не получится ли так что места не хватит, т.к. нижние маленькие будут мешать?

Можно ли две маленькие вынести на отдельные листы?

И ещё мне интересно, есть ли предельное количество строк для трёх таблиц, верхней и двух нижних? Например, можно уложиться в 100 строк и знать что 101-й не будет или же это неизвестно?

Alexander_88
28-09-2015, 22:14
Меня интересует такой вопрос, допустим та, верхняя таблица, когда в неё в конец добавятся данные, не получится ли так что места не хватит, т.к. нижние маленькие будут мешать? »

Я могу либо специально пропускать очень много строк, между большой таблицей и маленькими, чтобы места хватило, либо
Можно ли две маленькие вынести на отдельные листы? »
Можно вынести на отдельные листы.

И ещё мне интересно, есть ли предельное количество строк для трёх таблиц, верхней и двух нижних? Например, можно уложиться в 100 строк и знать что 101-й не будет или же это неизвестно? »

предельное количество строк будет не больше 1000... это я с запасом взял :)

azbest
29-09-2015, 01:07
Alexander_88,
сделать можно
но есть наводящие вопросы:
в второй и третьей таблице - есть повторяющиеся записи - например "яблоки" 10, а чуть ниже "яблоки" 25. Тоесть - "посчитанные (перенесенные в первую таблицу ) данные по каждому из фруктов можно удалять из 2 и третьей таблицы или менять их нельзя и хранить как оригинальные данные?
алгоритм - прост: цикл 1 - построчный опрос и запоминание значений (в переменные) по столбцам "А" и "В" в первой таблице, а внутри этого цикла - ещё два цикла по опросу и запоминанию значений (в переменные) второй и третей таблицы - потом сравнение на предмет совпадения переменных - если да - то где надо сплюсовать или вычесть - если нет - пропускаем. :)

a_axe
29-09-2015, 10:24
Alexander_88, насколько я понял вашу мысль, вам не нужно суммировать цифры, на выходе должна быть текстовая строка, в которой через знак "+" перечисляются цифры, то есть например "8.7+6.89", а не их сумма 15.59. Попробуйте код ниже. Оговорки: таблицы должны находится на одной странице, интересующие вас данные выделяете мышкой и запускаете код, результат будет помещаться каждый раз на вновь созданный лист.

Option Explicit
Public Sub data_extr()
Dim objCell As Object, targetSheet As Object, dataSheet As Object
Dim i As Integer
Dim Flag As Boolean
Set dataSheet = ThisWorkbook.ActiveSheet
Set targetSheet = ThisWorkbook.Sheets.Add
dataSheet.Activate
For Each objCell In Intersect(Selection, Selection.Columns(1))
If objCell.Value <> "" Then
i = 1
Flag = False
Do

If targetSheet.Cells(i, 1).Value = "" Then
Flag = True
targetSheet.Cells(i, 1).Value = objCell.Value
targetSheet.Cells(i, 2).Value = objCell.Offset(0, 1).Value
targetSheet.Cells(i, 3).Value = objCell.Offset(0, 2).Value
targetSheet.Cells(i, 4).Value = objCell.Offset(0, 3).Value
Else
If targetSheet.Cells(i, 1).Value = objCell.Value And targetSheet.Cells(i, 2).Value = objCell.Offset(0, 1).Value Then
If objCell.Offset(0, 2).Value <> "" Then targetSheet.Cells(i, 3).Value = targetSheet.Cells(i, 3).Value & "+" & objCell.Offset(0, 2).Value
If objCell.Offset(0, 3).Value <> "" Then targetSheet.Cells(i, 4).Value = targetSheet.Cells(i, 4).Value & "+" & objCell.Offset(0, 3).Value
Flag = True
End If
End If
i = i + 1
Loop Until Flag
End If
Next objCell
targetSheet.Activate
Set dataSheet = Nothing
Set targetSheet = Nothing
End Sub

corbis
29-09-2015, 11:53
Вот такой вариант набросал.

Alexander_88
29-09-2015, 16:12
a_axe, Спасибо, только хотелось бы, чтобы данные постоянно пополнялись, а не переносились всегда на новый лист.. т.е. набрал я одну таблицу, запустил макрос, она объединилась с большой, потом еще сделал маленькую, опять запустил макрос... большая таблица опять пополнилась и т.д.

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

Дали мне вариантик.. единственное тут сделано не вертикально, а горизонтально... т.е. пополняемая таблица (большая) справа, а маленькие будут создаваться слева. Кому интересно прикрепил.

corbis
29-09-2015, 16:39
Можно сделать пополняемую (в тех. задании слишком мало информации). Мне показалось, что на отдельных листах практичнее, ибо если маленькие таблички начнут превращаться в таблицы побольше..

Alexander_88
29-09-2015, 16:58
да, надо было больше инфы дать.... люди заказывают товар каждый день (заказ это маленькая таблица). потом через месяц нужен единый отчет по заказам (большая таблица)

corbis
29-09-2015, 17:38
Смысл примерно понятен. Может тогда сделать, чтобы на каждый месяц свой отчет был (в отдельном листе), а не в одну таблицу всё сгружать?
потом ведь не разгрести..

a_axe
29-09-2015, 18:41
отелось бы, чтобы данные постоянно пополнялись, а не переносились всегда на новый лист.. т.е. набрал я одну таблицу, запустил макрос, она объединилась с большой, потом еще сделал маленькую, опять запустил макрос... большая таблица опять пополнилась и т.д. »
Alexander_88, откровенно - все равно не понятно. Вообще насколько я понимаю - работа не для Excel.
набрал я одну таблицу, запустил макрос, она объединилась с большой, потом еще сделал маленькую, опять запустил макрос... большая таблица опять пополнилась и т.д. »
Добили в основную таблицу (ниже нее) новые строки - и отсортировали, правильно?
Вы определитесь, что вы хотите, сложно получить подходящий результат, если не знаешь, что нужно делать :).

Вот другой код, с оговорками: данные вашей "основной" таблицы располагаются на листе в столбцах 1-4, заголовок таблицы в строчке 1. Новые данные вы набиваете ниже основной таблицы в соответствующие ячейки, запускаете код, происходит сортировка, при этом нижние строки с совпадающими позициями станут пустыми, их значение будет перенесено в строки выше. Пустые строки не удаляются, так как не известно, что будет справа от вашей таблицы. Выделять ничего не требуется, проверка идет по столбцам 1-4 активного листа.
Public Sub data_exist_extr()
Dim objCell As Object, targetSheet As Object, dataSheet As Object
Dim i As Integer, j As Integer
Dim Flag As Boolean
Set dataSheet = ThisWorkbook.ActiveSheet
'Set targetSheet = ThisWorkbook.Sheets.Add
'dataSheet.Activate
For i = dataSheet.UsedRange.Row + dataSheet.UsedRange.Rows.Count - 1 To 1 Step -1
If dataSheet.Cells(i, 1).Value <> "" Then
For j = i - 1 To 1 Step -1
If dataSheet.Cells(j, 1).Value = dataSheet.Cells(i, 1).Value And dataSheet.Cells(j, 2).Value = dataSheet.Cells(i, 2).Value Then
If dataSheet.Cells(i, 3).Value <> "" Then dataSheet.Cells(j, 3).Value = dataSheet.Cells(j, 3).Value & "+" & dataSheet.Cells(i, 3).Value
If dataSheet.Cells(i, 4).Value <> "" Then dataSheet.Cells(j, 4).Value = dataSheet.Cells(j, 4).Value & "+" & dataSheet.Cells(i, 4).Value
dataSheet.Range(Cells(i, 1), Cells(i, 4)).Value = ""
Exit For
End If
Next j
End If
Next i

Set dataSheet = Nothing

End Sub




© OSzone.net 2001-2012