Доброго времени суток уважаемые форумчане. В очередной раз необходима помощь Есть несколько CSV файлов с данными (1.csv, 2.csv в примере), необходимо из этих файлов скопировать строки в книгу Excel (result) по следующему условию: Если строка содержит слова - "Не решено" или "Закрыто" в столбце 'G' и слова - "Москва", "Московская область" или "Тверская область" в столбце 'I', то строку целиком копируем в книгу "result". На выходе должна получиться книга "result" со всеми строками подходящими под условие из всех файлов CSV (фактически их больше двух). Большое спасибо.
Доброго времени суток уважаемые форумчане. В очередной раз необходима помощь Есть несколько CSV файлов с данными (1.csv, 2.csv в примере), необходимо из этих файлов скопировать строки в книгу Excel (result) по следующему условию: Если строка содержит слова - "Не решено" или "Закрыто" в столбце 'G' и слова - "Москва", "Московская область" или "Тверская область" в столбце 'I', то строку целиком копируем в книгу "result". На выходе должна получиться книга "result" со всеми строками подходящими под условие из всех файлов CSV (фактически их больше двух). Большое спасибо. Nikolay86
doober, Добрый день и спасибо, но так не подходит, нужно выборку проводить только по столбцам "G" и "I", т.к. в строках могут встречаться ключевые слова ("Закрыто", "Не решено" ...) и в других столбцах, в этом случае результат будет некорректен.
doober, Добрый день и спасибо, но так не подходит, нужно выборку проводить только по столбцам "G" и "I", т.к. в строках могут встречаться ключевые слова ("Закрыто", "Не решено" ...) и в других столбцах, в этом случае результат будет некорректен. Nikolay86
Sub readCSV() Dim FolderPath As String, strNextLine As String Dim Sh As Worksheet Set Sh = ActiveSheet FolderPath = GetFolderPath If FolderPath = "" Then Exit Sub Item = Get_Item(FolderPath) Set objFSO = CreateObject("Scripting.FileSystemObject") LastRow = 1 For n = 0 To UBound(Item) Set objTextFile = objFSO.OpenTextFile(Item(n), 1) Do Until objTextFile.AtEndOfStream strNextLine = objTextFile.ReadLine If strNextLine <> "" Then ZX = Split(strNextLine, ";") If UBound(ZX) > 7 Then If (InStr(1, ZX(6), "Не решено", vbTextCompare) > 0 _ Or InStr(1, ZX(6), "Закрыто", vbTextCompare) > 0) _ And (InStr(1, ZX(8), "Москва", vbTextCompare) > 0 _ Or InStr(1, ZX(8), "Московская область", vbTextCompare) > 0 _ Or InStr(1, ZX(8), "Тверская область", vbTextCompare) > 0) Then LastRow = LastRow + 1 Sh.Range("a" & LastRow).Resize(1, UBound(ZX) + 1) = ZX End If End If End If Loop objTextFile.Close Set objTextFile = Nothing Next Set objFSO = Nothing End Sub
[/vba]
Тогда так.
[vba]
Код
Sub readCSV() Dim FolderPath As String, strNextLine As String Dim Sh As Worksheet Set Sh = ActiveSheet FolderPath = GetFolderPath If FolderPath = "" Then Exit Sub Item = Get_Item(FolderPath) Set objFSO = CreateObject("Scripting.FileSystemObject") LastRow = 1 For n = 0 To UBound(Item) Set objTextFile = objFSO.OpenTextFile(Item(n), 1) Do Until objTextFile.AtEndOfStream strNextLine = objTextFile.ReadLine If strNextLine <> "" Then ZX = Split(strNextLine, ";") If UBound(ZX) > 7 Then If (InStr(1, ZX(6), "Не решено", vbTextCompare) > 0 _ Or InStr(1, ZX(6), "Закрыто", vbTextCompare) > 0) _ And (InStr(1, ZX(8), "Москва", vbTextCompare) > 0 _ Or InStr(1, ZX(8), "Московская область", vbTextCompare) > 0 _ Or InStr(1, ZX(8), "Тверская область", vbTextCompare) > 0) Then LastRow = LastRow + 1 Sh.Range("a" & LastRow).Resize(1, UBound(ZX) + 1) = ZX End If End If End If Loop objTextFile.Close Set objTextFile = Nothing Next Set objFSO = Nothing End Sub
Спасибо, стал запускать с примером - работает, а вот с оригинальными файлами -нет, нашел разницу - в примере разделитель ";" , а в оригинальных файлах разделитель TAB
Код
ZX = Split(strNextLine, ";")
Так понимаю тут надо разделитель поменять? Меняю на
Код
ZX = Split(strNextLine, vbTab)
не заполняет, может не так меняю?
Спасибо, стал запускать с примером - работает, а вот с оригинальными файлами -нет, нашел разницу - в примере разделитель ";" , а в оригинальных файлах разделитель TAB
Код
ZX = Split(strNextLine, ";")
Так понимаю тут надо разделитель поменять? Меняю на
замените любыми словами,сохраните и на опреционный стол подавайте
Так, вроде получилось создать корректный пример. И еще, первая строка с заголовками ("Статус","Заявитель", "Местоположение" и.т.д) хотелось чтобы тоже присутствовала в книге результата
замените любыми словами,сохраните и на опреционный стол подавайте
Так, вроде получилось создать корректный пример. И еще, первая строка с заголовками ("Статус","Заявитель", "Местоположение" и.т.д) хотелось чтобы тоже присутствовала в книге результата Nikolay86
Данный вариант стал копировать строки из оригинальных файлов правильно (и первую тоже ), но почему-то "засыпает" первую строку книги с результатом данными из оригинальных файлов до пятисотого столбца где-то (очень много). С примером ошибки к сожалению нет времени возиться. Так что спасибо еще раз большое doober. Да и хватит наверно))
P.s. Я еще и не знаю как этот пример сделать, опять получиться что в примере работает, а в оригинале - нет.))
Данный вариант стал копировать строки из оригинальных файлов правильно (и первую тоже ), но почему-то "засыпает" первую строку книги с результатом данными из оригинальных файлов до пятисотого столбца где-то (очень много). С примером ошибки к сожалению нет времени возиться. Так что спасибо еще раз большое doober. Да и хватит наверно))
P.s. Я еще и не знаю как этот пример сделать, опять получиться что в примере работает, а в оригинале - нет.))Nikolay86
Сообщение отредактировал Nikolay86 - Вторник, 25.04.2017, 13:09