Здравствуйте! Прикреплённый файл - таблица с показан

Автор ForumOOo (бот), 12 ноября 2014, 18:23

0 Пользователи и 1 гость просматривают эту тему.

ForumOOo (бот)

Компонент: Calc
Версия продукта:
Сборка: 9bb7eadab57b6755b1265afa86e04bf45fbfc644
ОС: Windows 8

Здравствуйте!

Прикреплённый файл - таблица с показаниями температур за 2012-2014 (по сей день) год. Мне необходимо создать макрос, который удалил бы все строки за исключением тех, время которым соответствует либо
12:00 либо 16:00. Затем, на основе полученных данных, макрос должен в первом столбце оставить только дату (время удалить) вида "YYYY-MM-DD" и соединить строки (по две штуки) друг с другом, высчитывая
среднюю между температурами. Возможно ли такое?

Я пробовал писать макрос для удаления. Получилось следующее:
Option Explicit

Sub Macro1
   Dim j, i as integer
   Dim Doc, Sheet as object
   
   j = 0
   Doc = StarDesktop.CurrentComponent
   Sheet = Doc.CurrentController.ActiveSheet
   
   For i = 1 to 8347
      If j >= 2 and j

Тестовый файл: http://forumooo.ru/attachments/upload/t.ods (105.56 КБ)

--
Подпись: Feers1de

Feers1de

Не вместился почему-то макрос:
Option Explicit

Sub Macro1
   Dim j, i as integer
   Dim Doc, Sheet as object
   
   j = 0
   Doc = StarDesktop.CurrentComponent
   Sheet = Doc.CurrentController.ActiveSheet
   
   For i = 1 to 8347
      If j >= 2 and j <= 8 Then
         Sheet.Rows.removeByIndex(i, 1)
      End If
      
      If j = 8 Then
         j = 0
      Else
         j = j + 1
      End If
   Next i

После использования макроса получился какой-то бардак - не то, что я ожидал.

Feers1de

Просьба оную тему удалить. Не туда написал.

JohnSUN

Добро пожаловать на форум!
Боюсь, задача решения не имеет... Потому как, наверное, описка в постановке задачи: во всей таблице ни одного показания на 16:00...

Уточни, плз, еще раз: выбрасываем все значения кроме двух за день, среднее берем только по ним?
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

JohnSUN

В общем, без макроса здесь на пять минут преобразований... Если нужен только результат, то он в приложенном файле. А если нужен способ решения - опишу завтра
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Feers1de

Прошу прощения, 15:00. Ошибся. Желательно и способ решения узнать...

JohnSUN

Ну, вот так:

1. Первым делом добавляем заголовки колонок — с ними будет проще работать, чем с названиями Столбец A/Столбец B. Вставляем новую строку выше первой и вписываем Дата-Температура.
2. Данные в таблице сейчас в виде текстовых строк, а не в виде «настоящих» дат и чисел. В этом можно убедиться, если нажать Ctrl+F8 (меню Вид - Выделение значений цветом) или посмотреть на значение в строке формул (перед каждым значением стоит апостроф). На данном этапе текстовые дата/время нам на руку — для текстовых строк есть возможность указать фильтр Содержит/Не содержит. Выбираем Данные-Фильтр-Стандартный фильтр и задаем условие "Дата не содержит 12: И Дата не содержит 15:" (ну, или "Дата не заканчивается на 12:00 И Дата не заканчивается на 15:00", но тут на четыре ноля больше писать). Смело удаляем все отфильтрованные данные (кроме строки заголовков), удаляем фильтр, отображаем скрытые строки.
3. Теперь преобразуем текстовые строки в значения. Можно это сделать через два вызова Поиск/Замена, отдельно для каждого столбца. А можно через Данные-Текст по столбцам.
4. Можем отсортировать получившиеся данные по возрастанию дат — это избавит нас от пустых строк (сдвинет их ниже данных)
5. Выбираем Данные-Сводная таблица-Создать, указываем, что даты будут заголовками строк, а данными — средние значения температур.
Вот вроде и всё...
Да, кстати, там у тебя в данных за второе января позапрошлого года не было измерения в три часа вечера... Не знаю, существенно ли это.
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Feers1de

Премного благодарен Вам! Очень информативный ответ. Да ещё и с gif'кой. Что бы я без Вас делал...

Ещё один вопрос - каким образом Вы сводную таблицу перенесли в основную и мгновенное удалили её? Это какое-то сочетание клавиш?

JohnSUN

Исходные данные остались там же, где и были.
Calc для сводной таблицы создал новый лист... Он всегда так делает, если явно не указать в Параметрах положение. Просто название листа длинное, ярлычок получился широкий и вытеснил ярлык исходного листа с экрана... Да там, на гифке, должно быть видно (внизу слева), что надпись Лист 1/1 меняется на Лист 2/2
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Feers1de

Тогда ещё вопрос. Каким образом можно удалить "причуды сводной таблицы"? То есть мне лично не нравится как отображаются заголовки столбцов. Почему они не текстовые как в исходном листе?

Feers1de


JohnSUN

Это просто:
1. Стоя на любой ячейке сводной таблицы жмём Ctrl+* (Пометить область данных) - Calc выделит весь диапазон
2. Ctrl+C или Ctrl+Insert - обычное копирование в буфер обмена
3. Здесь же, не сходя с места - Ctrl+Shift+V (или Правка - Специальная вставка), ставим птички на Текст (заголовки столбцов), Числа (собственно температуры), Даты и время (колонка дат) и Форматы (иначе даты отобразятся как 40909, 40910, 40911...) и OK
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

Feers1de

Я решил это обычным копированием данных (:D)