Страницы: 1
RSS
Несовпадение формата данных в сводной таблице и в источнике
 
Столкнулся с проблемой фильтрации в источнике данных сводной таблицы. Например поле "Количество" находится в области строк (НЕ в области значений) сводной таблицы. Я отформатировал это поле чтобы показывались только целые числа, а в источнике данных данное поле отформатировано с двумя знаками после запятой. Соответственно когда макрос берет цифру из сводной таблицы и пытается применить фильтр к источнику данных на основе данной цифры (другого формата) то он не находит такого значения. Например в сводной таблице 1 а в источнике данных 1,00.  
 
Фильтр это достаточно капризная вещь, фильтру нужно чтобы фильтруемое значение так и было 1,00, а 1 он уже не находит. Пытался изменить формат значения сводной таблицы так сказать "на лету" с помощью функции Format взяв за основу полученное значение свойства NumberFormat от истоника данных но для функции Format это значение свойства не понятно.  
 
 
Главный вопрос: как мне подружить эти данные чтобы можно было фильтровать источник данных сводной таблицы? Понятно что можно одинаково отформатировать их одинаково изначально, но это не подходит.  
 
Заранее спасибо!
 
{quote}{login=dimonbk}{date=07.12.2011 10:52}{thema=Несовпадение формата данных в сводной таблице и в источнике}{post}Например поле "Количество" находится в области строк (НЕ в области значений) сводной таблицы  
Заранее спасибо!{/post}{/quote}  
 
В таких случаях, если в область строк вставляться не целое число то в источник данных я обычно добавляю столбец с формулой типа:  
=ТЕКСТ(A2;"0,00") и вставляю уже эти данные  
Иначе полная ерунда может получиться:)  
А вообще видно что у Вас там что то глобальное, да и Макрос какой-то работает, без примера сложно понять.
 
Да, действительно, работает достаточно большой макрос и выкладывать его весь не имеет смысла, придется долго вникать.  
Работа глобального макроса такая: например у вас есть сводная таблица и Вам нужно расшифровать какую нибудь цифру из области значений, Вы делаете двойной клик по данному значению из области значений и происходит стандартная функция сводной таблицы, а именно появляется новый лист с копией той части источника данных которая и образует искомое значение.  
Так вот меня это не устраивало и я реализовал макрос который не копирует источник а переходит в сам источник и фильтрует его до нужного значения. Это очень удобно особенно если нужно достаточно часто изменять какие либо значения.  
В первом посте я описал часть макроса, в принципе этого достаточно. Макрос начинает собирать данные о том какие поля находятся в области строк и столбцов и в фильтре отчета, берет их значения которые образуют нужную нам цифру и фильтрует источник данных по собранным данным. Принцип работы что то типа функции Excel "Получить.данные.сводной.таблицы". Пример из сводной таблицы: Поле "Товар" Элемент "Молоко", Поле "Наименование" Элемент "Бодрая корова", Поле "Количество" Элемент "2", Поле "Единица измерения" Элемент "Литры" и данная цепочка образует цифру в области значений 100 руб. Так вот допустим я в сводной таблице отформатировал Поле "Количество" так что получается цифра "2", а в источнике данных в столбце "Количество" данные отформатированы так что цифра 2 там представлена как "2,00". И когда макрос берет значение "2" из сводной таблицы и пытается применить фильтр в источнике данных к столбцу "Количество" и он не находит цифры "2" потому что там только "2,00". Поэтому я не могу создать еще один столбец в источнике потому что его не будет в сводной таблице, а привязывать макрос к конкретному столбцу я конечно не буду потому что тогда макрос превратиться из универсального в специфичный только для данной сводной таблицы и в другой ситуации нужно будет менять макрос.  
В принципе даже этот пример и не нужен. Основной вопрос: Как "на лету" применить формат которым отформатирована другая ячейка?
 
Ну, если на "лету", то наверное легче всего будет сам макрос подправить. Попробуйте выложить кусочек таблицы с не конфиденциальными данными и не более 100 кб с макросом, на форуме есть спецы и по сводным и по VBA, может подскажут.
 
Попробуйте брать не значение ячейки, а то, что мы "видим" :-)  
Cells(x,y).Text
 
Решил проблему путем исключения цифровых полей из выборки для расшифровки значения из области значений. If PivotField.DataType<>xlNumeric then ...продолжить выборку... Просто я понял что невозможно ни на лету никак подружить их.  
Спасибо всем огромное за участие в дикуссии!
 
Очень нужен ваш макрос или та его часть которая забирает фильтрацию из сводной таблицы и применяет к источника данных
Страницы: 1
Читают тему
Наверх