#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)
Опять же, я могу отключиться. Если вы можете уточнить, как выглядят оба ввода и как вы хотите, чтобы выглядел конечный результат, это помогло бы.