2015-12-27 2 views
1

Используя VBA, я импортирую файл csv в excel из Yahoo Finance, содержащий 7 значений, разделенных запятыми, в строке. Я хотел бы импортировать только первое и пятое значения, разделенные запятыми для каждой строки. В настоящее время я импортирую весь csv, извлекаю его в столбцы и удаляю ненужные столбцы. Однако этого недостаточно для будущего использования этого импорта. Как я могу сделать выбор столбцов, которые я хочу импортировать?VBA: импортировать только выбранные столбцы файла csv

Текущий код:

qURL = "http://ichart.finance.yahoo.com/table.csv?s=" & Symbol & "&a=" & Month(Startdate) - 1 & "&b=" & Day(Startdate) & _ 
     "&c=" & Year(Startdate) & "&d=" & Month(Enddate) - 1 & "&e=" & Day(Enddate) & "&f=" & Year(Enddate) & "&g=" & QuoteInterval & "&ignore=.csv" 

     With Sheets(2).QueryTables.Add(Connection:="URL;" & qURL, Destination:=ActiveCell.Offset(1, 0)) 
      .BackgroundQuery = True 
      .TablesOnlyFromHTML = False 
      .Refresh BackgroundQuery:=False 
      .SaveData = True 
     End With 

      Sheets(2).Range("A2:A" & Lastrow).TextToColumns Destination:=Sheets(2).Range("A2"), DataType:=xlDelimited, _ 
      TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _ 
      Semicolon:=False, Comma:=True, Space:=False, other:=False 
      Columns(2).EntireColumn.Delete 
      Columns(2).EntireColumn.Delete 
      Columns(2).EntireColumn.Delete 
      Columns(3).EntireColumn.Delete 
      Columns(3).EntireColumn.Delete 
      Range("A3:A" & Lastrow).NumberFormat = "dd mmm yy" 
      Range("B3:B" & Lastrow).NumberFormat = "0.00" 
+0

Я не уверен, есть ли лучшее решение, поэтому я оставляю это как комментарий, сначала удаляю столбцы из самого большого индекса, как в обратном порядке. Таким образом, удаление столбца будет намного чище. Вы не будете иметь несколько столбцов (2) 'и' Столбцы (3) '. Просто сделайте удаление 7,6,4,3,2. – Bmo

ответ

1

Вы можете поставить массив в качестве параметра FieldInfo для TextToColumns

Это скрыть столбцы 2,3,4,6,7

.TextToColumns FieldInfo := Array(Array(1, 1), Array(2, 9), Array(3, 9), Array(4, 9), Array(5, 1), Array(6, 9), Array(7, 9))

1 = xlGeneralFormat
9 = xlSkipColumn

+0

Спасибо, выглядит как правильный трек. Однако этот код пропускает такое же количество столбцов, сколько количество массивов в массиве, начиная с первого столбца, независимо от того, что я заполняю в массивах. Например, CSV: A, B, C, D, E, F, G с кодом, который вы предоставили, пропускает столбцы от A до E (потому что массив состоит из 5 массивов) и помещает F и G в столбцы , Следовательно, с массивом, состоящим из 4 массивов, он пропускает первые 4 столбца и т. Д. Я пробовал все возможности, но он начинается с первого столбца независимо от того, что. –

+0

Если вы добавите массив для каждого поля, это сработает? см. править ... – WhiteHat

+0

Да, это все! Удивительно, большое спасибо. –

Смежные вопросы