Показать полную графическую версию : Подскажите функцию для 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
На счет функции не уверен, а вот макросом можно замутить.
Не понятно:
1. как соединяются столбцы при совпадении.
2. размеры таблиц.
Хорошо бы файл с таблицами..
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
Если исключить пустые ячейки проблематично, я могу создавать таблицы слитно, т.е. будет одна большая таблица.. я выделю ее, нажму кнопку и произойдет слияние
есть сверху большая таблица и снизу две мини таблицы (пример): »Меня интересует такой вопрос, допустим та, верхняя таблица, когда в неё в конец добавятся данные, не получится ли так что места не хватит, т.к. нижние маленькие будут мешать?
Можно ли две маленькие вынести на отдельные листы?
И ещё мне интересно, есть ли предельное количество строк для трёх таблиц, верхней и двух нижних? Например, можно уложиться в 100 строк и знать что 101-й не будет или же это неизвестно?
Alexander_88
28-09-2015, 22:14
Меня интересует такой вопрос, допустим та, верхняя таблица, когда в неё в конец добавятся данные, не получится ли так что места не хватит, т.к. нижние маленькие будут мешать? »
Я могу либо специально пропускать очень много строк, между большой таблицей и маленькими, чтобы места хватило, либо
Можно ли две маленькие вынести на отдельные листы? »
Можно вынести на отдельные листы.
И ещё мне интересно, есть ли предельное количество строк для трёх таблиц, верхней и двух нижних? Например, можно уложиться в 100 строк и знать что 101-й не будет или же это неизвестно? »
предельное количество строк будет не больше 1000... это я с запасом взял :)
Alexander_88,
сделать можно
но есть наводящие вопросы:
в второй и третьей таблице - есть повторяющиеся записи - например "яблоки" 10, а чуть ниже "яблоки" 25. Тоесть - "посчитанные (перенесенные в первую таблицу ) данные по каждому из фруктов можно удалять из 2 и третьей таблицы или менять их нельзя и хранить как оригинальные данные?
алгоритм - прост: цикл 1 - построчный опрос и запоминание значений (в переменные) по столбцам "А" и "В" в первой таблице, а внутри этого цикла - ещё два цикла по опросу и запоминанию значений (в переменные) второй и третей таблицы - потом сравнение на предмет совпадения переменных - если да - то где надо сплюсовать или вычесть - если нет - пропускаем. :)
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
Вот такой вариант набросал.
Alexander_88
29-09-2015, 16:12
a_axe, Спасибо, только хотелось бы, чтобы данные постоянно пополнялись, а не переносились всегда на новый лист.. т.е. набрал я одну таблицу, запустил макрос, она объединилась с большой, потом еще сделал маленькую, опять запустил макрос... большая таблица опять пополнилась и т.д.
corbis, Спасибо.. как я понял в результирующую таблицу пополняются только те данные, которых нету, а так же написано, что нужно очищать каждый раз таблицу. т.е. пополнять ее каждый раз не удастся.
Дали мне вариантик.. единственное тут сделано не вертикально, а горизонтально... т.е. пополняемая таблица (большая) справа, а маленькие будут создаваться слева. Кому интересно прикрепил.
Можно сделать пополняемую (в тех. задании слишком мало информации). Мне показалось, что на отдельных листах практичнее, ибо если маленькие таблички начнут превращаться в таблицы побольше..
Alexander_88
29-09-2015, 16:58
да, надо было больше инфы дать.... люди заказывают товар каждый день (заказ это маленькая таблица). потом через месяц нужен единый отчет по заказам (большая таблица)
Смысл примерно понятен. Может тогда сделать, чтобы на каждый месяц свой отчет был (в отдельном листе), а не в одну таблицу всё сгружать?
потом ведь не разгрести..
отелось бы, чтобы данные постоянно пополнялись, а не переносились всегда на новый лист.. т.е. набрал я одну таблицу, запустил макрос, она объединилась с большой, потом еще сделал маленькую, опять запустил макрос... большая таблица опять пополнилась и т.д. »
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC