Excel VBA для извлечения информации из двух разных текстовых файлов

#vba #excel

#vba #excel

Вопрос:

Приветствую, у меня небольшая дилемма. Я создаю VBA, который позволит пользователю открывать два отдельных текстовых файла и использовать их для построения графиков данных. До сих пор мне удавалось открывать два текстовых файла в одной электронной таблице. Проблема, с которой я сталкиваюсь, заключается в использовании данных из одного текстового файла (12-значные числа) и сравнении их с другим текстовым файлом, который представляет собой журнал данных. В первом текстовом файле содержится куча нерелевантной информации, но мне нужно только записать дату и 12-значный номер. Второй текстовый файл содержит список из 12-значных чисел, которые я хочу сверить с первым текстовым файлом и подсчитать, сколько раз появлялось каждое конкретное число. Используя это, я хочу просто регулярно подсчитывать, сколько раз это происходило. Мне нужно, чтобы это был VBA, потому что пользователь, который будет открывать этот макрос, не будет иметь никаких знаний в области программирования, поэтому он должен быть очень простым.

Также следует отметить, что номера значков МОГУТ отличаться в зависимости от загруженного текстового файла, но они всегда добавляются в одну и ту же область электронной таблицы.

Спасибо.

РЕДАКТИРОВАТЬ: попытался сделать приблизительный набросок того, о чем я говорю

   |  A  |  B              |  C           |              D         |                     

  |  1  | DATA WITH NUMBER|   ...........|........... |NUMBER TO COMPARE WITH |  
  |  2  | DATA WITH NUMBER|
  

Комментарии:

1. Добавление примеров данных к вопросу может помочь получить лучшую картину!

Ответ №1:

Я не уверен, что полностью понимаю, чего вы хотите, но похоже, вы хотите использовать класс Dictionary в VBA.

Вам нужно будет добавить ссылку на библиотеку среды выполнения MS Scripting, и ваш код для чтения второго входного файла (для подсчета вхождений) может выглядеть примерно так:

   Dim counts As Object
  Dim splitValue As Variant
  Dim inputLine as String

  Set counts = CreateObject("Scripting.Dictionary")

  Open "yourfile.txt" For Input As #1
  Do While Not EOF(1)
    Line Input #1, inputLine

    splitValues = Split(inputLine, vbTab)

    If counts.Exists(splitValues(0)) Then
      counts(splitValues(0)) = counts(splitValues(0))   1
    Else
      counts.Add splitValues(0), 1
    End If

  Loop

  Close #1
  

Затем, когда вы читаете первый файл, вы можете, по сути, вызвать словарь, чтобы узнать, сколько вхождений номера значка появилось во втором файле.

 occurrences = counts(badgeNumber)
  

Опять же, я могу отключиться. Если вы можете уточнить, как выглядят оба ввода и как вы хотите, чтобы выглядел конечный результат, это помогло бы.