Я изменил код VBA, найденный по адресу checking if value present in array, по коду ниже. Пользователь выберет имя поля, и я хочу, чтобы код нашел столбец, в котором указано это поле, и создайте массив всех элементов в этом столбце, но я хочу, чтобы каждое непустое значение отображалось только один раз в массиве. Я не хочу дубликатов.Проверка наличия значения в массиве
Например, если столбец имеет значения A, B, A, C, D, я хочу код, чтобы вернуть массив как A, B, C, D.
я получаю ошибку во время выполнения 13 - несоответствие типа на этой строке кода:
If cell.Value <> "" And IsError(WorksheetFunction.Match(cell.Value, MyArray, 0)) Then
Я запутался, потому что кажется, все мои типы данных являются правильными. Может ли кто-нибудь помочь?
Sub ChangeBlock()
Dim MyArray() As String
Dim cell As Range
Dim ColNum As Integer
Dim i As Integer
If Not Intersect(ActiveCell, Range("Block1")) Is Nothing Then
If ActiveCell.Value = "" Then Exit Sub
ColNum = WorksheetFunction.Match(ActiveCell.Value, Sheets("Budget Table").Range("A1:AG1"), 0)
For Each cell In Sheets("Budget Table").Columns(ColNum)
If cell.Value <> "" And IsError(WorksheetFunction.Match(cell.Value, MyArray, 0)) Then
ReDim Preserve MyArray(i)
MyArray(i) = cell.Value
i = i + 1
End If
Next
End If
MsgBox (MyArray)
End Sub
Спасибо, ди. У меня есть вопрос: почему значение представляет собой 2D-массив? На мой взгляд, один столбец данных в excel будет лучшим примером 1D-массива. Если это фактически 2D-массив, то какой пример 1D-массива? Может ли он существовать в электронной таблице Excel? Извините, если это глупый вопрос. Или вы говорите, что объект value возвращает 2D-массив, в то время как объект ячейки возвращает 1D-массив? Извините, если я что-то не понимаю. Я думаю, что меня путают, когда вы говорите: «На самом деле переменная ячейка в столбце, чтобы правильно сравнивать» @dee – christopheralan88
У меня там была TYPO, '' 'Фактически переменная cell 'in'''' должна быть' ' 'Фактически переменная ячейка 'is''''. См. Отредактированный ответ HTH. – dee