Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Импорт в эксель, на несколько листов согласно условию.
 
Цитата
Если файлы по объёму небольшие
Фалы могут быть по несколько мегабайт. Имеет ли смысл Предложенный вами алгоритм для больших файлов?
Импорт в эксель, на несколько листов согласно условию.
 
Вообщем вот так работает
Читаем вторую строку из каждого фала, в 65 столбце находим серийный номер, если лист с таки номером не существует, создаём его, вставляем данные, если существует, просто переходим на него и вставляем данные

Макрос



Как можно оптимизировать по производительности? Файлов очень много, размер большой.

Цитата

Set ts = fso.OpenTextFile(MyPath & "ExportProducts1.csv", 1)
arrstr = Split(ts.ReadAll, vbCrLf)
ts.Close

Не понятно как из массива вынимать данные.
Изменено: CZM - 23.04.2013 16:07:57
Импорт в эксель, на несколько листов согласно условию.
 
При импорте файлов в эксель уткнулся в ограничение 65536 строк на листе
Импортирую с помощью макроса
макрос


Для обхода ограничений хочется реализовать следующие.
В исходных файлах столбец BN сожержит серийный номер./

       .TextFileColumnDataTypes = Array(9, 1, 9, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, _
       9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 1, 1, 9)

Хотелось бы что бы макрос при импорте сразу разбрасывал данные с разными серийниками по разным листам

Подскажите куда копать, может кто видел решения?
Теряются разделители разрядов при импорте макросом из TSV файлов
 
Переделал импорт. Может кому пригодится

Код

    For Each Filename In coll

         With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Filename, Destination:=Range("a" & ActiveSheet.Rows.Count).End(xlUp).Offset(1))
        .Name = "Values_1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1251
        .TextFileStartRow = 2
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = True
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(9, 1, 9, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, _
        9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 9, 9, 9, 9, 9, 9, 9, 1, 9, 1, 1, 9)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
         
    Next
Теряются разделители разрядов при импорте макросом из TSV файлов
 
Предыстория
Программа генерит логи в виде файлов которые по своей сути TSV, но расширения имеют XLS. В качестве разделителя разряда выступает запятая ",".
Проблема в том что при импорте с помощью
макроса


Теряются разделитель разряда если если число >1

Подскажите как побороть это.
TSV - XLS, Помогите соединить два макроса
 
Убрал листинги под кат. Как изменить название темы?
TSV - XLS, Помогите соединить два макроса
 
Есть макрос который объеденяет множество файлов в 1 лист, причём из исходных файлов берёт только нужные столбцы, и вставляет их на лист подряд
макрос1




Проблема в том что исходные файлы сохранены в формате TSV, с разрешением XLS
И в некоторых случаях первый макрос теряет разделители разрядов.

Есть второй макрос который данные из TSV файла вставляет в эксель, нормально сохраняя разделитель разряда
макрос2



Вопрос подскажите, как это дело объединить.

Заранее большое спасибо!
Изменено: CZM - 12.04.2013 10:24:49
Копирования и вставка несвязных диапазонов (столбцов)
 
Не могли бы прокомментировать?

Как эту конструкцию можно приспособить в тот файл что я прикрепил?
Копирования и вставка несвязных диапазонов (столбцов)
 
Спасибо за ответы.

Сейчас сделано так


Конечно криво, можно и изящнее.
насчёт массива тоже думал,но пока не получается.

столкнулся с следующей проблемой

В оригинальных файлах в столбце D ("Расход" ;)  Данные могут быть следующие :
Код
0,710397
0,110335
-0,121424
5,853227


В лист куда данные собираются корректно вставляются только первые три варианта. При вставки "5,853227" теряется запятая. Причём если в исходном файле заменить запетую точкой, то при работе макрос заменяет её запятой и разделитель разрядов сохраняется.

Подскажите как быть в такой ситуации. Подозреваю что надо использовать особые варианты вставки, но как писал выше, ни черта в этом не смыслю.
Копирования и вставка несвязных диапазонов (столбцов)
 
Нужно скопировать несколько несвязных между собой диапазонов (столбцов). с одного листа и вставить их подряд на другой лист
Например

Скопировать столбцы B,D,E,U,AH,AU,BH,BL,BN
И вставить их в столбцы A-I

Переделывай под свои нужды чужой код, совершенно не знаком с VBA. Было

Код
Set ra = sh.Range(sh.Range("a2"), sh.Range("a" & sh.Rows.Count).End(xlUp)).Resize(, 9)
shd.Range("a" & shd.Rows.Count).End(xlUp).Offset(1).Resize(ra.Rows.Count, ra.Columns.Count).Value = ra.Value

Копировало 9 столбцов

Попробовал через Union объединение нужные мне диапазоны
Код
Set B = sh.Range(sh.Range("B2"), sh.Range("B" & sh.Rows.Count).End(xlUp))
            Set D = sh.Range(sh.Range("D2"), sh.Range("D" & sh.Rows.Count).End(xlUp))
            Set E = sh.Range(sh.Range("E2"), sh.Range("E" & sh.Rows.Count).End(xlUp))
            Set U = sh.Range(sh.Range("U2"), sh.Range("U" & sh.Rows.Count).End(xlUp))
            Set AH = sh.Range(sh.Range("AH2"), sh.Range("AH" & sh.Rows.Count).End(xlUp))
            Set AU = sh.Range(sh.Range("AU2"), sh.Range("AU" & sh.Rows.Count).End(xlUp))
            Set BH = sh.Range(sh.Range("BH2"), sh.Range("BH" & sh.Rows.Count).End(xlUp))
            Set BL = sh.Range(sh.Range("BH2"), sh.Range("BH" & sh.Rows.Count).End(xlUp))
            Set BN = sh.Range(sh.Range("BH2"), sh.Range("BH" & sh.Rows.Count).End(xlUp))
            
            Set ra = Union(B, D, E, U, AH, AU, BH, BL, BN)
            

shd.Range("a" & shd.Rows.Count).End(xlUp).Offset(1).Resize(ra.Rows.Count, ra.Columns.Count).Value = ra.Value


Но вставляет только связаные диапазоны. Если оставить "D" и "E" то вставлят два столбца, иначе только столбец "B"

Вопрос. Как изменить код что бы вставлялись нужные столбцы
Страницы: 1
Наверх