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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 След.
Макрос умной разбивки на строки
 
Цитата
evgeniygeo написал:
видимо файл не приложился
Странно. Прикрепил еще раз.
Макрос умной разбивки на строки
 
Добрый день! Имеется диапазон, в котором первый столбец названия, второй и третий - данные дат со временем, последний - разница между датами начала и конца.
Как сделать так, чтобы если разница больше диапазона от начала суток и до конца, то разделить значения на дополнительные строки. Пример в приложенном файле.
Изменено: Medvedoc - 19.02.2024 13:14:36
Найти среднее значение по условию.
 
Цитата
Sanim написал:
1. в первых 8 строках есть цифры?
нет
Найти среднее значение по условию.
 
Цитата
Sanim написал:
А:АВ:В
начало диапазона с 9 строки
Найти среднее значение по условию.
 
Цитата
Sanim написал:
ФИЛЬТР
у меня нет такой функции
Найти среднее значение по условию.
 
Цитата
АlехМ написал:
=СРЗНАЧЕСЛИМН(A1:A10;B1:B10;"")
Отличное решение =) а как можно сразу проверять последнюю заполненную ячейку, чтобы формула автоматически протягивалась на диапазон до последней заполненной ячейке (где все значения присутствуют)
Найти среднее значение по условию.
 
Добрый вечер! Есть два столбца со значениями. В столбце A все значения идут по порядку, а во втором столбце B есть пустые ячейки. Как мне найти в столбце A среднее значение только тех ячеек, у которых соседние ячейки пустые. И наоборот.
Не работает макрос при переносе фигур на другой лист
 
Добрый вечер! Написал макрос, который формирует соединение фигур по вертикали при выборе из выпадающего списка. Все работает хорошо, но попробовал вынести фигуры на другой лист и не работает макрос - то ошибка в методе Duplicate, то ошибка в методе Copy. Помогите пожалуйста доработать макрос.

Файл прикрепил

Сам макрос вот

Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim AffectedRange As Range
    Set AffectedRange = Intersect(Target, Me.Range("B:B")) ' Отслеживаем изменения только в столбце B
    
    If Not AffectedRange Is Nothing Then
        Application.EnableEvents = False ' Отключить события, чтобы избежать рекурсии
        Call DeleteExistingCopies ' Удалить предыдущие копии
        Call ArrangeShapes ' Создать новые копии
        Application.EnableEvents = True ' Включить события обратно
    End If
End Sub

Sub DeleteExistingCopies()
    Dim ExistingShape As Shape
    Dim i As Integer
    
    ' Проход по всем фигурам на листе
    For i = ActiveSheet.Shapes.Count To 1 Step -1
        Set ExistingShape = ActiveSheet.Shapes(i)
        ' Проверка на префикс "copy_shape"
        If Left(ExistingShape.Name, 10) = "copy_shape" Then
            ExistingShape.Delete
        End If
    Next i
End Sub

Sub ArrangeShapes()
    Dim SourceRange As Range
    Dim ShapeName As String
    Dim i As Integer
    Dim OriginalShape As Shape
    Dim CopiedShape As Object
    Dim TargetRange As Range
    Dim TopPosition As Double
    
    ' Задайте диапазон, где содержатся названия фигур
    Set SourceRange = Worksheets("Лист1").Range("B1:B10")
    
    ' Задайте диапазон, куда будут выставляться фигуры
    Set TargetRange = Worksheets("Лист1").Range("D1")
    
    ' Очищаем столбец D перед размещением
    TargetRange.EntireColumn.ClearContents
    
    ' Удалить существующие копии фигур, если они есть
    DeleteExistingCopies
    
    ' Определить начальную вертикальную позицию
    TopPosition = TargetRange.Top
    
    ' Проход по каждой строке в исходном диапазоне
    For i = 1 To SourceRange.Rows.Count
        ShapeName = SourceRange.Cells(i, 1).Value
        
        ' Найти оригинальную фигуру по имени
        Set OriginalShape = FindShapeByName(ShapeName)
        
        If Not OriginalShape Is Nothing Then
            On Error Resume Next
            ' Создать копию фигуры, если метод Duplicate существует
            Set CopiedShape = Application.Run("DuplicateShape", OriginalShape)
            On Error GoTo 0
            
            If Not CopiedShape Is Nothing Then
                ' Разместить копию фигуры
                Call PlaceShapeInCell(CopiedShape, TargetRange.Cells(i, 1), TopPosition)
                
                ' Изменить имя копии фигуры
                Dim ShapeNumber As String
                ShapeNumber = Format(i, "000")
                CopiedShape.Name = "copy_shape" & ShapeNumber
                
                ' Обновить вертикальную позицию для следующей фигуры
                TopPosition = TopPosition + CopiedShape.Height ' Высота фигуры
            End If
        End If
    Next i
End Sub

Function FindShapeByName(ShapeName As String) As Shape
    Dim FoundShape As Shape
    
    ' Поиск фигуры по имени
    On Error Resume Next
    Set FoundShape = Worksheets("Лист1").Shapes(ShapeName)
    On Error GoTo 0
    
    Set FindShapeByName = FoundShape
End Function

Sub PlaceShapeInCell(TargetShape As Object, TargetCell As Range, TopPos As Double)
    ' Выставить фигуру в соответствующей ячейке
    TargetShape.Top = TopPos
    TargetShape.Left = TargetCell.Left + (TargetCell.Width - TargetShape.Width) / 2
End Sub

Function DuplicateShape(ShapeToDuplicate As Shape) As Object
    On Error Resume Next
    Set DuplicateShape = ShapeToDuplicate.Duplicate
    On Error GoTo 0
End Function



код вставлен не в модуль, а в код листа.



Пробовал через модуль на кнопку вешать макрос:

Код
Sub ArrangeShapes()
    Dim SourceRange As Range
    Dim ShapeName As String
    Dim i As Integer
    Dim OriginalShape As Shape
    Dim TargetRange As Range
    Dim TopPosition As Double
    Dim DestinationSheet As Worksheet
    
    ' Укажите лист, на который нужно вставлять фигуры
    Set DestinationSheet = Worksheets("Лист1")
    
    ' Определите диапазон, в котором находятся названия фигур
    Set SourceRange = DestinationSheet.Range("B1:B10")
    
    ' Определите диапазон, куда будут размещаться фигуры
    Set TargetRange = DestinationSheet.Range("D1")
    
    ' Очистите столбец D перед размещением фигур
    TargetRange.EntireColumn.ClearContents
    
    ' Удалите существующие копии фигур, если они есть
    DeleteExistingCopies
    
    ' Установите начальную вертикальную позицию
    TopPosition = TargetRange.Top
    
    ' Проход по каждой строке в исходном диапазоне
    For i = 1 To SourceRange.Rows.Count
        ShapeName = SourceRange.Cells(i, 1).Value
        
        ' Найти оригинальную фигуру по имени на "Лист2"
        Set OriginalShape = FindShapeByNameOnSheet2(ShapeName)
        
        If Not OriginalShape Is Nothing Then
            ' Копировать оригинальную фигуру в буфер обмена
            OriginalShape.CopyPicture
            DestinationSheet.Paste Destination:=TargetRange.Cells(i, 1)
            
            ' Получить вставленную фигуру
            Dim CopiedShape As Shape
            Set CopiedShape = DestinationSheet.Shapes(DestinationSheet.Shapes.Count)
            
            ' Разместить вставленную фигуру в правильном месте
            Call PlaceShapeInCell(CopiedShape, TargetRange.Cells(i, 1), TopPosition)
            
            ' Переименовать вставленную фигуру
            Dim ShapeNumber As String
            ShapeNumber = Format(i, "000")
            CopiedShape.Name = "copy_shape" & ShapeNumber
            
            ' Обновить вертикальную позицию для следующей фигуры
            TopPosition = TopPosition + CopiedShape.Height
        End If
    Next i
End Sub

Sub DeleteExistingCopies()
    Dim ExistingShape As Shape
    Dim i As Integer
    
    ' Проход по всем фигурам на листе
    For i = Worksheets("Лист1").Shapes.Count To 1 Step -1
        Set ExistingShape = Worksheets("Лист1").Shapes(i)
        ' Проверка на префикс "copy_shape"
        If Left(ExistingShape.Name, 10) = "copy_shape" Then
            ExistingShape.Delete
        End If
    Next i
End Sub

Function FindShapeByNameOnSheet2(ShapeName As String) As Shape
    Dim FoundShape As Shape
    
    ' Поиск фигуры по имени на "Лист2"
    On Error Resume Next
    Set FoundShape = Worksheets("Лист2").Shapes(ShapeName)
    On Error GoTo 0
    
    Set FindShapeByNameOnSheet2 = FoundShape
End Function

Sub PlaceShapeInCell(TargetShape As Object, TargetCell As Range, TopPos As Double)
    ' Выставить фигуру в соответствующей ячейке
    TargetShape.Top = TopPos
    TargetShape.Left = TargetCell.Left + (TargetCell.Width - TargetShape.Width) / 2
End Sub

Function DuplicateShape(ShapeToDuplicate As Shape) As Object
    ' Попытаться создать копию фигуры, проверив на наличие метода Duplicate
    On Error Resume Next
    Set DuplicateShape = ShapeToDuplicate.Duplicate
    On Error GoTo 0
End Function



Вроде выполняется код как надо, но приостанавливает код на OriginalShape.CopyPicture
Изменено: Medvedoc - 19.08.2023 18:55:54
Перенос строк на другой лист по диапазону дат, редактирование и замена на на основном листе отредактированного интервала
 
evgeniygeo, я немного иначе написал код =)

Код
Sub rows()

Dim dateStart As Variant, myCell As Range
dateStart = CDate(Range("I1"))
dateStop = DateAdd("d", 1, CDate(dateStart))

Set cellStart = Range("A:A").Find(dateStart, LookIn:=xlValues)
Set cellStop = Range("A:A").Find(dateStop, LookIn:=xlValues)

If Not cellStart Or Not cellStop Is Nothing Then
Range("K1").Value = cellStart.Row
Range("K2").Value = cellStop.Row
End If

Worksheets("Èñõîäíûé ëèñò").Range(Cells(cellStart.Row, 1), Cells(cellStop.Row, 6)).Copy _
    Destination:=Worksheets("Öåëåâîé ëèñò").Range("A2:F23")

End Sub


Но тут у меня появилось два бага =)
1. На последней дате выдает ошибку, потому что вторую дату найти не может. Думаю тут надо прописывать условие дополнительное, что если не находит вторую дату в столбце, то брать по умолчание номер последней заполненной строки.

2. В скопированной части ломается формула в ячейках первой строки, поскольку они в оригинале завязаны на вышестоящие ячейки. Вот как тут быть пока не разобрался. Но скорее всего думаю достаточно копировать отдельно верхнюю строку с данными в виде значений и делать невидимыми.
Изменено: Medvedoc - 17.08.2023 00:47:32
Перенос строк на другой лист по диапазону дат, редактирование и замена на на основном листе отредактированного интервала
 
Добрый вечер, форумчане! Прошу Вашей помощи в вопросе:

Как с помощью макросов можно перенести строки указанного диапазона дат на другой лист, там отредактировать (удалить, изменить, добавить строки), а потом заменить изначальный вариант данного диапазона на отредактированный на основном листе? При этом строки содержать формулы, которые должны оставаться рабочими.
Как автоматически объединять ячейки в столбце при изменении значений в соседних ячейках по условию
 
Цитата
V написал:
объединение в эксель, если с этими ячейками будете дальше работать, не лучший вариант.
почему?
Как автоматически объединять ячейки в столбце при изменении значений в соседних ячейках по условию
 
Имеется таблица (файл прилагается), в которой вводятся в одном и том же диапазоне построчно цифровые данные. Как сделать так, чтобы при соответствии вводимых данных в диапазон строки при идентичном соответствии диапазону вышерасположенной строки происходило автоматическое объединение соседних текущей ячейки и вышерасположенной?
Изменено: Medvedoc - 13.05.2023 08:16:57
Подскажите с форматом времени в коде макроса
 
Jack Famous, работает =) Спасибо огромное!!!
Подскажите с форматом времени в коде макроса
 
Тогда проще наверное перевести в секунды и уже отталкиваться от этого
Подскажите с форматом времени в коде макроса
 
Добрый день, форумчане! Подскажите как правильно вывести в userform время.
На данный момент забираю время из ячейки и вывожу его на форму. Но вот разница в том, что в ячейке она отображается нормально, а в форме нет.
Время показывается в ячейке больше суток, например 42:10, а в форме выводится 18:10
То есть получается выводит время в форме только до суток.

Код
TextBox1.Text = Range("'Книга1'!A1").Value
TextBox1.Value = Format(TextBox1.Text, "hh:nn")
Подскажите комбинированный макрос для работы с файлами
 
Ігор Гончаренко, я вроде не просил писать за меня макрос =) просто попросил подсказать комбинированный макрос.
Подскажите комбинированный макрос для работы с файлами
 
evgeniygeo, хорошо, спасибо!
Подскажите комбинированный макрос для работы с файлами
 
Дмитрий(The_Prist) Щербаков, да так попробовал =) буду думать как сделать. Спасибо!
Подскажите комбинированный макрос для работы с файлами
 
Добрый вечер, уважаемые форумчане!!!!
Подскажите комбинированный макрос для работы с файлами. Данный макрос должен:
1. подгружать данные из внешнего текстового файла
2. при внесении новых данных автоматически или с небольшой задержкой или по кнопке сохранять новые данные в данный файл

То есть надо, чтобы сами данные хранились во внешнем файле и только подгружались при открытии книги, а при закрытии выгружались и хранились только во внешнем файле.
Изменено: Medvedoc - 31.01.2023 16:51:05
Как привязать кнопку на RibbonX к определенному листу?
 
Добрый вечер! Как можно привязать кнопку RibbonX к определенному листу? То есть чтобы при открытии нужного листа кнопка становилась активной или просто появлялась, а при уходе с данного листа она становилась неактивной или скрывалась.
Выборка нескольких наибольших значений по сложному условию
 
memo, ответил =) завал по работе был, не смог сразу ответить
Как получить из диапазона последние уникальные значения дубликатов?
 
memo, идеальный вариант! =) то, что надо. Извиняюсь, что долго отвечал - завал был по работе.
Осталось обработать ошибки и все будет нормуль =)
Выборка нескольких наибольших значений по сложному условию
 
Vik_tor, диапазон в таблице - это цельный интервал. Определяется среднее значение за весь интервал. Это и будет границами для деления по подинтервалам, в которых и находится максимальные значения.
Выборка нескольких наибольших значений по сложному условию
 
То есть за весь интервал диапазона должно быть получено максимальные значения - в данном случае они выделены красным
Выборка нескольких наибольших значений по сложному условию
 
МатросНаЗебре, Ігор Гончаренко, НЕ СОВСЕМ ТО УВЫ. Я красным цветом выделил какое значение должно быть получено
Выборка нескольких наибольших значений по сложному условию
 
Добрый вечер, уважаемые специалисты в области Excel.
Помогите составить формулу поиска нескольких наибольших значений в диапазоне со сложным условием.
В диапазоне имеются дробные числа, которые имеют закономерность от возрастания до падения с последующим подобным шагом. Надо найти каждый наибольший пик таких возрастаний.
Как получить из диапазона последние уникальные значения дубликатов?
 
New, поэтому и нужно получить значение последнего дубля по датам
Как получить из диапазона последние уникальные значения дубликатов?
 
New, выше привел пример структуры таблицы
Как получить из диапазона последние уникальные значения дубликатов?
 
10.09.2022просто значение 1
10.09.2022просто значение 2
10.09.2022просто значение 3
10.09.2022просто значение 1;просто значение 2;просто значение 3
12.0.2022просто значение 3
Как получить из диапазона последние уникальные значения дубликатов?
 
New, дело в том, что к последнему дублю привязано необходимое значение. Потому и требуется получить последнее число из одинаковых дублей
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 След.
Наверх