Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 8
Excel

Разместить полученные данные по ячейкам

17.07.2018, 04:52. Показов 2067. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем Доброго времени суток! В VBA я не силен, очень прошу помочь в доработке макроса. Проблема такая, есть текстовой файл, в нем метеоданные, с проблемой как загрузить нужные строки в лист exel я кое как справился, а вот как сделать так чтоб эти параметры находились каждый в своей ячейке и желательно на другом листе-ума не приложу. Бьюсь уже неделю, хотя решение проблемы наверно элементарное. Буду очень благодарен за помощь! Архив с файлами прилагаю.

А код у меня получился такой:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Скругленныйпрямоугольник1_Щелчок()
 
Dim iTempPath$, a, i%
iTempPath = "c:\555\180501.txt" 'адрес где находится текстовый файл
a = Split(CreateObject("Scripting.FileSystemObject").Getfile(iTempPath).OpenasTextStream(1).ReadAll, vbNewLine)
' если заносить в определенные ячейки без некой закономерности.
Range("A1") = a(178)
Range("A2") = a(538)
Range("A3") = a(898)
Range("A4") = a(1258)
 
End Sub
Вложения
Тип файла: rar arhiv.rar (33.2 Кб, 10 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.07.2018, 04:52
Ответы с готовыми решениями:

Как записать в массив данные из *.TXT и и правильно рассортировать данные по ячейкам массива?
файл index.php <?php $site = (file('text.txt')); в файле text.txt находится: xxxxxx.ru xxxxx.com xxxx.org xxxx.ru...

Json полученные данные
Всем привет! У меня локальный файл json Он читается функцией: function readTextFile(file, callback) { var rawFile =...

Не выводит полученные данные в C++
Получаю вместо вычесленного Sum 0 #include <iostream> #include <math.h> using namespace std; int main() { int n, Sum(0),...

12
3218 / 967 / 223
Регистрация: 29.05.2010
Сообщений: 2,087
17.07.2018, 09:55
Попробуй запрос записанный макроридером:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
Sub Макрос2()
'
' Макрос2 Макрос
'
 
'
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;D:\Загрузки\3\180501.txt" _
        , Destination:=Range("$A$1"))
        .Name = "180501_1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 866
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = True
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = True
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
End Su
только укажи свой путь к текстовому файлу....
0
 Аватар для Narimanych
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
17.07.2018, 10:08
andreyaru,
попробуйте это...
Visual Basic
1
2
3
Sub Forandreyaru()
Workbooks.OpenText Filename:="c:\555\180501.txt", Origin:=437, StartRow:=1, DataType:=xlFixedWidth
End Sub
Добавлено через 1 минуту
А дальше-выбирайте нужные строки...

Добавлено через 18 секунд
А дальше-выбирайте нужные строки...
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
17.07.2018, 10:45
Лучший ответ Сообщение было отмечено andreyaru как решение

Решение

andreyaru, добавил записанную макрорекордером команду "текст по столбцам" и кое-что по мелочи
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub Скругленныйпрямоугольник1_Щелчок()
Dim iTempPath$, a$()
  iTempPath = "c:\555\180501.txt"              'адрес где находится текстовый файл
  a = Split(CreateObject("Scripting.FileSystemObject").Getfile(iTempPath).OpenasTextStream(1).ReadAll, vbNewLine)
  ' если заносить в определенные ячейки без некой закономерности.
  Worksheets.Add , ActiveSheet                        '"желательно на другом листе"
  Range("A1") = a(178)
  Range("A2") = a(538)
  Range("A3") = a(898)
  Range("A4") = a(1258)
  Range("A1:A4").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
    :=Array(Array(1, 9), Array(2, 1), Array(3, 2), Array(4, 2), Array(5, 1), Array(6, 2), _
    Array(7, 2), Array(8, 2), Array(9, 2), Array(10, 2), Array(11, 2), Array(12, 1), Array(13, 1 _
    ), Array(14, 1)), TrailingMinusNumbers:=True
  Columns("B:J").NumberFormat = "General"
  Columns("B:J").Replace What:=".", Replacement:=".", LookAt:=xlPart, _
    SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
    ReplaceFormat:=False
End Sub
2
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 8
17.07.2018, 10:55  [ТС]
Спасибо. Но тут надо чтоб не весь файл загружался, а только определенные строки из файла. Дело в том что таким образом(выборочным) надо загрузить данные за месяц. Если загрузить все дни и все строки, то выйдет порядка 43200!!! строк за месяц. А это уж слишком.
0
 Аватар для Narimanych
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
17.07.2018, 11:08
Цитата Сообщение от andreyaru Посмотреть сообщение
Дело в том что таким образом(выборочным) надо загрузить данные за месяц.
Если выборка всегда 4 строки и
Цитата Сообщение от andreyaru Посмотреть сообщение
Range("A1") = a(178)
Range("A2") = a(538)
Range("A3") = a(898)
Range("A4") = a(1258)
То это тожке можно циклом
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
17.07.2018, 11:30
Цитата Сообщение от andreyaru Посмотреть сообщение
Дело в том что таким образом(выборочным) надо загрузить данные за месяц
А сразу об этом нельзя было написать и несколько текстовых файлов приложить?
Наверно, к времени в первом столбце надо дату добавить? Или отдельный столбец с датой?
Файлы, видимо, находятся в одной папке и имеют имена вида ГГММДД.txt?
0
 Аватар для Narimanych
2751 / 1725 / 779
Регистрация: 23.03.2015
Сообщений: 5,449
17.07.2018, 11:41
andreyaru,

Как вариант:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Sub Скругленныйпрямоугольник1_Щелчок()
 
Dim iTempPath$, a,b, i%
iTempPath = "c:\555\180501.txt" 'адрес где находится текстовый файл
a = Split(CreateObject("Scripting.FileSystemObject").Getfile(iTempPath).OpenasTextStream(1).ReadAll, , vbNewLine)
i = 1
For m = 178 To 1258 Step 360
b = Split(Trim(a(m)))
For j = 0 To UBound(b)
Cells(i, j + 1).Value = b(j)
Next
i = i + 1
Next
0
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 8
17.07.2018, 13:31  [ТС]
Казанский, Да Вы правы. Дату тоже надо было добавить.
Вам Огромнейшее СПАСИБО! Все работает!!! Неудобно… но можно я обнаглею чуть-чуть.
Сейчас при загрузке данных из файла макрос каждый раз формирует новый лист, можно ли
Сделать так чтоб макрос загружал данные только к примеру, на «лист 2». И как сделать
Вывод диалогового окна выбора файла и папки перед загрузкой файла что-б можно было загрузить последующие дни месяца на 2 лист, точнее чтоб они дописывались. Как это диалоговое окно сделать я знаю(добавил в макрос), а вот как это все между собой связать… Увы. Буду очень благодарен!

Это макрос диалогового окна что у меня есть, а вот связать все это не получается.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Sub Скругленныйпрямоугольник1_Щелчок()
On Error Resume Next
    Dim datAs Date, y As Long, cell As Range
 
    ' задаём стартовую папку
ChDriveLeft(ThisWorkbook.Path, 1): ChDirThisWorkbook.Path
 
' вывод диалогового окна для запроса имени сохраняемого файла
Filename = Application.GetOpenFilename("Text files (*.txt),", , "Открыть файл для обработки", "Load data")
 
' отказ от выбора  файла - отменяем загрузку данных
If VarType(Filename) = vbBoolean Then Exit Sub
Вложения
Тип файла: rar arhiv.rar (130.8 Кб, 1 просмотров)
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
18.07.2018, 23:21
andreyaru, пробуйте. Учтите, что при множественном выборе файла располагаются в массиве не в том порядке, в каком выбраны. Возможно, потребуется сортировка или массива Filename, или результирующей таблицы.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Sub Скругленныйпрямоугольник1_Щелчок()
Dim y1 As Long, y As Long, x, Filename, fso As Object, a$()
  On Error Resume Next
 
  ' задаём стартовую папку
  ChDrive Left(ThisWorkbook.Path, 1): ChDir ThisWorkbook.Path
 
  ' вывод диалогового окна для запроса имени сохраняемого файла
  Filename = Application.GetOpenFilename("Text files (*.txt),", , "Открыть файл для обработки", "Load data", True)
 
  ' если пользователь отказался от выбора  файла - отменяем загрузку данных
  If VarType(Filename) = vbBoolean Then Exit Sub
 
  Set fso = CreateObject("Scripting.FileSystemObject")
  With Worksheets("Лист2")
    y = .Cells(.Rows.Count, 1).End(xlUp).Row
    If Not IsEmpty(.Cells(y, 1)) Then y = y + 1
    y1 = y
    For Each x In Filename
      a = Split(fso.OpenTextFile(x).ReadAll, vbNewLine)
      .Cells(y, 2).Resize(8).Value = WorksheetFunction.Transpose( _
          Array(a(180), a(360), a(538), a(720), a(900), a(1080), a(1260), a(1440)))
      .Cells(y, 1).Resize(8).Value = CDate(a(0))
      y = y + 8
    Next
    With .Range("B" & y1 & ":B" & y)
      .TextToColumns Destination:=.Cells(1, 1), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=True, Other:=False, FieldInfo _
        :=Array(Array(1, 9), Array(2, 1), Array(3, 2), Array(4, 2), Array(5, 1), Array(6, 2), _
        Array(7, 2), Array(8, 2), Array(9, 2), Array(10, 2), Array(11, 2), Array(12, 1), Array(13, 1 _
        ), Array(14, 1)), TrailingMinusNumbers:=True
      .Copy
      .Offset(, -1).PasteSpecial xlPasteValues, xlPasteSpecialOperationAdd
      .Delete xlShiftToLeft
    End With
    With .Range("B" & y1 & ":J" & y)
      .NumberFormat = "General"
      .Replace What:=".", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    End With
  End With
End Sub
Вложения
Тип файла: zip Лист Microsoft Excel.zip (20.3 Кб, 3 просмотров)
0
15155 / 6428 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
18.07.2018, 23:29
PS Если в окне выбора файлов сначала кликнуть последний, а потом с шифтом первый, то данные получаются по порядку
0
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 8
20.07.2018, 00:29  [ТС]
Казанский,
Еще раз ОГРОМНЕЙШЕЕ СПАСИБО!!! Все работает как надо!!!
0
0 / 0 / 0
Регистрация: 09.03.2016
Сообщений: 8
23.07.2018, 13:48  [ТС]
Казанский, Здравствуйте еще раз! Опять хочу обратиться к Вам за помощью. Вроде все доделал, но вот некоторые моменты не получаются. На фото, полученные с Вашей помощью данные. В столбце H значения скорости ветра. В некоторых эти значения равны «0»т.е. штиль. Однако при этом в столбце М стоит направление ветра 77 градусов. Возможно ли сделать так чтоб при нулевой скорости ветра значения направления ветра были тоже нулевыми. Т.е. если в столбце Н будет встречаться ноль, то и в этой же строке в столбце М программа переписывала бы значение на нулевое. И еще можно ли чтоб программа загружала данные не с первой строки, а с 4-ой. Я как то не подумал вначале, а теперь вижу что надо столбцы сверху подписями обозначить. Все файлы в прилагаемом архиве. Буду очень признателен и благодарен!
Миниатюры
Разместить полученные данные по ячейкам  
Вложения
Тип файла: rar Arhiv1.rar (648.9 Кб, 0 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.07.2018, 13:48
Помогаю со студенческими работами здесь

Полученные Winsock данные
Ну в общем ситуация такая: состряпал код для тестов команд. Связь через Winsock по TCp. Все коннектится и работает, но есть одно но. В...

Распределить данные по ячейкам в соответствии с содержимым
привет всем, у меня такой вопрос - можно ли как то выполнить такую задачу допустим- есть обьем данных вида 1*петров ...

Изъять данные с result полученные из бд
Выполнив такой запрос из базы дынных. client.query('SELECT *' + 'FROM public."GeneralInfo";',function (err,result) { ...

Кэшировать данные полученные из API
Здравствуйте. Делаю следующий функционал. На сайте выводятся трансляции (twich и т.д.) через ихний API. Поскольку их много, то...

Сохранит данные, полученные из HttpGet в БД
Ребят подскажите что не так, я получаю 4 переменные в httpget и после это нужно сохранить полученные данные в БД. как это сделать? Код...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru