#excel #vba #excel-formula
Вопрос:
По какой-то причине динамическая строка, созданная из определенного диапазона, не учитывается в массиве для циклов. Ниже приведен мой код:
Option Explicit
Dim AccrualFile As Workbook, AccrualSht As Worksheet
Dim AccrualFilePath As String
Dim UniqueNames As String, UniqueAccNames As String
Dim Lrows As Long, Lcols As Long
Sub Segregation()
AccrualFilePath = Application.GetOpenFilename(Title:="Please select Accrual Statement")
Set AccrualFile = Workbooks.Open(AccrualFilePath)
Set AccrualSht = AccrualFile.Sheets(1)
Lrows = AccrualSht.Range("B" amp; Rows.Count).End(xlUp).Row
UniqueNames = Application.WorksheetFunction.TextJoin(""""", """"", True, Application.WorksheetFunction.Unique(AccrualSht.Range("B2:B" amp; Lrows)))
UniqueAccNames = """""" amp; UniqueNames amp; """"""
Dim i As Long
Dim myarr() As Variant
myarr = Array(UniqueAccNames)
For i = LBound(myarr) To UBound(myarr)
Debug.Print myarr(i)
Next
End Sub
Ценю вашу помощь!!
Спасибо.
Комментарии:
1. Вы перепутали строку, разделенную запятыми, со строками, разделенными запятыми.
"foo, bar, baz"
, это не то же самое, что"foo", "bar", "baz"
.2. Я тоже пробовал это, но это не работает. @BigBen
3. Пропустите textjoin и массив и просто используйте
WorksheetFunction.Unique
.4. Он показывает ошибку TypeMistmatch amp; Runtime — 13, если я беру только уникальную формулу
5. @mrk777 Массив содержит только один элемент, потому что вы вводите в функцию только один элемент
Array()
. Вы сохраняете весь текст в одной строковой переменнойUniqueNames
. Если вы хотите создать несколько элементов из одной строки, попробуйте этуSplit
функцию. Но у @BigBen есть лучшее решение.
Ответ №1:
WorksheetFunction.Unique
возвращает массив (2D)1 при передаче a Range
.
myarr = WorksheetFunction.Unique(AccrualSht.Range("B2:B" amp; Lrows))
Dim i As Long, j As Long
For i = LBound(myarr, 1) to Ubound(myarr, 1)
For j = Lbound(myarr, 2) to Ubound(myarr, 2)
Debug.Print myarr(i, j)
Next
Next
1 За некоторыми исключениями, в том числе:
- Когда вывод состоит из одного элемента, он возвращает массив 1D.
Комментарии:
1. Этот код отлично работает, но могу ли я использовать эти значения в качестве критериев фильтрации в самом цикле?
2. Я хотел бы использовать фильтр диапазона с этими именами одно за другим… И я думаю, что смогу это использовать