Использовать массив целых чисел для автофильтрации нескольких критериев - PullRequest
0 голосов
/ 10 февраля 2020

Мне кажется, у меня проблема с типом данных. Я экспортирую лист как .csv из Таблицы и пытаюсь использовать столбец целых идентификаторов счетов (который экспортируется как «Общий формат») и вводить эти значения в массив. Затем я хочу использовать этот массив целых чисел в моем автофильтре, чтобы я мог отфильтровать несколько критериев (может быть много целочисленных идентификаторов, по которым мне может понадобиться фильтровать, а не только 2). Я также хочу фильтровать по массиву больших объектов, который содержит группы, на которые я пытаюсь нацелиться.

Когда я устанавливаю bikeARR = Tester.Range("A2:A" & lastRow) непосредственно с листа, автофильтр не работает. Я пытался отформатировать значения как «ТЕКСТ» в Excel. Я также попытался добавить знак «» перед идентификаторами, чтобы он отображался в виде текста, но когда я заполняю bikeARR непосредственно с листа Tester, мой фильтр не работает. Если я использую bikeARR = Array("145", "147", "11868", "281"), то TableauRCSA фильтрует правильно. Сначала он отфильтрует 3 объекта, а затем отфильтрует каждое из значений ID. Я считаю, что массив должен быть текстовым значением, но как я могу заставить это произойти, когда я заполняю свой массив?

Sub testArray()
Dim bikeARR, LOB As Variant
Dim TableauRCSA, Tester As Worksheet
Dim lastRow As Integer


Set TableauRCSA = Workbooks("BPM_Sprint_SharePoint_Tracking.xlsm").Sheets("IPRC_Publish_Process_Model_+_RC")
Set Tester = Workbooks("BPM_Sprint_SharePoint_Tracking.xlsm").Sheets("Tester")
lastRow = Tester.Cells(Rows.Count, 1).End(xlUp).Row
'bikeARR = Tester.Range("A2:A" & lastRow)

bikeARR = Array("145", "147", "11868", "281")

LOB = Array("CB", "CRE", "CIB")

TableauRCSA.Activate
TableauRCSA.Range("A1").AutoFilter Field:=1, Criteria1:=LOB, Operator:=xlFilterValues 'Filter for LOB element
TableauRCSA.Range("B1").AutoFilter Field:=2, Criteria1:=bikeARR, Operator:=xlFilterValues 'Filter for BIKE IDs
End Sub

1 Ответ

0 голосов
/ 10 февраля 2020

Мне удалось найти решение моей проблемы. Используя функцию CStr, она преобразует целое число в строку и работает в автофильтре.

Sub testArray()
Dim bikeARR, LOB As Variant
Dim TableauRCSA, Tester As Worksheet
Dim lastRow, total As Integer

Set TableauRCSA = Workbooks("BPM_Sprint_SharePoint_Tracking.xlsm").Sheets("IPRC_Publish_Process_Model_+_RC")
Set Tester = Workbooks("BPM_Sprint_SharePoint_Tracking.xlsm").Sheets("Tester")
lastRow = Tester.Cells(Rows.Count, 1).End(xlUp).Row

'Fill Team List array
ReDim bikeARR(0 To (lastRow - 1))
i = 0
For x = 2 To lastRow 'NOTE: Team list starts at C2
    bikeARR(i) = CStr(Tester.Cells(x, 1).Value) 'convert integer to string
    i = i + 1
Next x

LOB = Array("Commercial Banking", "Commercial Real Estate", "Corporate Banking")


TableauRCSA.Activate
TableauRCSA.Range("A1").AutoFilter Field:=1, Criteria1:=LOB, Operator:=xlFilterValues 
'Filter for LOB element
TableauRCSA.Range("A1").AutoFilter Field:=2, Criteria1:=bikeARR, Operator:=xlFilterValues 'Filter for BIKE IDs
End Sub
...