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

Вход

Регистрация

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

 

= Мир MS Excel/Добавление строк дубликатов по условию в ячейке - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Добавление строк дубликатов по условию в ячейке
Zaga83 Дата: Среда, 15.11.2017, 12:58 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день, Уважаемые Участники Форума
прошу подсказать решение
Имеется файл со строками в столбце F указаны размеры с 6-24 кратные 2
При выборе дипазона с размерами
Нужно создать для каждого размера свою строку с копированием/дублированием данных по строке для каждого размера
Моя проблема заключатся в том, что не понимаю как добавить каждую строку на новый лист.
код прилагаю:
[vba]
Код
Public Sub Size()
Dim A() As String, B() As String
Dim i As Long, j As Long
Dim Cell As Range
Dim stroka
Dim stolbets
For Each Cell In Selection

        stroka = Cell.Row
        stolbets = Cell.Column
                A = Split(Cells(stroka, stolbets), "-")
                B = Split(Cells(stroka, stolbets), "-")
'                MsgBox A(0)
'                MsgBox B(1)
                       
                        For i = CLng(A(0)) To CLng(B(1)) Step 2
                    
                            Debug.Print i
                            
                        Next i
                    
        Next Cell
End Sub
[/vba]

Вроде через отладку выводит все размеры, но как только пытаюсь в новый лист копировать, то всегда последнее значение остается только)
Файл прилагаю.
Прошу помочь как перенести размеры на новый лист?
К сообщению приложен файл: NNT-Non-formate.xlsm (96.9 Kb)


Сообщение отредактировал Zaga83 - Среда, 15.11.2017, 12:58
 
Ответить
СообщениеДобрый день, Уважаемые Участники Форума
прошу подсказать решение
Имеется файл со строками в столбце F указаны размеры с 6-24 кратные 2
При выборе дипазона с размерами
Нужно создать для каждого размера свою строку с копированием/дублированием данных по строке для каждого размера
Моя проблема заключатся в том, что не понимаю как добавить каждую строку на новый лист.
код прилагаю:
[vba]
Код
Public Sub Size()
Dim A() As String, B() As String
Dim i As Long, j As Long
Dim Cell As Range
Dim stroka
Dim stolbets
For Each Cell In Selection

        stroka = Cell.Row
        stolbets = Cell.Column
                A = Split(Cells(stroka, stolbets), "-")
                B = Split(Cells(stroka, stolbets), "-")
'                MsgBox A(0)
'                MsgBox B(1)
                       
                        For i = CLng(A(0)) To CLng(B(1)) Step 2
                    
                            Debug.Print i
                            
                        Next i
                    
        Next Cell
End Sub
[/vba]

Вроде через отладку выводит все размеры, но как только пытаюсь в новый лист копировать, то всегда последнее значение остается только)
Файл прилагаю.
Прошу помочь как перенести размеры на новый лист?

Автор - Zaga83
Дата добавления - 15.11.2017 в 12:58
_Boroda_ Дата: Среда, 15.11.2017, 13:53 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Проверки всякие не стал писать
[vba]
Код
Public Sub SizeRazm()
    Dim d_ As Range
    Application.ScreenUpdating = 0
    Application.Calculation = xlCalculationManual
    On Error Resume Next
    r_ = Selection(1).Row
    c_ = Selection(1).Column
    With Sheets("Лист2")
        For Each d_ In Selection
            If d_ <> "" Then
                ar0 = d_.Offset(, -5).Resize(, 5)
                ar = Split(d_, "-")
                For i = ar(0) To ar(1) Step 2
                    .Cells(r_ + n_, c_).Offset(, -5).Resize(, 5) = ar0
                    .Cells(r_ + n_, c_) = i
                    n_ = n_ + 1
                Next i
            End If
        Next d_
    End With
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = 1
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПроверки всякие не стал писать
[vba]
Код
Public Sub SizeRazm()
    Dim d_ As Range
    Application.ScreenUpdating = 0
    Application.Calculation = xlCalculationManual
    On Error Resume Next
    r_ = Selection(1).Row
    c_ = Selection(1).Column
    With Sheets("Лист2")
        For Each d_ In Selection
            If d_ <> "" Then
                ar0 = d_.Offset(, -5).Resize(, 5)
                ar = Split(d_, "-")
                For i = ar(0) To ar(1) Step 2
                    .Cells(r_ + n_, c_).Offset(, -5).Resize(, 5) = ar0
                    .Cells(r_ + n_, c_) = i
                    n_ = n_ + 1
                Next i
            End If
        Next d_
    End With
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = 1
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 15.11.2017 в 13:53
sboy Дата: Среда, 15.11.2017, 14:16 | Сообщение № 3
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
Добрый день. подкорректировал Ваш код, закомментил лишнее, не подметал за собой, поэтому под спойлер
К сообщению приложен файл: 0004957.xlsm (98.1 Kb)


Яндекс: 410016850021169

Сообщение отредактировал sboy - Среда, 15.11.2017, 14:16
 
Ответить
СообщениеДобрый день. подкорректировал Ваш код, закомментил лишнее, не подметал за собой, поэтому под спойлер

Автор - sboy
Дата добавления - 15.11.2017 в 14:16
Zaga83 Дата: Четверг, 16.11.2017, 11:50 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Добрый день! _Boroda_, и sboy,
Ваш код просто супер и мне конечно хочеться задать по некоторым строкам кода вопросы

Вопрос для _Boroda_,
[vba]
Код
For i = Ar(0) To Ar(1) Step 2
                .Cells(r_ + n_, c_).Offset(, -5).Resize(, 5) = ar0
                .Cells(r_ + n_, c_) = i
                n_ = n_ + 1
            Next i
[/vba]
Получается чтобы перенести все значения с каждым размером в новую последующюю ячейку нам нужно в цикл вставить счетчик n_=n_+1? чтобы была возможность
переносить значение в новую строку с учетом значения r_? Я правильно понимаю?

Вопрос для sboy,
[vba]
Код
For i = CLng(A(0)) To CLng(A(1)) Step 2
                arr_(UBound(arr_)) = i
                ReDim Preserve arr_(UBound(arr_) + 1)
        Next i
[/vba]
Получается значение i мы заносим в массив arr_ c верхней границей и для чего добавляем +1?

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

Прошу ответить на мои вопросы %)
 
Ответить
СообщениеДобрый день! _Boroda_, и sboy,
Ваш код просто супер и мне конечно хочеться задать по некоторым строкам кода вопросы

Вопрос для _Boroda_,
[vba]
Код
For i = Ar(0) To Ar(1) Step 2
                .Cells(r_ + n_, c_).Offset(, -5).Resize(, 5) = ar0
                .Cells(r_ + n_, c_) = i
                n_ = n_ + 1
            Next i
[/vba]
Получается чтобы перенести все значения с каждым размером в новую последующюю ячейку нам нужно в цикл вставить счетчик n_=n_+1? чтобы была возможность
переносить значение в новую строку с учетом значения r_? Я правильно понимаю?

Вопрос для sboy,
[vba]
Код
For i = CLng(A(0)) To CLng(A(1)) Step 2
                arr_(UBound(arr_)) = i
                ReDim Preserve arr_(UBound(arr_) + 1)
        Next i
[/vba]
Получается значение i мы заносим в массив arr_ c верхней границей и для чего добавляем +1?

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

Прошу ответить на мои вопросы %)

Автор - Zaga83
Дата добавления - 16.11.2017 в 11:50
sboy Дата: Четверг, 16.11.2017, 11:59 | Сообщение № 5
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2566
Репутация: 724 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код

arr_(UBound(arr_)) = i ' присваиваем последнему элементу массива значение i
ReDim Preserve arr_(UBound(arr_) + 1) 'увеличиваем размер массива на 1 с сохранением предыдущих элементов
[/vba]


Яндекс: 410016850021169
 
Ответить
Сообщение[vba]
Код

arr_(UBound(arr_)) = i ' присваиваем последнему элементу массива значение i
ReDim Preserve arr_(UBound(arr_) + 1) 'увеличиваем размер массива на 1 с сохранением предыдущих элементов
[/vba]

Автор - sboy
Дата добавления - 16.11.2017 в 11:59
_Boroda_ Дата: Четверг, 16.11.2017, 12:10 | Сообщение № 6
Группа: Админы
Ранг: Местный житель
Сообщений: 17006
Репутация: 6667 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
нам нужно в цикл вставить счетчик n_=n_+1? чтобы была возможность
переносить значение в новую строку с учетом значения r_? Я правильно понимаю?

Абсолютно. Мы определяем первую строку r_ и дальше для любого количества значений типа "6-24" просто тупо прибавляем к r_ по единичке на каждую пару (6-8-10-12-...)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
нам нужно в цикл вставить счетчик n_=n_+1? чтобы была возможность
переносить значение в новую строку с учетом значения r_? Я правильно понимаю?

Абсолютно. Мы определяем первую строку r_ и дальше для любого количества значений типа "6-24" просто тупо прибавляем к r_ по единичке на каждую пару (6-8-10-12-...)

Автор - _Boroda_
Дата добавления - 16.11.2017 в 12:10
Zaga83 Дата: Четверг, 16.11.2017, 12:40 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
всем спасибо за помощь
 
Ответить
Сообщениевсем спасибо за помощь

Автор - Zaga83
Дата добавления - 16.11.2017 в 12:40
  • Страница 1 из 1
  • 1
Поиск:

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