Есть ли более простой способ импорта данных в массив excel или другую структуру данных? Я пытался исследовать коллекции, но я нашел документацию трудно понять. http://www.functionx.com/vbaexcel/objects/Lesson6.htmПростой способ импорта данных в Excel-коллекции?
https://msdn.microsoft.com/en-us/library/f26wd2e5%28v=vs.100%29.aspx
код у меня ниже открывает файл выбор и ищет заголовок столбца, а затем перебирает каждую строку, хранящие данные в соответствии с цоколем и переменных строками, я сделал этот метод для многих макросов в прошлом, но теперь я имею дело со многими столбцами, и я ищу более продвинутый способ?
Sub Import_NAVRec()
MyPath = Range("b2") 'Defines cell that contains path to source file
Workbooks.Open (MyPath) 'Opens file
Set tempbook = ActiveWorkbook 'Names workbook
LR = Range("A65000").End(xlUp).Row 'finds last row in sourcefile
ReDim aNavRec(1 To LR, 1 To 4) 'Defines NAV Rec array
nRow = 0
cName = "Accounting Basis"
CA = Cells.Find(What:=UCase(cName), After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Column
cName = "Accounting Date"
cB = Cells.Find(What:=UCase(cName), After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Column
cName = "Asset Currency"
cC = Cells.Find(What:=UCase(cName), After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext).Column
For r = 2 To LR
'If Cells(r, cB) = "Trading Gain Loss" Then
nRow = nRow + 1
aNavRec(nRow, 1) = Cells(r, CA) 'Fund Number
aNavRec(nRow, 2) = Cells(r, cB) 'Ledger
aNavRec(nRow, 3) = Cells(r, cC) 'Balance change
'End If
Next r
tempbook.Close
End Sub
Sub Print_output()
Sheets("Output").Select
Set Destination = Range("a2")
Destination.Resize(UBound(aNavRec, 1) + 1, UBound(aNavRec, 2)).Value = aNavRec
End Sub
Посмотрите с помощью ADO, чтобы соединиться с Excel, и с помощью SQL, поэтому независимо от того, где столбцы, до тех пор, как она есть, вы можете использовать что-то например '' select column_name из [Sheet1 $] ", вы будете использовать набор записей, со связанными свойствами и методами для изучения –
После того, как вы установили диапазон, который хотите импортировать, вы можете сделать переменную Variant в одном шаг. Например: «V = диапазон (ячейки (1,1), ячейки (LastRow, LastCol)», тогда V будет одномерным массивом, где первое измерение представляет строки, а второе - столбцы. –
Если вы есть рабочий код, который просто нуждается в улучшениях, тогда вы, вероятно, не в том месте с этим сообщением. [Обзор кода] (http://codereview.stackexchange.com/) - это то, где они обрабатывают существующий/рабочий код и делают все возможное для улучшения это с точки зрения скорости, безопасности, устойчивости и долговечности.Пробуйте попробовать.Они хорошо! Тем временем вы можете рассмотреть возможность использования этого: 'Dim aNavRec as Variant', а затем' aNavRec = Range («A2: D "и LR)' – Ralph