Страницы: 1 2 След.
RSS
Количество заполненных ячеек в столбце А каждого файла из списка?
 
Добрый день, подскажите существуют ли методы или кто-то решал такую задачу.
•В определенной директории (папке) лежат файлы эксель.
•На основе этого, был создан документ с ссылками на каждый файл

Как можно вывести число количества строк
каждого файла Эксель из списка?
 
Доброе время суток
Цитата
Илья написал:
Как можно вывести число количества строк
Написав макрос, который будет поочерёдно открывать файлы Excel в папке и согласно определению, что такое число строк в файле, будет записывать это число. Напомню, для формата 2007 года строк на листе 1048576, для формата 97-2003 чуть более 65 тысяч.
 
Цитата
Андрей VG написал:
Написав макрос,
Андрей, зачем? Согласно условию задачи можно по расширению сказать максимум, а по версии в которой это работает ограничить 32767  для xls в 2003м и старше :-)
Изменено: БМВ - 07.02.2021 18:45:54
По вопросам из тем форума, личку не читаю.
 
А где можно найти примеры?
 
Цитата
БМВ написал:
ограничить 32767  для xls в 2003м
Привет, Михаил.
А можно привести какие-нибудь доказательства, что в формате 97-2003 было такое количество строк?
 
Если вы имеете ввиду кол-во строк таблицы, то на каждом листе может быть разное кол-во строк. Допустим, на Лист1 - 100 строк, на Лист2 - 1000 строк и т.д. То есть ещё нужно знать название листов, на которых вы хотите найти кол-во заполненных строк
Изменено: New - 07.02.2021 17:54:46
 
New, Каждый файл содержит один лист
 
Код
ChisloStrok = ActiveSheet.UsedRange.Rows.Count
 
Цитата
Андрей VG написал:
А можно привести какие-нибудь доказательства
Андрей, может по 2003 я погорячился, я его пропустил. 95 16к держал судя по ссылкам, я уже не помню точно.

Цитата
Илья написал:
Каждый файл содержит один лист
и как он заполнен этот лист, например если он заполнен с 10 строки , то #7 даст правильный, но возможно не совсем желаемый результат.

Ну и я б через ADODB запрос бы сделал, но к каждому файлу :(
Изменено: БМВ - 07.02.2021 19:13:35
По вопросам из тем форума, личку не читаю.
 
За основу взял макрос из этой ветки Список файлов в папке
Где здесь можно дописать код? В строке 52? Или как-то по-другому прописывается?
Код
Sub FileList()
    Dim V As String
    Dim BrowseFolder As String
     
    'открываем диалоговое окно выбора папки
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выберите папку или диск"
        .Show
        On Error Resume Next
        Err.Clear
        V = .SelectedItems(1)
        If Err.Number <> 0 Then
            MsgBox "Вы ничего не выбрали!"
            Exit Sub
        End If
    End With
    BrowseFolder = CStr(V)
     
    'добавляем лист и выводим на него шапку таблицы
    ActiveWorkbook.Sheets.Add
    With Range("A1:E1")
        .Font.Bold = True
        .Font.Size = 12
    End With
    Range("A1").Value = "Имя файла"
    Range("B1").Value = "Путь"
    Range("C1").Value = "Кол-во"
     
    'вызываем процедуру вывода списка файлов
    'измените True на False, если не нужно выводить файлы из вложенных папок
    ListFilesInFolder BrowseFolder, True
End Sub
 
 
Private Sub ListFilesInFolder(ByVal SourceFolderName As String, ByVal IncludeSubfolders As Boolean)
 
    Dim FSO As Object
    Dim SourceFolder As Object
    Dim SubFolder As Object
    Dim FileItem As Object
    Dim r As Long
 
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = FSO.getfolder(SourceFolderName)
 
    r = Range("A65536").End(xlUp).Row + 1   'находим первую пустую строку
    'выводим данные по файлу
    'гиперссылка 
    For Each FileItem In SourceFolder.Files
        Cells(r, 1).Formula = FileItem.Name
        Cells(r, 2).Formula = "=HYPERLINK(""" & FileItem.Path & """)"
        Cells(r, 3).Formula = ?
        r = r + 1
        X = SourceFolder.Path
    Next FileItem
     
    'вызываем процедуру повторно для каждой вложенной папки
    If IncludeSubfolders Then
        For Each SubFolder In SourceFolder.SubFolders
            ListFilesInFolder SubFolder.Path, True
        Next SubFolder
    End If
 
    Columns("A:E").AutoFit
 
    Set FileItem = Nothing
    Set SourceFolder = Nothing
    Set FSO = Nothing
 
End Sub
Изменено: Илья - 07.02.2021 19:21:10
 
Цитата
БМВ написал:
Ну и я б через ADODB запрос бы сделал, но к каждому файлу
Можно. Но, пусть заполнена ячейка A1, D3, Z1000001, а ячейки X100500, R111 залиты жёлтым цветом. Сколько у нас строк в файле? Первое уточнение уже есть - книга из одного рабочего листа. Интересно, до какого номера поста дойдёт обсуждение, на котором ТС таки снизойдёт до определения, что такое строки книги?
 
Илья, расшифруйте, ЧТО следует понимать под количеством строк?
 
Цитата
Андрей VG написал:
ТС таки снизойдёт до определения,
тут даже 10 не набралось :-)
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
может по 2003 я погорячился,
Миша, не погорячился )
 
Цитата
может по 2003 я погорячился,
Excel 2003 число строк - 65536, число столбцов - 256
 
Юрий М, Например, количество заполненных ячеек в столбце А (все файлы единообразны — имеют 1 лист)
Изменено: Илья - 07.02.2021 19:39:10
 
Цитата
Kuzmich написал:
Excel 2003 число строк - 65536,
Точно! ))
 
Цитата
Илья написал:
количество заполненных ячеек в столбце А
Вот так и нужно было описывать задачу )
 
Цитата
количество заполненных ячеек в столбце А
Код
iLastRow = Cells(Rows.Count, 1).End(xlUp).Row
  ChisloStrok = WorksheetFunction.CountA(Range("A1:A" & iLastRow))
 
Цитата
Юрий М написал:
Вот так и нужно было описывать задачу )
ну как сказать

Пропуски учитывать или нет?
По вопросам из тем форума, личку не читаю.
 
Миш,
Цитата
Илья написал:
количество заполненных ячеек в столбце А
 
Здравствуйте. В строке 7 написано ...Range("A1:A200")) - это примерно, лучше заменить на переменную как в сообщении №19 см. выше.
Код
    'выводим данные по файлу
    'гиперссылка
    For Each FileItem In SourceFolder.Files
        Cells(r, 1).Formula = FileItem.Name
        Cells(r, 2).Formula = "=HYPERLINK(""" & FileItem.Path & """)"
        Workbooks.Open FileItem.Path
        Cells(r, 3).Formula = Application.WorksheetFunction.CountA(ActiveWorkbook.ActiveSheet.Range("A1:A200"))
        ActiveWorkbook.Close False
        r = r + 1
        X = SourceFolder.Path
    Next FileItem

Если что - это кусок из вашего кода начиная со строки 47
Изменено: DANIKOLA - 07.02.2021 20:11:39
 
Если уже есть файлы и ссылки на них, значит есть полный путь, значит можно сообразить/собрать формулу. считающую это число (если строго следовать написанному выше условию!). Конечно если известно имя того первого листа каждого файла.
Изменено: Hugo - 07.02.2021 20:07:40
 
•В определенной директории (папке) лежат файлы эксель.
•Каждый файл эксель имеет структуру из одного листа и заполненных ячеек
•На основе этого, был создан документ с ссылками на каждый файл
Как можно вывести число количества строк (например столбца А) каждого файла Эксель из списка?
-------------------------------------------------------------------------------------
UPD:
За основу взял макрос из этой ветки Список файлов в папке файлов в папке
Где здесь можно дописать код? В строке 52? Или как-то по-другому прописывается?

Код
Sub FileList()
    Dim V As String
    Dim BrowseFolder As String
     
    &#39;открываем диалоговое окно выбора папки
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выберите папку или диск"
        .Show
        On Error Resume Next
        Err.Clear
        V = .SelectedItems(1)
        If Err.Number <> 0 Then
            MsgBox "Вы ничего не выбрали!"
            Exit Sub
        End If
    End With
    BrowseFolder = CStr(V)
     
    &#39;добавляем лист и выводим на него шапку таблицы
    ActiveWorkbook.Sheets.Add
    With Range("A1:E1")
        .Font.Bold = True
        .Font.Size = 12
    End With
    Range("A1").Value = "Имя файла"
    Range("B1").Value = "Путь"
    Range("C1").Value = "Кол-во"
     
    &#39;вызываем процедуру вывода списка файлов
    &#39;измените True на False, если не нужно выводить файлы из вложенных папок
    ListFilesInFolder BrowseFolder, True
End Sub
 
 
Private Sub ListFilesInFolder(ByVal SourceFolderName As String, ByVal IncludeSubfolders As Boolean)
 
    Dim FSO As Object
    Dim SourceFolder As Object
    Dim SubFolder As Object
    Dim FileItem As Object
    Dim r As Long
 
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = FSO.getfolder(SourceFolderName)
 
    r = Range("A65536").End(xlUp).Row + 1   &#39;находим первую пустую строку
    &#39;выводим данные по файлу
    &#39;гиперссылка 
    For Each FileItem In SourceFolder.Files
        Cells(r, 1).Formula = FileItem.Name
        Cells(r, 2).Formula = "=HYPERLINK(""" & FileItem.Path & """)"
        Cells(r, 3).Formula = ?
        r = r + 1
        X = SourceFolder.Path
    Next FileItem
     
    &#39;вызываем процедуру повторно для каждой вложенной папки
    If IncludeSubfolders Then
        For Each SubFolder In SourceFolder.SubFolders
            ListFilesInFolder SubFolder.Path, True
        Next SubFolder
    End If
 
    Columns("A:E").AutoFit
 
    Set FileItem = Nothing
    Set SourceFolder = Nothing
    Set FSO = Nothing
 
End Sub
Изменено: Илья - 07.02.2021 20:11:53
 
мне кажется, что весь форум тролит ТС уже пол дня )
 
Цитата
Hugo написал:
если известно имя того первого листа каждого файла.
Игорь, так по одному листу в кажой книге - зачем имя? )
 
New, Это видно) Только цели не понимаю)
Ну если люди получают удовольствие и какой-то внутренний гешефт — это тоже хорошо)
 
Вариант функции на ADODB
Код
Private Const baseConnStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=$1;Extended Properties='Excel 12.0;HDR=NO;IMEX=1';"

Public Function getNotNullRowCountFromFirstColumnOfSheet(ByVal FileName As String) As Long
    Dim pAdoX As Object, pConn As Object
    Dim pTable As Object, pRSet As Object
    Dim sheetTableName As String, vResult As Long
    
    Set pAdoX = CreateObject("ADOX.Catalog")
    Set pConn = CreateObject("ADODB.Connection")
    pConn.Open Replace$(baseConnStr, "$1", FileName)
    pAdoX.ActiveConnection = pConn
    sheetTableName = ""
    vResult = -1
    For Each pTable In pAdoX.Tables
        If Right$(pTable.Name, 1) = "$" Then
            sheetTableName = pTable.Name
            Exit For
        End If
    Next
    If sheetTableName <> "" Then
        Set pRSet = pConn.Execute("Select Count(*) As FCount From [" & sheetTableName & "] Where F1 Is Not Null")
        vResult = pRSet(0).Value
        pRSet.Close
    End If
    pConn.Close
    Set pAdoX = Nothing
    getNotNullRowCountFromFirstColumnOfSheet = vResult
End Function
Помним, у ADODB есть ограничения по именования файлов и листов.
 
New, Паша, с чего ты взял? или из названия темы и стартового сообщения было понятно, ЧТО понимать под количеством строк? Только из #16 стала понятна задача.

Илья,  Вы тоже считаете, что объяснили сразу всё исчерпывающе? И искреннее желание форумчан разобраться, чтобы помочь Вам, Вы считаете троллингом?
Да если бы фраза  из #16 была в стартовом сообщении, то уже в первом же ответе получили бы решение...
 
Цитата
Юрий М написал:
зачем имя?
- для формулы! Собрать её макросом, не открывая файлы.
Страницы: 1 2 След.
Наверх