Страницы: 1
RSS
Колонки в строки с переносом значений
 
Здравствуйте!  
Прошу помочь. Имеется таблица с номенклатурой, в которой по дням (колонки) отображаются продажи и остатки (по две колонки для каждого дня). Есть необходимость отобразить продажи и остатки не в колонках, а в строках для каждой номенклатуры.    
Т.е. в исходной таблице две колонки для каждого дня (продажи и остатки), а надо сделать две строки для каждой номенклатуры. Я с ней бился, но не получилось даже для одной номенклатуры так сделать, не говоря уже о таблице с несколькими значениями.
 
Здравствуйте! Ждёте формульное решение или макросом?  
P.S. Почему никто не покупает тапки?
 
Вот макросом - запускаем по зеленой кнопке. Т.к. таблицы, видимо, могут быть в разных местах на листе, то по запросу надо явно указать левый верхний угол таблиц (по умолчанию А3 для исходной таблицы и А12 - для результирующей).  
Одно условие: исходная таблица должна быть отделена от других данных хотя бы одной пустой строкой и пустым столбцом (т.е. между названием "Исходная таблица" и самой таблицей д.б. пустая строка).
 
Юрий М, буду рад обоим вариантам - тут главное иметь преобразованную таблицу. Но разве такое возможно сделать формулами? Это было бы интересно.  
P.S. тапки из прошлогодней коллекции)  
 
nilem, спасибо, все отлично работает! Условие вполне гуманное и легко выполнимое!
 
Решение макросом уже есть :-). А формулы - это не ко мне.
 
{quote}{login=Юрий М}{date=02.07.2010 11:10}{thema=}{post}Почему никто не покупает тапки?{/post}{/quote}  
Наверное, белые :)  
 
Ranson:"Но разве такое возможно сделать формулами?"  
Формулами можно и не такое. Вставьте в Вашу таблицу:  
=ИНДЕКС($B$5:$Q$7;ОСТАТ(ЦЕЛОЕ((СТРОКА(1:1)-1)/2);СЧЁТЗ($A$5:$A$10))+1;СТОЛБЕЦ(A:A)*2+ОСТАТ(СТРОКА(1:1)-1;2)-1)
 
Черт возьми, как многому еще надо учиться... На решение макросом я не претендовал, так как их не знаю и даже с уже написанным разобраться мне проблематично, то с формулами думал что на "ты".  
Всем спасибо.
 
Помогите доработать макрос! Написанный nilem'ом макрос работает максимум по 4-м номенклатурным позициям, а их будет много. Я почти разобрался как он работает, но вот это "почти"... Прикреплен файл с 5-ю позициями, при запуске макроса выдает "subscript out of range".
 
Option Explicit  
Sub KvaziTransp()  
   Dim X(), Y(), poz1 As Range, poz2 As Range, rez As Range  
   Dim i As Integer, j As Integer  
   On Error Resume Next  
   Set poz1 = Application.InputBox("Выделите левый верхний угол исходной таблицы", _  
                                  "Выбор таблиц", "$A$3", Type:=8)  
   If poz1 Is Nothing Then Exit Sub  
   On Error GoTo 0  
   X = poz1.CurrentRegion.Value  
   ReDim Y(1 To (UBound(X, 1) - 2) * 2 + 1, 1 To (UBound(X, 2) - 1) / 2 + 2)  
   For i = 3 To UBound(X, 1)  
       For j = 3 To UBound(Y, 2)  
           Y(2 * i - 4, j) = X(i, 2 * j - 4): Y(2 * i - 3, j) = X(i, 2 * j - 3)  
       Next j  
   Next i: Y(1, 1) = X(2, 1)  
   For i = 3 To UBound(Y, 2): Y(1, i) = X(1, 2 * i - 4): Next i  
   For j = 3 To UBound(X, 1): Y(2 * j - 4, 1) = X(j, 1): Next j  
   For i = 2 To UBound(Y, 1): Y(i, 2) = X(2, (i Mod 2) + 4): Next i  
   On Error Resume Next  
   Set poz2 = Application.InputBox("Выделите левый верхний угол таблицы-результата", _  
                                   "Выбор таблиц", "$A$12", Type:=8)  
   If poz2 Is Nothing Then Exit Sub  
   On Error GoTo 0  
   Set rez = poz2.Resize((UBound(X, 1) - 2) * 2 + 1, (UBound(X, 2) - 1) / 2 + 2)  
   rez.Value = Y: rez.Borders.Color = vbBlack  
End Sub
Я сам - дурнее всякого примера! ...
 
KuklP, спасибо!  
Уважаемые знатоки, если позволите, хотел бы еще воспользоваться вашей помощью в модернизации сделанной таблицы:  
Результат обработанной таблицы выведен на отдельный лист, над таблицей с результатом сделана диаграмма, в которой отображается динамика продаж с остатками по дням для выбранной номенклатурной позиции (выбор позиции происходит путем редактирования исходных данных диаграммы). Справа от таблицы сделаны расчеты нескольких показателей, среди которых: уровень присутствия товара, среднедневные продажи (без учета периода дефицита), потенциально упущенные продажи и т.п. для выбранной позиции (выбор происходит путем редактирования значений в формулах).  
Вопрос следующий - можно ли сделать так, чтобы под диаграммой была полоса прокрутки (с возможностью цифрового ввода номенклатурной позиции и перебором позиций по таблице вверх/вниз), изменяя значение в которой, в диаграмме и таблице с расчетами справа выводилась бы информация по выбранной в текущий момент позиции?  
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
 
Не увидел недочет-с. KuklP, спасибо.  
Та же зеленая кнопка формирует список на листе "результат" в А1. Выбирая кошек в списке, меняем расчеты и диаграмму (форматирование для 2007).  
Раз уж таблицы стационарны, то убрал инпутбоксы.  
Опять условие: результирующая таблица д.б. отделена от др. данных пустыми строками и столбцами.  
Для М3 формула =СЧЁТЕСЛИ(КонОстаток;"<"&M2), для М8 =100%-(M3/СЧЁТЗ(C17:AG17))
 
Это именно то, что нужно (и выглядит лучше)! Премного благодарен!    
Только один момент - там что-то не так с шаттлом. В таблице, кот. справа от графика, по нему показываются нулевые средневзвешенные продажи, упущенные продажи и остатки на конец, хотя должны быть не нули.    
Еще я упустил из виду что когда товар отсутсвует, то его количество не нулевое - ячейка пустая. В примере видно что уровень присутствия базуки должен быть нулевым, а он 68%. Думаю, завтра этот момент я победю в формуле для M3 (сейчас нет возможности), а вот с шаттлом пожалуй не справлюсь.
 
Шаттлы, Вы знаете, у меня тоже вызвали недоумение. Поясните своими словами, что Вы хотите получить в ячейке М6 (и заодно в М8).
 
Вчерашние вопросы закрыл, но появилось кое-что новенькое.  
 
По вчерашнему:  
1. В M6 рассчитывается среднедневная величина продаж только за те дни, когда остаток на конец дня больше либо равен min остатку (кстати, должен браться-то остаток на начало дня..., ну с этим что-нибудь придумаю). У Вас слетел массив в формуле, поэтому по некоторым позициям результат был немного некорректный, а по шаттлу ушел в ноль. Поставил массив и все заработало, плюс добавил проверку на ошибку деления на ноль (по базуке показывал ошибку).    
 
2. В M8 все считается как положено (Ваша формула, конечно, тут более уместна чем моя). Ошибка крылась в формуле М3 - не считались пустоты. Добавил в М3 проверку на пустоты и теперь все ок!  
 
 
Про новенькое:  
nilem, что-то не так с распознаванием наименований номенклатуры в выпадающем списке над диаграммой. Во вложенном примере у гарпуна куча характеристик в скобках после наименования и в выпадающем списке эти характеристики отображаются как отдельные позиции. Если выбрать этот гарпун, то появляется ошибка: "Run-time error "91". Object variable or With block variable not set".    
Можно это поправить?  
 
 
Если кто поможет с последними хотелками, буду очень признателен!    
Что осталось:  
1) сделать чтобы можно было брать исходную таблицу с различным количеством периодов и в диаграмме с таблицей расчетов это учитывалось.  
2) добавить возможность использования нескольких видов периодов: день/неделя/декада/месяц/квартал/полугодие/год, чтобы в зависимости от указанного вида периода, в таблице делались соответствующие расчеты (пересчет в дни из недели, месяца и т.п.)  
3) выделить цветом в таблице с результатом (продажи/остатки) все строки "продажи".
 
{quote}{login=Ranson}{date=09.07.2010 03:53}{thema=}{post}Вчерашние вопросы закрыл, но появилось кое-что новенькое...Можно это поправить?{/post}{/quote}  
 
Не думал, не гадал, что могут быть такие гарпуны. Да, в этом случае код работает некорректно (хотя список был интересный). Давайте использовать неинтересный комбобокс.
 
Как по мне, так этот комбобокс очень даже интересный! Причем на 100% работоспособный и мегаполезный!  
Только я упустил из виду одну важную вешь - не для всех формул установил именные диапазоны. Сейчас в ячейке М14 (остатки на конец периода в днях продажи), при изменении номенклатуры в комбобоксе, ссылка в формуле не меняется. Задал имя для ссылки в формуле М14 "ОстНаКонец", но методом подбора вписать это имя в макрос работы комбобокса не получилось. Ячейка "ОстНаКонец" должна быть всегда последней ячейкой диапазона "КонОстаток". Прошу помощи в модернизации макроса
 
В процедуре Private Sub ComboBox1_Change() вместо строки  
.Name = "название"  
вставьте  
Cells(.Row + 1, Columns.Count).End(xlToLeft).Name = "ОстНаКонец"  
("название" - просто не используется).
 
Все работает. Спасибо за помощь!
Страницы: 1
Читают тему
Наверх