По мотивам темы.
Здравствуйте Уважаемые!
Давно хотел уточнить у Вас, дорогие друзья, такой вопрос.
Есть Словарь элементами которого являются Массивы
Как (и можно ли в принципе), напрямую, без передачи Массива в переменную, изменить какое нибудь его значение?
Прочитать единичное значение напрямую получается, а вот изменить никак.
Макрос складывает отдельные значения по ключу.
Может где-то в синтаксисе туплю...
Здравствуйте Уважаемые!
Давно хотел уточнить у Вас, дорогие друзья, такой вопрос.
Есть Словарь элементами которого являются Массивы
Как (и можно ли в принципе), напрямую, без передачи Массива в переменную, изменить какое нибудь его значение?
Прочитать единичное значение напрямую получается, а вот изменить никак.
Макрос складывает отдельные значения по ключу.
Может где-то в синтаксисе туплю...
| Код |
|---|
Private Sub CommandButton1_Click()
Dim x(), iArr(), newArr(), I&, J&
x = Range("A1:F4").Value
On Error Resume Next
With CreateObject("Scripting.Dictionary")
For I = 1 To UBound(x)
.Add x(I, 1), Application.Index(x, I, 0)
If Err <> 0 Then
'так работает
iArr = .Item(x(I, 1))
For J = 2 To UBound(iArr)
iArr(J) = iArr(J) + x(I, J)
Next
.Item(x(I, 1)) = iArr
' 'необходимо увеличить каждый элемент массива на определенное значение
' 'прямое изменение элемента массива не работает
' For J = 2 To UBound(.Item(x(I, 1)))
' .Item(x(I, 1))(J) = .Item(x(I, 1))(J) + x(I, J)
' Next
Err.Clear
End If
Next
ReDim newArr(1 To .Count, 0 To UBound(x, 2)): I = Empty
For Each iKey In .Keys
I = I + 1: newArr(I, 0) = I
'простое обращение к элементу массива работает
For J = 1 To UBound(.Item(iKey))
newArr(I, J) = .Item(iKey)(J)
Next
Next
End With
Range("A16").Resize(UBound(newArr), UBound(newArr, 2) + 1) = newArr
End Sub |
Согласие есть продукт при полном непротивлении сторон