Я выполняю макрос VBA, который принимает введенное вами значение, передает его в фильтр в сводной таблице, а затем использует результаты сводной таблицы для создания новой результирующей таблицы с размером (:, 2) со строкой разделителя (верхняя часть в поле выбора), расположенная справа от других значений (в виде индекса), чтобы затем перенести результаты на другой лист рабочей книги.
Некоторые важные примечания:
- Все данные представлены в формате str
- Все значения индекса являются полностью числами
- Некоторыезначения данных начинаются с цифр
- В некоторых разделах, где индекс указан в базе данных 2x, вместо этого имеется до 16 точек данных перед передачей нового индекса.Это причина, по которой мой оригинальный код только с каждым 8 не работал.
- Результаты могут быть любой длины от 8 точек данных до сотен, xlDown не работал для установки диапазона, поэтому я просто установил A1: A1000
Текущие результаты:
- Кажется, все работает, пока я не достиг индекса с несколькими наборами данных, и в этом случае моя функция (Row-2) mod 8 = 0 сбрасывается
- Индекс копируетсяправильно в этих случаях и удаление пустой строки
- Данные из финальной таблицы надежно перетаскиваются в другие таблицы
Некоторые вещи, которые я пробовал:
- IsNumeric, кажется, анализирует строки, начинающиеся с числа и отбрасывая его как True
- Поскольку не все значения содержат 8 точек данных, я попытался добавить значение корректировки, чтобы исправить индексирование, если оно не было числовым, но все ещес правильным индексом
Попытка просто перетащить значение вниз на 16 строк, чтобы, если число было найдено, оно было перезаписано.Это не сработало.
ActiveSheet.PivotTables("PivotTable1").PivotFields("searchcode").CurrentPage = Sheets("report").Range("B4").Value
Range("A5:A1000").Select
Selection.copy
Sheets("scratch").Select
Range("A1").Select
ActiveSheet.Paste
ActiveSheet.Range("A1", "A1000").Select
Dim Myrange As Range
Dim Myrow As Range
Dim Adjust As Integer
Adjust = 2
Set Myrange = Selection
For Each Myrow In Myrange.Rows
If IsNumeric(Myrow.Row) And ((Myrow.Row = Adjust Or (Myrow.Row - Adjust) Mod 9 = 0)) Then
Sheets("scratch").Range("B" & Myrow.Row + 1).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 2).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 3).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 4).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 5).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 6).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 7).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 8).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 9).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 10).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 11).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 12).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 13).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 14).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 15).Value() = Range("A" & Myrow.Row).Value()
Sheets("scratch").Range("B" & Myrow.Row + 16).Value() = Range("A" & Myrow.Row).Value()
Range("A" & Myrow.Row).Clear
ElseIf (Not (IsNumeric(Myrow.Row))) And ((Myrow.Row = Adjust Or (Myrow.Row - Adjust) Mod 9 = 0)) Then
Adjust = Adjust + 1
End If
Next Myrow
Application.CutCopyMode = False
ActiveSheet.Range("A1:A1000") = [index(lower(A1:A1000),)]
ActiveSheet.Range("A1:A1000") = [index(trim(A1:A1000),)]
ActiveSheet.Range("A1:A1000").Select
Selection.Replace What:="(blank)", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="-", Replacement:=" ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="â€", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="~*", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Для этого моя сводная таблица выглядит примерно так:
Filter 1 (All)
Filter 2 (Code)
Row Labels
Index 1
data1
data2
data3
data4
data5
data6
data7
data8
Index 2
data1
data2
data3
data4
data5
data6
data7
data8
Index 3
data1
data2
data3
...
Что я хочу:
Filter 1 (All)
Filter 2 (Code)
Row Labels
data1 Index1
data2 Index1
data3 Index1
data4 Index1
data5 Index1
data6 Index1
data7 Index1
data8 Index1
data1 Index2
data2 Index2
data3 Index2
data4 Index2
data5 Index2
data6 Index2
data7 Index2
data8 Index2
data1 Index3
data2 Index3
data3 Index3
...