Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Макрос для дублирования строки с изменением данных
 
Условия работы кода. На активном листе первая строка - заголовки. В книге нужно создать лист с именем "Лист2". Выделить диапазон с вашими данными без заголовков, выполнить макрос. Результат работы макроса появится на Листе2.
Код
Public Sub SplitString()
    
    Dim rngTable As Range
    Dim rngStrings As Range
    Dim wksCurrent As Worksheet
    Dim wksNew As Worksheet
    
    Set wksCurrent = ThisWorkbook.ActiveSheet
    Set wksNew = ThisWorkbook.Worksheets.Item("Лист2")
    Set rngTable = Selection
    Set rngStrings = rngTable.Columns.Item(3)
    
    Dim i As Long
    Dim lInsertingRow As Long
    Dim lPosition As Long
    Dim sFirstPart As String
    Dim sSecondPart As String
    
    wksCurrent.Rows.Item(1).Copy Destination:=wksNew.Cells(1, 1)
    lInsertingRow = 2
    
    For i = 1 To rngStrings.Rows.Count Step 1
        
        lPosition = InStr(rngStrings.Cells(i, 1).Value, "(")
        
        If lPosition > 1 Then
        
            sFirstPart = Trim(Left(rngStrings.Cells(i, 1).Value, lPosition - 1))
            sSecondPart = Trim(Right(rngStrings.Cells(i, 1).Value, Len(rngStrings.Cells(i, 1).Value) - Len(sFirstPart)))
            sSecondPart = Replace(sSecondPart, "(", "")
            sSecondPart = Replace(sSecondPart, ")", "")
            
            wksNew.Cells(lInsertingRow, 1).Value = rngTable.Cells(i, 1)
            wksNew.Cells(lInsertingRow, 2).Value = rngTable.Cells(i, 2)
            wksNew.Cells(lInsertingRow, 3).Value = sFirstPart
            wksNew.Cells(lInsertingRow, 4).Value = rngTable.Cells(i, 4)
            
            wksNew.Cells(lInsertingRow + 1, 1).Value = rngTable.Cells(i, 1)
            wksNew.Cells(lInsertingRow + 1, 2).Value = rngTable.Cells(i, 2)
            wksNew.Cells(lInsertingRow + 1, 3).Value = sSecondPart
            wksNew.Cells(lInsertingRow + 1, 4).Value = rngTable.Cells(i, 4)
            
            lInsertingRow = lInsertingRow + 2
        Else
            rngTable.Rows.Item(i).Copy Destination:=wksNew.Cells(lInsertingRow, 1)
            lInsertingRow = lInsertingRow + 1
        End If
        
    Next i
    
    Set wksCurrent = Nothing
    Set wksNew = Nothing
    Set rngTable = Nothingn
    Set rngStrings = Nothing
    
End Sub
Изменено: GeorgiyV - 24.11.2017 14:13:48
Подсчёт количества акций по неделям, имея дату начала и окончания
 
Чтобы формула работала, имеющиеся и новые данные на 1 листе должны оставаться отформатированными в виде таблицы (это будет происходить автоматически при дописывании данных в первую пустую строку сразу после таблицы 1 листа).  На втором листе производитель должен быть в первом столбце, товар - во втором, номер недели - в третьей строке. Остальное вроде можно безопасно менять :)

P.S. Ах да, номера недель разных годов не различаются формулой, т.е.только для планирования на один год таблицы.
Изменено: GeorgiyV - 23.11.2017 17:50:43
Подсчёт количества акций по неделям, имея дату начала и окончания
 
Решение сделано с помощью формул на втором листе. Только на первом листе в вычисление номера недели ISO верните свою функцию, видимо в моей версии такой нет, я изменил на НОМНЕДЕЛИ.
вопрос по циклическим ссылкам
 
Возможно из-за впрыгивания в первый цикл For... Next. Лучше избавиться от GoTo, если нужно выполнять повторяющийся код - оформить в отдельную процедуру/функцию и вызывать её из If... Then
Создание файла с вставленным туда значением из другого файла
 
Надо дописать код примерно так:
1) sFileName - это полное имя файла, соответствующее i-ой ячейке столбца C, используем его для открытия файла.
2) Данные для файла ИНН мы берем из столбцов D, E, F, G всё из той же i-ой строки и копируем куда надо
3) Закрываем файл
Потом цикл переходит к следующей строке.

Это уже сами, или кто-то другой пусть поможет, там не сложно
Изменено: GeorgiyV - 22.11.2017 19:08:08
Создание файла с вставленным туда значением из другого файла
 
Вот так можно организовать поиск и перебор файлов:
Код
Public Sub WriteData()

    'Определяем диапазон с ИНН данными
    Dim rngINN As Range
    Set rngINN = Intersect(ThisWorkbook.ActiveSheet.UsedRange, Columns.Item(3))
    
    Dim i As Long                       'счетчик
    Dim sFileName As String             'имя файла
    Dim sPath As String                 'путь к папке с файлами ИНН
    sPath = "C:\"                       'Указать папку с файлами, заканчивающуюся обратным слэшем
    
    'Перебор всех ИНН
    For i = 5 To rngINN.Rows.Count Step 1
        sFileName = Dir(sPath & rngINN.Cells(i, 1).Value & ".xls", vbNormal)   'Проверяем наличие файла
        If Len(sFileName) <> 0 Then                                     'Если файл есть, то
            'Открываем файл, вписываем значения куда надо, закрываем
        End If
    Next i
    
    Set rngINN = Nothing
    
End Sub
Изменено: GeorgiyV - 22.11.2017 10:11:28
Удаление значений меньше 100 в определенном столбце
 
Если нужно очистить только содержание ячеек, то можно использовать метод ClearContents
Код
MyRange.ClearContents
Изменено: GeorgiyV - 22.11.2017 09:31:36
Заполнение недостающих данных в ячейке между начальным и конечным значениями
 
Вот, пожалуйста, см. Лист2. Первые служебные столбцы можно скрыть, чтоб не мешались. Работает до 999, если надо больше - продлевайте таблицу.
Рассчитать стоимость по данным двух таблиц - статической и динамической
 
Вот ещё доделал, чтоб на листе Заказы Код вида был в виде выпадающего списка
Рассчитать стоимость по данным двух таблиц - статической и динамической
 
Готово. Сделано на формулах без использования макросов. Если в таблице на первой не менять стобцы (но можно добавлять записи), то достаточно копировать формулу в ячейки ниже. Формула работает для текущей строки в любом ее столбце
Изменено: GeorgiyV - 17.11.2017 14:01:54
Страницы: 1
Наверх