Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2012, 16:54   #1
Nicolas_46
Пользователь
 
Регистрация: 13.09.2012
Сообщений: 53
По умолчанию Цикл для считывания таблицы с переменным количеством строк

Уважаемые форумчане, помогите справиться с такой проблемой.
Необходимо считать информацию из файла и распредилить ее по ячейкам,
но вот в чем загвоздка:
в файле существует таблица с переменным числом строк (то есть в одном случае их 10 в другом
5 в третьем может вобще таблицы не быть) Из-за этого когда построчно считывается файл ииформация распредиляется не в те ячейки, как можно решить эту проблему?
примеры различных вариантов файла приведены ниже.

без таблицы считываю файл таким образом
Код:
Sub Блок_№5_Блок_№6()

Dim strFileName As String
Dim strFileTitle As String
strFileTitle = "REZ05.re"
strFileName = ThisWorkbook.Path & "\REZ05.re"
If Dir(strFileName) <> "" Then
      
   Else: GoTo exxx
   End If

Dim TextLine
'1
i = 1
Open ThisWorkbook.Path & "\REZ05.re" For Input As #1

Do While Not EOF(1)
Line Input #1, TextLine

If i = 7 Then
    Range("E5").Select
    ActiveCell.FormulaR1C1 = Mid(TextLine, 50, 7)
End If

If i = 7 Then
    Range("E5").Select
    ActiveCell.FormulaR1C1 = Mid(TextLine, 50, 7)
End If


i = i + 1
Loop
Close #1
Exit Sub
exxx:
MsgBox "файл результата не найден"
End Sub
Вложения
Тип файла: zip пример файлов.zip (4.1 Кб, 15 просмотров)

Последний раз редактировалось Nicolas_46; 02.12.2012 в 17:11.
Nicolas_46 вне форума Ответить с цитированием
Старый 02.12.2012, 19:44   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Признак наличия таблицы -
это строка символов ******.
они же определяют начало и окончание таблицы.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 03.12.2012, 00:44   #3
Nicolas_46
Пользователь
 
Регистрация: 13.09.2012
Сообщений: 53
По умолчанию

да, именно! в конец и начало таблицы обозначается знаками ********
но как сделать чтобы если строка содержит ******
все что находится после нее до следующей строки, копировалось в новыйфайл тхт а из старого удалялось.
Nicolas_46 вне форума Ответить с цитированием
Старый 03.12.2012, 01:00   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

На основе макроса Hugo121

Фрагмент кода,как идея
Код:
Dim Trigger As Boolean
Trigger = False
Set outFileNew = fso.CreateTextFile("c:\Temp\Nicolas_46\Newrez.re")

For i = 0 To UBound(arrstr)
    If Len(Trim(arrstr(i))) > 0 Then
        If InStr(1, arrstr(i), "****", vbTextCompare) > 0 And Trigger = False Then
            Trigger = True
            GoTo ContinueFor
        ElseIf InStr(1, arrstr(i), "****", vbTextCompare) > 0 And Trigger = True Then
            Trigger = False
            GoTo ContinueFor
        End If
        If Trigger = True Then
            outFileNew.WriteLine arrstr(i)
        Else
            outFile.WriteLine arrstr(i)
        End If
    End If
ContinueFor:
Next
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 03.12.2012, 02:48   #5
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Вроде отправлял свой вариант, а что-то нету..
Код:
 Sub QWERT()
Dim M() As String
Dim R, S() As String, C, Lr
   Dim File As String, CF As String   'объявим пеpеменнyю для имени файла и его cодеpжимого
   File = ThisWorkbook.Path & "\REZ05.re"    'ycтановим имя файла и пyть
   Open File For Binary As #1   'откpоем файл для чтения
      CF = Input(FileLen(File), 1)   'загpyзить в пеpеменyю CF вcе cодеpжимое файла
   Close #1   'закpыть файл
   M = Split(Trim(CF), vbNewLine)
   For R = 0 To UBound(M)
   If InStr(1, M(R), "---I--") > 0 Then ' начало таблицы без шапки. Если нужна с шапкой искать "********"
   Exit For
   End If
   Next R

Do '
R = R + 1
If InStr(1, M(R), "I") > 0 Then '
  S = Split(M(R), "I")
    lr = Cells(Rows.Count, 3).End(xlUp).Row + 1 '
    For C = 1 To UBound(S) - 1 '
        Cells(lr, C + 1) = Replace(Trim(S(C)), ".", ",")
    Next C

End If
Loop While InStr(1, M(R + 1), "*******") = 0 '
   
End Sub
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 06.12.2012, 08:03   #6
Nicolas_46
Пользователь
 
Регистрация: 13.09.2012
Сообщений: 53
По умолчанию

файл отчет,
Вложения
Тип файла: zip отчет.zip (4.82 Мб, 16 просмотров)
Nicolas_46 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Функции с переменным количеством параметров. Функция, как тип данных. Кудаив Помощь студентам 0 27.05.2012 14:21
Метод с переменным количеством аргументов Mixim C# (си шарп) 5 19.07.2011 14:17
Ф-я с переменным количеством параметров.. Lucky777 Помощь студентам 19 02.06.2011 23:54
Циклы с переменным количеством шагов Froost Общие вопросы Delphi 1 10.11.2009 19:30
Нужна помощь в решении задачек, тема "Циклы с переменным количеством шагов" DJ Kost Помощь студентам 3 16.01.2009 13:26