Доброго дня! Исходные данные - имеются файлы с одним листом в книге, но наименование листа может быть разным. Использую в работе прием https://www.planetaexcel.ru/techniques/24/2152/ с шага №3 (функцию не создаю, использую получить данные - из файла - из папки), но этот прием работает только при одинаковом наименовании листа, который будет в примере преобразования.
Подскажите, как можно написать запрос, изменив [Item="Продажи",Kind="Sheet"] таким образом, чтобы ссылаясь на первый лист книги (числовой указатель) или как-то подставлять данные через дополнительный столбец =Excel.Workbook([Content]) "Name".
Можно переименовать все листы в книгах, но это не выход из ситуации. Исходный файл большого объема, приложить не могу.
vikttur написал:...тормоза при пересчетах функций будуть разносить нервы в клочки )
Пересчеты не планируются. Один раз рассчитались и превратил в значения и анализируются. Для моей работы лучше одно действие даже если оно дольше выполняется excel'ем, чем несколько последовательных действий. У функции есть свои преимущества, не надо рисовать форму ввода.
Msi2102,Для меня критично , чтобы было "0". "" или отрицательные значения не подходят. Меня интересует, можно как-нибудь прописать два действия (замена на 0 и например закрасить ячейку) в рамках функции.
vikttur написал: очему на VBA? Функции листа, вызываемые из VBA, работают медленнее функций, прописанных в формулах. Почему не использовать УФ?Покажите пример.
Вариант максимально упрощен. УФ на большом кол-ве ячеек тормозит.
Цитата
Jack Famous написал: не было проблемы - сам её создам
на большом массиве данных - это критично. Искать НД, и потом их преобразовывать
Как можно "подсветить" нули, которые получились в случае замены?
Доброго дня! Написал функцию если в случае возврата "НД", будет замена на "0". Но теперь надо понимать где реально "0" от ВПР, а где НД=0. Подскажите способ как в "Application.IfNa" указать несколько действий в случае возврата НД, 1 действие - заменить на "0", 2 действие - закрасить ячейку цветом или добавить примечание/заметку
Код
Function ВПР_ЕСЛИОШИБКА_0(что_искать, где_искать, столбец)
ВПР_ЕСЛИОШИБКА_0 = Application.IfNa(Application.VLookup(что_искать, где_искать, столбец, 0), 0)
End Function
Итого получился код с % выполнения, может кому понадобиться
Код
Function VisualVal(rc As Range)
VisualVal = Application.Text(rc.Value, rc.NumberFormat)
End Function
Sub Преобразование_число_в_текст()
Dim rc As Range, calc, ab, xy, a As Long, sres$
'начало отсчета времени
'a = Timer
Application.CutCopyMode = False
ab = Selection.Count
' Отключение пересчёта формул, чтобы ускорить макрос.
' Перед отключением запоминаем режим формул, чтобы потом его вернуть.
calc = Application.Calculation
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For Each rc In Selection.Cells
sres = VisualVal(rc)
'назначаем текстовый формат ячейкам, чтобы избежать лишних преобразований
rc.NumberFormat = "@"
rc.Value = sres
xy = xy + 1
' Application.StatusBar = "Выполнено: " & xy & " из " & ab ' кол-во обработанных ячеек
Application.StatusBar = "Выполнено: " & Int(100 * xy / ab) & "%" ' процент обработанных ячеек
' DoEvents 'чтобы форма перерисовывалась
Next
'сбрасываем значение статусной строки
Application.StatusBar = False
' Включение того, что отключили.
Application.ScreenUpdating = True
Application.Calculation = calc
'вывод затраченного времени
'MsgBox Timer - a
End Sub
Спасибо всем! Но интересует именно преобразование текущих ячеек, без использования функций и добавления дополнительных столбцов. Начал писать макрос, но остановился на том, что надо прочитать содержимое ячейки + использовать функцию + записать итоговый результат в ячейку. Я новичок в макросах по разному писал код, всякие ошибки выпадали. Помогите дописать. Или где-то есть уже готовый макрос.
Код
Function VisualVal(rc As Range)
VisualVal = Application.Text(rc.Value, rc.NumberFormat)
End Function
Sub Преобразование()
' On Error Resume Next
Dim i, x, y As Long
x = ActiveCell.Column
y = ActiveCell.Row
For i = 0 To Selection.Count - 1
Cells(i + y, x).Select
???
Selection.Value = Selection.Value ' преобразование формул в значение
' для визуализации
With Selection.Interior
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
.Color = 65535
.TintAndShade = 0
.PatternTintAndShade = 0
End With
Next
End Sub
Доброго дня! Подскажите макрос, который преобразовывает число в текст с учетом формата ячеек. Знаю, что в известных надстройках присутствует данный функционал, но избыточен для меня, например не нужен откат выполненных действий (это тоже потраченное время). Интересует максимальное быстродействие на большом массиве.
sokol92, заменил и макрос перестал исполняться. Если что я не силен в макросах.
Скрытый текст
Sub New_Multi_Table_Pivot() Dim i As Long Dim arSQL() As String Dim objPivotCache As PivotCache Dim objRS As Object Dim ResultSheetName As String Dim SheetsNames As Variant
'имя листа, куда будет выводиться результирующая сводная ResultSheetName = "Сводная" 'массив имен листов с исходными таблицами SheetsNames = Array("Лист1", "Лист2")
'формируем кэш по таблицам с листов из SheetsNames With ActiveWorkbook ReDim arSQL(1 To (UBound(SheetsNames) + 1)) For i = LBound(SheetsNames) To UBound(SheetsNames) arSQL(i + 1) = "Select `артикул`,`наименование` FROM [" & SheetsNames(i) & "$]" Next i Set objRS = CreateObject("ADODB.Recordset") objRS.Open Join$(arSQL, " UNION ALL "), _ Join$(Array("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=", _ .FullName, ";Extended Properties=""Excel 8.0;"""), vbNullString) End With
'создаем заново лист для вывода результирующей сводной таблицы On Error Resume Next Application.DisplayAlerts = False Worksheets(ResultSheetName).Delete Set wsPivot = Worksheets.Add wsPivot.Name = ResultSheetName
'выводим на этот лист сводную по сформированному кэшу Set objPivotCache = ActiveWorkbook.PivotCaches.Add(xlExternal) Set objPivotCache.Recordset = objRS Set objRS = Nothing With wsPivot objPivotCache.CreatePivotTable TableDestination:=wsPivot.Range("A3") Set objPivotCache = Nothing Range("A3").Select End With
Добрый день! Есть статья - https://www.planetaexcel.ru/techniques/8/133/ в ней есть макрос. Подскажите как модернизировать макрос, чтобы он корректно собирал информации на листах, где порядок названий столбцов разный?
Например, если во вкладке "Лист1" Столбцы с данными "артикул" и "наименование", а во вкладке "Лист2" сначала "наименование", а потом "артикул", то макрос не корректно собирает данные.
Построение сводной таблицы из двух разных источников данных, Построение сводной таблицы из двух разных источника данных, для вывода расчетов по нормативам
Михаил Комиссаров, а чем не устраивает формула СУММЕСЛИ (или СУММЕСЛИМН) для получения сумм из вкладки "Отчеты"? А потом написать итоговую формулу,которая в первом сообщении