Excel VBA Макросы: Извлечение данных из текстового файла (Notepad) по условиям.

Автор Vhansky, 17 апреля 2014, 00:54

Vhansky

Помогите сделать макрос.

Есть текстовый файл, созданный с помощью Notepad. В этом файле содержатся числа. Каждое из чисел находится в отдельной строке.

Макрос должен скопировать из текстового файла все числа, которые больше введенного числа, в столбец А, а числа, которые меньше введенного числа, в столбец Б.

[вложение удалено администратором]

Администратор

Подготовка к запуску макроса:

  • в макросе, вверху, в константе "strFileFullName" укажите свое полное имя текстового файла;
  • перед запуском макроса откройте пустой эксель-файл, чтобы не испортить свои данные, т.к. макрос вставляет данные в эксель.
Макрос
Sub Procedure_1()
   
    'В константе "strFileFullName" нужно записать полное имя
        'текстового файла, в котором находятся числа.
        'Полное имя - это путь к файлу и имя файла.
    Const strFileFullName As String = "C:\Users\User\Desktop\chisla.txt"
   
    Dim dblChislo As Double
    Dim strChisloIzFaila As String
    Dim lngA As Long, lngB As Long
   
   
    'Очистка Excel-листа от прежних данных.
    ActiveSheet.UsedRange.Clear
   
    'Помещение в переменную "dblChislo" числа
        '(в условии задачи - это введённое число).
    dblChislo = InputBox("Введите число:")
   
    'Открытие текстового файла, в котором находятся числа.
    '1 - это имя, которое присваивается файлу,
        'через это имя макрос будет работать с файлом.
    'Символ "#" необязателен - можно его не использовать.
        'Для чего он нужен - не помню (может быть раньше, в
        'в старых версиях был нужен. В VBA-справке нет информации об этом символе).
    'Input - переводится "Ввод". Если перевести ниже строку
        'на русский, то будет: Открыть ... Для Ввода.
        'Но на самом деле Вы открываете для чтения. Вот такая нестыковка.
    Open strFileFullName For Input As #1
   
    'Двигаемся, пока не достигнут конец файла "1".
    'В коде ниже явно не указан переход к следующей строке.
    'Переход к следующей строке происходит после использования команды "Line Input".
   
    Do While EOF(1) = False
   
        'Помещение текста из строки файла в переменную "strChisloIzFaila".
        'Обратите внимание, что опять нестыковка в терминах.
            'Line Input переводится "ввод строки", но на самом деле мы
            'читаем строку.
        Line Input #1, strChisloIzFaila
       
        'Сравнение введённого числа и числа из файла.
        'Если число из файла больше введённого числа.
        'CDbl переводит тип данных "Текст" в тип данных "Число",
            'чтобы сравнивать числа.
        If CDbl(strChisloIzFaila) > dblChislo Then
            'Переменная "lngA" используется для перехода по строкам в Excel,
                'в столбце A.
            lngA = lngA + 1
            'Вставка числа в Excel в столбец A.
            Cells(lngA, "A").Value = CDbl(strChisloIzFaila)
        'Если число из файла меньше введённого числа.
        ElseIf CDbl(strChisloIzFaila) < dblChislo Then
            lngB = lngB + 1
            Cells(lngB, "B").Value = CDbl(strChisloIzFaila)
        End If
       
    Loop
   
    'Закрытие файла.
    Close #1

End Sub
[свернуть]

Vhansky

Благодарю Вас, реально лучший форум, с которым я сталкивался. Спасибо Вам.