Страницы: 1
RSS
Как разнести данные в таблице
 
Добрый день, уважаемые форумчане.
В приложенном примере имеется таблица в Диапазоне А4:С6 с данными, можно ли как-то разнести данные как в примере А12:С27.
Заранее спасибо.
 
только макросом.
 
V,хмм, я вот сижу думаю, мне кажется можно сделать и без макроса. Ход мыслей, сначала сделаем разделение по знаку "/" по столбцам,  а далее какой нибудь ДВССЫЛК попробовать соединить все. Пока хз как, но можно попробовать.  
 
DopplerEffect, думаете ТС допустимо использование доп столбцов. По сути с доп. столбцами можно, но по моему макросом проще.
 
V, Да, можно использовать дополнительные столбцы.
Изменено: ymal_qeb - 09.08.2018 10:09:44
 
ymal_qeb, пробуйте
Код
Sub Ym()
Dim v(), d$(), f$(), g$(), i&, j&, k&, s$
  v = Range("A4", Cells(Rows.Count, "C").End(xlUp)).Value 'вместо А4 реальный адрес первой ячейки
  ReDim w(1 To UBound(v) * 10, 1 To 3)
  For i = 1 To UBound(v)
    d = Split(v(i, 2), "/")
    f = Split(v(i, 3), "/")
    j = InStrRev(v(i, 1), " ")
    g = Split(Mid$(v(i, 1), j + 1), "/")
    s = Left$(v(i, 1), j)
    For j = 0 To UBound(d)
      k = k + 1
      If j > UBound(g) Then w(k, 1) = s & g(0) Else w(k, 1) = s & g(j)
      w(k, 2) = d(j)
      If j > UBound(f) Then w(k, 3) = f(0) Else w(k, 3) = f(j)
    Next
  Next
  Worksheets.Add(, ActiveSheet).Range("A1").Resize(k, 3).Value = w
End Sub
Изменено: Казанский - 09.08.2018 10:23:41 (мин. правка)
 
Казанский, Спасибо, все работает как надо, но можете подсказать еще по нескольким вопросам:
1 - как можно что-бы данные всегда вставлялись на заданный лист (если на нем уже есть данные, то они заменялись), просто попробовал несколько раз запустить данный макрос в одной книге, получается, что при каждом запуске данные разносятся на разные листы.
2 - можно ли как то настроить автоматический запуск макроса?
 
ymal_qeb,
1. вместо 18 строки
Код
  With Worksheets("Лист2") 'целевой лист
    .Cells.ClearContents
    .Range("A1").Resize(k, 3).Value = w
    .Activate 'необязательно
  End With

2. По какому событию? В обработчике события напишите вызов этой процедуры. Если лист с данными при этом не является текущим, его надо активировать или немного изменить строку 3
Код
  With Worksheets("Лист1") 'лист с данными
    v = .Range("A4", .Cells(.Rows.Count, "C").End(xlUp)).Value 'вместо А4 реальный адрес первой ячейки
  End With
 
Цитата
ymal_qeb написал:
можно ли как то настроить автоматический запуск макроса?
И в какой момент вы планируете автозапуск макроса?
за 1 вопрос отвечает 18 строчка макроса.
вместо Worksheets.Add(, ActiveSheet) напишите свой существующий лист. Sheets("некий лист").
 
Казанский, V, по поводу в какой момент запускать макрос, постараюсь объяснить цепь событий:
1 - данные на Лист1 в этот документ приходят из другой книги
2 - данный Листа1 макрос разносит их на Лист2
3 - разнесенные с Листа2, уходят в другой документ.
получается, что эта книга по своей сути всегда будет закрыта.
Вопрос к Вам, в какой момент лучше запускать макрос?

как Вижу это я это можно сделать в момент изменения значений, на Листе1, но не знаю возможно ли это когда документ закрыт.
 
ymal_qeb, каким образом данные приходят и уходят? Если этим процессом управляет внешняя программа или скрипт, то она может и макрос запустить. В VBS это выглядит так
Код
xlApp.Run "Ym" 'xlApp - ссылка на приложение Excel, в котором открыта книга

В закрытой книге макрос работать не может. Может быть, Вы имеете в виду, что книга неактивна, невидима?
 
Уточните название темы (название должно раскрывать суть задачи). Модераторы заменят.
 
vikttur, Разнесение данных характеристика товара и его цены по условию (/) на другой лист, с их последующем распределением.
Изменено: ymal_qeb - 10.08.2018 10:41:31
 
Это общее. Есть в задаче что-то свое, конкретное?

Разделить котов по толщине шерсти на кончике хвоста.
Развести по разным комнатам детей с разным тембром истерического крика
 
Казанский,
Цитата
Казанский написал:
Если этим процессом управляет внешняя программа или скрипт
подскажите,а что Вы имеете в виду?
Цитата
Казанский написал:
каким образом данные приходят и уходят?
пока это реализовано, просто:
Книга 1 (откуда данные идут) - содержит данные в столбцах А и B на Листе1
Книга 2 (где происходит разнесение) - на Лист1 приходят данные (средствами:
в столбец А:
='путь_до книги\[Книга 1.xlsx]Лист1'!A1
в столбец B:
='путь_до книги\[Книга 1.xlsx]Лист1'!B1)
потом как сейчас в ручном режиме я запускаю Ваш скрипт, данные разнеслись на Лист2, Книги2.
Книга3 (куда уходят данные с Листа2 книги2) - данные переносятся теме принципом как и с Книга1 в Книгу2:
в столбец А:
='путь_до книги\[Книга 2.xlsx]Лист2'!A1
в столбец B:
='путь_до книги\[Книга 2.xlsx]Лист2'!B1).
-----------------------
Все три книги в большинстве своем закрыты (практически всегда) и их никто не открывает, но данные в них обновляются каждый день и даже несколько раз в день.
для примера есть еще Книга0 - которая открывается и куда заносятся данные, после они разносятся в этой книг и часть этих данных по условию попадает в Книгу1, ну и дальше как я писал по схеме выше.
-----------------------
Возможно это глупый перенос данных, просто = и ссылаешься на нужную ячейку убираешь знаки $$ в формуле и протягиваешь ее вниз и вправо.
Просто я больше не знаю как можно еще перенести данные с одного листа на другой (с книг в книгу).
Страницы: 1
Наверх