Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Создание таблицы VBA Excel - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Создание таблицы VBA Excel
walkinghome Дата: Среда, 25.11.2020, 12:20 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Доброго времени суток!

Во время работы столкнулся со следующим вопросом: с помощью какого кода через макрос можно создать столбцы таблицы на основе значения из ячейки? Положим, если значение исходной ячейки А1 = 8, то начиная с ячейки Е1 создается таблица с 8-ью столбцами.

Совсем идеальным было бы, скажем если следующая исходная ячейка В1 = 2, то данные два столбца продолжают созданную вверху таблицу с 8-ю столбцами. Но это, как говорится, большое если...

Новый на форуме, поэтому буду благодарен за любой ответ


Выражение - вооружение
 
Ответить
СообщениеДоброго времени суток!

Во время работы столкнулся со следующим вопросом: с помощью какого кода через макрос можно создать столбцы таблицы на основе значения из ячейки? Положим, если значение исходной ячейки А1 = 8, то начиная с ячейки Е1 создается таблица с 8-ью столбцами.

Совсем идеальным было бы, скажем если следующая исходная ячейка В1 = 2, то данные два столбца продолжают созданную вверху таблицу с 8-ю столбцами. Но это, как говорится, большое если...

Новый на форуме, поэтому буду благодарен за любой ответ

Автор - walkinghome
Дата добавления - 25.11.2020 в 12:20
Nic70y Дата: Среда, 25.11.2020, 12:28 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 9005
Репутация: 2369 ±
Замечаний: 0% ±

Excel 2010
о каких столбцах речь идет?
просто границы нарисовать?
Вы бы файл-пример-Excel приложили и показали что хотите получить.


ЮMoney 41001841029809

Сообщение отредактировал Nic70y - Среда, 25.11.2020, 12:29
 
Ответить
Сообщениео каких столбцах речь идет?
просто границы нарисовать?
Вы бы файл-пример-Excel приложили и показали что хотите получить.

Автор - Nic70y
Дата добавления - 25.11.2020 в 12:28
walkinghome Дата: Среда, 25.11.2020, 12:55 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Nic70y, извиняюсь, не учел, пример прикрепил.

Грубо говоря, создается такого рода таблица вместе с определенным числом столбцов и чтобы там также отразились некоторые параметры (как например стоимость).

Но думаю суть в целом состоит из рисования границ по соответствующему количеству товара
К сообщению приложен файл: 7343128.xlsx (9.4 Kb)


Выражение - вооружение
 
Ответить
СообщениеNic70y, извиняюсь, не учел, пример прикрепил.

Грубо говоря, создается такого рода таблица вместе с определенным числом столбцов и чтобы там также отразились некоторые параметры (как например стоимость).

Но думаю суть в целом состоит из рисования границ по соответствующему количеству товара

Автор - walkinghome
Дата добавления - 25.11.2020 в 12:55
Nic70y Дата: Среда, 25.11.2020, 13:07 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 9005
Репутация: 2369 ±
Замечаний: 0% ±

Excel 2010
walkinghome, скажите Вам важна придуманная Вами структура таблиц вводимых данных?
я бы ее немного привел в порядок наверное.


ЮMoney 41001841029809
 
Ответить
Сообщениеwalkinghome, скажите Вам важна придуманная Вами структура таблиц вводимых данных?
я бы ее немного привел в порядок наверное.

Автор - Nic70y
Дата добавления - 25.11.2020 в 13:07
walkinghome Дата: Среда, 25.11.2020, 13:11 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Nic70y, структура не совсем важна - создал пример лишь для понимания сути вопроса


Выражение - вооружение

Сообщение отредактировал walkinghome - Среда, 25.11.2020, 13:12
 
Ответить
СообщениеNic70y, структура не совсем важна - создал пример лишь для понимания сути вопроса

Автор - walkinghome
Дата добавления - 25.11.2020 в 13:11
Nic70y Дата: Среда, 25.11.2020, 14:04 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 9005
Репутация: 2369 ±
Замечаний: 0% ±

Excel 2010
A - наименование
B - кол-во
C - стоимость
столбец E образец формата (нарисуете как захотите)
[vba]
Код
Sub u_711()
    Application.ScreenUpdating = False
    'сотрем старые столбцы
    Range("e1:e9").ClearContents
    y = Cells(1, Columns.Count).End(xlToLeft).Column
    If y > 5 Then Range(Cells(1, "f"), Cells(9, y)).Clear
    'составим новые
    a = Cells(Rows.Count, "a").End(xlUp).Row 'последняя заполненная строка столбца A
    If a > 1 Then
        For Each u In Range("a2:a" & a) 'проходимся циклом по товарам
            b = u.Value         'наименование
            c = u.Offset(0, 1)  'кол-во
            d = u.Offset(0, 2)  'стоимость
            e = Cells(1, Columns.Count).End(xlToLeft).Column + 1    'левый столбец для товара
            If e < 6 Then e = 5
            f = e + c - 1                    'правый столбец для товара
            Range(Cells(1, e), Cells(1, f)) = b     'заполняем наменованием
            Range(Cells(2, e), Cells(2, f)) = d     'заполняем стоимостью
        Next
    Else
        MsgBox "Нет данных!"
    End If
    'формат по обзазцу столбца E
    g = Cells(1, Columns.Count).End(xlToLeft).Column
    If g > 5 Then
        Columns("e").Copy
        Range(Columns(6), Columns(g)).PasteSpecial Paste:=xlPasteFormats
        Application.CutCopyMode = False
    End If
    Application.ScreenUpdating = True
End Sub
[/vba]вносим данные, жмем кнопку
К сообщению приложен файл: 7343128.xlsm (19.7 Kb)


ЮMoney 41001841029809
 
Ответить
СообщениеA - наименование
B - кол-во
C - стоимость
столбец E образец формата (нарисуете как захотите)
[vba]
Код
Sub u_711()
    Application.ScreenUpdating = False
    'сотрем старые столбцы
    Range("e1:e9").ClearContents
    y = Cells(1, Columns.Count).End(xlToLeft).Column
    If y > 5 Then Range(Cells(1, "f"), Cells(9, y)).Clear
    'составим новые
    a = Cells(Rows.Count, "a").End(xlUp).Row 'последняя заполненная строка столбца A
    If a > 1 Then
        For Each u In Range("a2:a" & a) 'проходимся циклом по товарам
            b = u.Value         'наименование
            c = u.Offset(0, 1)  'кол-во
            d = u.Offset(0, 2)  'стоимость
            e = Cells(1, Columns.Count).End(xlToLeft).Column + 1    'левый столбец для товара
            If e < 6 Then e = 5
            f = e + c - 1                    'правый столбец для товара
            Range(Cells(1, e), Cells(1, f)) = b     'заполняем наменованием
            Range(Cells(2, e), Cells(2, f)) = d     'заполняем стоимостью
        Next
    Else
        MsgBox "Нет данных!"
    End If
    'формат по обзазцу столбца E
    g = Cells(1, Columns.Count).End(xlToLeft).Column
    If g > 5 Then
        Columns("e").Copy
        Range(Columns(6), Columns(g)).PasteSpecial Paste:=xlPasteFormats
        Application.CutCopyMode = False
    End If
    Application.ScreenUpdating = True
End Sub
[/vba]вносим данные, жмем кнопку

Автор - Nic70y
Дата добавления - 25.11.2020 в 14:04
walkinghome Дата: Среда, 25.11.2020, 14:12 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Nic70y, спасибо, выглядит идеально!


Выражение - вооружение
 
Ответить
СообщениеNic70y, спасибо, выглядит идеально!

Автор - walkinghome
Дата добавления - 25.11.2020 в 14:12
walkinghome Дата: Среда, 25.11.2020, 16:23 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Nic70y, небольшой вопрос: где именно необходимо сменить код, если таблица с вводимыми данными находится на первом листе (Лист1), а собранная после таблица на листе втором (Лист2)? Иными словами, дабы собранная таблица находилась на следующем листе


Выражение - вооружение
 
Ответить
СообщениеNic70y, небольшой вопрос: где именно необходимо сменить код, если таблица с вводимыми данными находится на первом листе (Лист1), а собранная после таблица на листе втором (Лист2)? Иными словами, дабы собранная таблица находилась на следующем листе

Автор - walkinghome
Дата добавления - 25.11.2020 в 16:23
Nic70y Дата: Среда, 25.11.2020, 17:12 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 9005
Репутация: 2369 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
Sub u_711()
    Application.ScreenUpdating = False
    'сотрем старые столбцы
    Sheets("Лист2").Range("a1:a9").ClearContents
    y = Sheets("Лист2").Cells(1, Columns.Count).End(xlToLeft).Column
    If y > 1 Then Range(Sheets("Лист2").Cells(1, "b"), Sheets("Лист2").Cells(9, y)).Clear
    'составим новые
    a = Cells(Rows.Count, "a").End(xlUp).Row 'последняя заполненная строка столбца A
    If a > 1 Then
        For Each u In Range("a2:a" & a) 'проходимся циклом по товарам
            b = u.Value         'наименование
            c = u.Offset(0, 1)  'кол-во
            d = u.Offset(0, 2)  'стоимость
            e = Sheets("Лист2").Cells(1, Columns.Count).End(xlToLeft).Column + 1    'левый столбец для товара
            If e = 2 And Sheets("Лист2").Range("a1") = "" Then e = 1
            f = e + c - 1                    'правый столбец для товара
            Range(Sheets("Лист2").Cells(1, e), Sheets("Лист2").Cells(1, f)) = b     'заполняем наменованием
            Range(Sheets("Лист2").Cells(2, e), Sheets("Лист2").Cells(2, f)) = d     'заполняем стоимостью
        Next
    Else
        MsgBox "Нет данных!"
    End If
    'формат по обзазцу столбца E
    g = Sheets("Лист2").Cells(1, Columns.Count).End(xlToLeft).Column
    If g > 1 Then
        Sheets("Лист2").Columns("a").Copy
        Range(Sheets("Лист2").Columns(2), Sheets("Лист2").Columns(g)).PasteSpecial Paste:=xlPasteFormats
        Application.CutCopyMode = False
    End If
    Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: 7343128-1-.xlsm (22.1 Kb)


ЮMoney 41001841029809
 
Ответить
Сообщение[vba]
Код
Sub u_711()
    Application.ScreenUpdating = False
    'сотрем старые столбцы
    Sheets("Лист2").Range("a1:a9").ClearContents
    y = Sheets("Лист2").Cells(1, Columns.Count).End(xlToLeft).Column
    If y > 1 Then Range(Sheets("Лист2").Cells(1, "b"), Sheets("Лист2").Cells(9, y)).Clear
    'составим новые
    a = Cells(Rows.Count, "a").End(xlUp).Row 'последняя заполненная строка столбца A
    If a > 1 Then
        For Each u In Range("a2:a" & a) 'проходимся циклом по товарам
            b = u.Value         'наименование
            c = u.Offset(0, 1)  'кол-во
            d = u.Offset(0, 2)  'стоимость
            e = Sheets("Лист2").Cells(1, Columns.Count).End(xlToLeft).Column + 1    'левый столбец для товара
            If e = 2 And Sheets("Лист2").Range("a1") = "" Then e = 1
            f = e + c - 1                    'правый столбец для товара
            Range(Sheets("Лист2").Cells(1, e), Sheets("Лист2").Cells(1, f)) = b     'заполняем наменованием
            Range(Sheets("Лист2").Cells(2, e), Sheets("Лист2").Cells(2, f)) = d     'заполняем стоимостью
        Next
    Else
        MsgBox "Нет данных!"
    End If
    'формат по обзазцу столбца E
    g = Sheets("Лист2").Cells(1, Columns.Count).End(xlToLeft).Column
    If g > 1 Then
        Sheets("Лист2").Columns("a").Copy
        Range(Sheets("Лист2").Columns(2), Sheets("Лист2").Columns(g)).PasteSpecial Paste:=xlPasteFormats
        Application.CutCopyMode = False
    End If
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Nic70y
Дата добавления - 25.11.2020 в 17:12
walkinghome Дата: Четверг, 26.11.2020, 11:29 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Nic70y, спасибо!

Быстрый вопрос напоследок: как именно изменится код, если кнопка для выполнения макроса будет находиться на Лист1, исходная таблица на Лист2 и построенная таблица на Лист3?

По всему остальному макрос функционирует беспрекословно.


Выражение - вооружение
 
Ответить
СообщениеNic70y, спасибо!

Быстрый вопрос напоследок: как именно изменится код, если кнопка для выполнения макроса будет находиться на Лист1, исходная таблица на Лист2 и построенная таблица на Лист3?

По всему остальному макрос функционирует беспрекословно.

Автор - walkinghome
Дата добавления - 26.11.2020 в 11:29
Nic70y Дата: Четверг, 26.11.2020, 13:14 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 9005
Репутация: 2369 ±
Замечаний: 0% ±

Excel 2010
1) меняем Лист2 на Лист3
2)добавляем Лист2 сюда:
[vba]
Код
    'составим новые
    a = Sheets("Лист2").Cells(Rows.Count, "a").End(xlUp).Row 'последняя заполненная строка столбца A
    If a > 1 Then
        For Each u In Sheets("Лист2").Range("a2:a" & a) 'проходимся циклом по товарам
[/vba]


ЮMoney 41001841029809
 
Ответить
Сообщение1) меняем Лист2 на Лист3
2)добавляем Лист2 сюда:
[vba]
Код
    'составим новые
    a = Sheets("Лист2").Cells(Rows.Count, "a").End(xlUp).Row 'последняя заполненная строка столбца A
    If a > 1 Then
        For Each u In Sheets("Лист2").Range("a2:a" & a) 'проходимся циклом по товарам
[/vba]

Автор - Nic70y
Дата добавления - 26.11.2020 в 13:14
walkinghome Дата: Четверг, 26.11.2020, 17:44 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Nic70y, отлично, всё функционирует как надо.

Единственное: в таблице редактирования значений (Лист2) если присутствуют значения "0" макрос всё же создает по ним столбцы. Понимаю, что явно прошу многого, но нет ли возможности этого избежать?

По своей сути единственная оставшаяся проблема на данный момент.


Выражение - вооружение
 
Ответить
СообщениеNic70y, отлично, всё функционирует как надо.

Единственное: в таблице редактирования значений (Лист2) если присутствуют значения "0" макрос всё же создает по ним столбцы. Понимаю, что явно прошу многого, но нет ли возможности этого избежать?

По своей сути единственная оставшаяся проблема на данный момент.

Автор - walkinghome
Дата добавления - 26.11.2020 в 17:44
Nic70y Дата: Пятница, 27.11.2020, 08:25 | Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 9005
Репутация: 2369 ±
Замечаний: 0% ±

Excel 2010
добавить проверку
[vba]
Код
            c = u.Offset(0, 1)  'кол-во
            If c > 0 Then
[/vba]
........
[vba]
Код
            End If
        Next
[/vba]


ЮMoney 41001841029809
 
Ответить
Сообщениедобавить проверку
[vba]
Код
            c = u.Offset(0, 1)  'кол-во
            If c > 0 Then
[/vba]
........
[vba]
Код
            End If
        Next
[/vba]

Автор - Nic70y
Дата добавления - 27.11.2020 в 08:25
walkinghome Дата: Воскресенье, 29.11.2020, 14:23 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 25
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Nic70y, огромное спасибо за помощь!


Выражение - вооружение
 
Ответить
СообщениеNic70y, огромное спасибо за помощь!

Автор - walkinghome
Дата добавления - 29.11.2020 в 14:23
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!