Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.07.2019, 10:59   #1
Dan99
 
Регистрация: 11.07.2019
Сообщений: 8
По умолчанию Собрать столбец на новом листе

Имеются данные вида как в первом столбце.
Все цыфры. В ячейке а1 может быть разное кол-во через запятую. В ячейке а2 может быть любая цыфра, знак х означает умножение на нное кол-во раз, тоже может быть разным. Ячейка а3 содержит одну цифру, может быть разной. Все цыфры положительные. Задача- получить один столбец как в примере С. Т. Е. Столбец с одной цифрой в ячейке. Цифра означает некий артикул (обозначение)
Помогите пожалуйста. Пример сделан вручную для наглядности. Потом получившийся столбец бедет преобразован в сводную таблицу, в которой будет видно сколько каких артикулов присутствовало в изначальном столбце.
Изображения
Тип файла: jpg IMG-20190710-WA0008.jpg (41.7 Кб, 151 просмотров)
Dan99 вне форума Ответить с цитированием
Старый 11.07.2019, 11:25   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

во-первых, цИфра
во-вторых, Вы путаете понятия "цифра" и "число"
в-третьих, такое можно сделать макросом на VBA. Он будет не сложный, но нужно будет парсить строчку.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.07.2019, 11:29   #3
Dan99
 
Регистрация: 11.07.2019
Сообщений: 8
По умолчанию

Спасибо Сергей за то что поправили меня. Хотел добавить что ячеек в первом столбце может быть разным. Очень жду помощи. Спасибо!
Dan99 вне форума Ответить с цитированием
Старый 11.07.2019, 11:49   #4
Dan99
 
Регистрация: 11.07.2019
Сообщений: 8
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
во-первых, цИфра
во-вторых, Вы путаете понятия "цифра" и "число"
в-третьих, такое можно сделать макросом на VBA. Он будет не сложный, но нужно будет парсить строчку.
В целом я понимаю как это чисто механически сделать, а вот автоматизировать знания не позволяют. Я так и делал, разбирал разбирал ячейку на строку и потом собирал в один столбец, но при объёмах это уйма времени. В программировании я не силен)
Dan99 вне форума Ответить с цитированием
Старый 11.07.2019, 12:20   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

АртикулыВСписок.zip

если что, там такой код
Код:
Option Explicit

Sub Click()
  Dim iLastRow&, iRow&, i&, j&, k&, m&, p%, s$, s2$
  Dim lineArray() As String
  
  Range("C:C").ClearContents
  iLastRow = Cells(Rows.Count, "A").End(xlUp).Row
  k = 0
  For iRow = 1 To iLastRow
    s = Cells(iRow, "A").Value
    If s <> "" Then
        lineArray() = Split(s, ",")
        For i = LBound(lineArray) To UBound(lineArray)
            s2 = Trim(LCase(lineArray(i)))
            p = InStr(s2, "x")
            j = 1
            If p > 0 Then
              j = CInt(Mid(s2, p + 1))
              s2 = Trim(Left(s2, p - 1))
            End If
            For m = 1 To j
                k = k + 1
                Cells(k, "C").Value = s2
            Next
        Next i
    End If
  Next iRow
End Sub
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.07.2019, 12:39   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

см.вложение
Код:
Sub Transform()
  Dim v, a, c&, r&, i&, x&
  v = Range(Cells(1), Cells(Rows.Count, 1).End(xlUp)).Value: r = 1
  For i = 1 To UBound(v)
    x = InStr(v(i, 1), "х")
    If x > 0 Then
      c = Val(Right(v(i, 1), Len(v(i, 1)) - x))
      If c > 0 Then Cells(r, 3).Resize(c, 1).Value = Left(v(i, 1), x - 1)
      r = r + c
    Else
      a = Split(v(i, 1), ",")
      Cells(r, 3).Resize(UBound(a) + 1, 1).Value = WorksheetFunction.Transpose(a)
      r = r + UBound(a) + 1
    End If
  Next
End Sub
Вложения
Тип файла: zip Книга1.zip (15.2 Кб, 17 просмотров)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 11.07.2019, 12:48   #7
Dan99
 
Регистрация: 11.07.2019
Сообщений: 8
По умолчанию

Спасибо огромное! Как освобожусь, проверю, отпишусь.
Dan99 вне форума Ответить с цитированием
Старый 11.07.2019, 18:27   #8
Dan99
 
Регистрация: 11.07.2019
Сообщений: 8
По умолчанию

[QUOTE=IgorGO;1787893]см.вложение
Игорь, ваш вариант покорил кнопкой!
Но я не учел один момент, встретилась ячейка в которой была и запятая и умножение, в результате получил в ячейке два числа, сможете поправить код под такую ситуацию?
[QUOTE=Serge_Bliznykov;1787890]Вложение 97184
Сергей, в вашем варианте почему-то получилось больше ячеек с несколькими числами, хотя видно что вы рассматривали больше вариантов содержания изначальных данных.

Я лучше исходник приложу, так будет понятнее, если сделаете автоматическое удаление пустых ячеек, вообще песня. Но это я и так фильтром могу сделать.

Спасибо вам огромное, за то что откликнулись.

если что, там такой код
[CODE]Option Explicit
Вложения
Тип файла: xlsx исходник.xlsx (11.1 Кб, 16 просмотров)
Dan99 вне форума Ответить с цитированием
Старый 11.07.2019, 19:04   #9
nilem
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 616
По умолчанию

Можно тоже попробовать? )
Код:
Sub ertert()
Dim x, y(), i&, j&, k&, v, t&

With ActiveSheet
    If .FilterMode Then .ShowAllData
    x = .Range("A1", .Cells(Rows.Count, 1).End(xlUp)).Value
End With
ReDim y(1 To UBound(x) * 6, 1 To 1)

For i = 1 To UBound(x)
    If Len(x(i, 1)) Then
        For Each v In Split(x(i, 1), ",")
            If InStr(v, "х") Then
                t = Split(Trim(v), "х")(0)
                For j = 1 To Split(Trim(v), "х")(1)
                    k = k + 1: y(k, 1) = t
                Next j
            Else
                k = k + 1: y(k, 1) = Trim(v)
            End If
        Next v
    End If
Next i
Columns(3).ClearContents
Range("C1").Resize(k).Value = y
End Sub
Вложения
Тип файла: xls исходник.xls (47.5 Кб, 16 просмотров)

Последний раз редактировалось nilem; 11.07.2019 в 19:08. Причина: добавил файл
nilem вне форума Ответить с цитированием
Старый 11.07.2019, 20:02   #10
Dan99
 
Регистрация: 11.07.2019
Сообщений: 8
По умолчанию

[QUOTE=nilem;1787933]Можно тоже попробовать? )
Спасибо огромное! То что надо!
Dan99 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа на одном листе с данными из LISTBOX, данные на другом листе konstantin1990 Microsoft Office Excel 3 22.07.2013 15:15
Дублирование ячеек, диапазона ячеек на новом листе ukrman Microsoft Office Excel 2 03.02.2012 01:06
1. Сформировать на листе Excel столбец, состоящий из 30 элементов, случайных чисел ... rnboy Microsoft Office Excel 12 19.12.2010 14:21
Формирование квитанции на новом листе ddv.code Microsoft Office Excel 3 21.10.2010 09:29
ячейка на одном листе, в которую необходимо подставлять данные из столбца, находящегося на другом листе Ирина Водолагина Microsoft Office Excel 4 04.03.2009 23:38