Я намагаюся дізнатися, як використовувати словник у. \ TExcel VBA. Тест полягає в тому, щоб отримати всі значення з рядків 1-100000 у стовпці А до словника через масив, а потім записати всі значення у стовпець B. Це відмінно працює до рядка 34464, решта рядків у стовпці B просто отримує #N/A
.
Будь-які ідеї чому?
Sub nnn()
"Tools - References - Microsoft Scripting Runtime
Dim myArray As Variant
Dim myRow As Long
Dim dicMyDictionary As Scripting.Dictionary
Set dicMyDictionary = New Scripting.Dictionary
With ThisWorkbook.Worksheets("Sheet1")
myArray = Range(Cells(1, 1), Cells(100000, 1)).Value
For myRow = LBound(myArray, 1) To UBound(myArray, 1)
dicMyDictionary.Add myRow, myArray(myRow, 1)
Next myRow
myArray = dicMyDictionary.Items
.Range("B1").Resize(dicMyDictionary.Count, 1).Value = Application.Transpose(myArray)
Set dicMyDictionary = Nothing
End With
End Sub
Відповіді:
1 для відповіді № 1Через обмеженості робочого листа функція Transpose
(див. також посилання, розміщені Paul Bica), вам потрібно призначити елементи масиву безпосередньо. Слід працювати з такими елементами:
Option Explicit
Sub nnn()
"Tools - References - Microsoft Scripting Runtime
Dim myArray As Variant
Dim myRow As Long
Dim dicMyDictionary As Scripting.Dictionary
Set dicMyDictionary = New Scripting.Dictionary
With ThisWorkbook.Worksheets("Sheet1")
myArray = Range(Cells(1, 1), Cells(100000, 1)).Value
For myRow = LBound(myArray, 1) To UBound(myArray, 1)
dicMyDictionary.Add myRow, myArray(myRow, 1)
Next myRow
ReDim myArray(1 To dicMyDictionary.Count, 1 To 1)
For myRow = 1 To UBound(myArray, 1)
myArray(myRow, 1) = dicMyDictionary(myRow)
Next myRow
.Range("B1").Resize(dicMyDictionary.Count, 1).Value = myArray
Set dicMyDictionary = Nothing
End With
End Sub