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

Страницы: 1 2 3 След.
Макрос умной разбивки на строки
 
Добрый день! Имеется диапазон, в котором первый столбец названия, второй и третий - данные дат со временем, последний - разница между датами начала и конца.
Как сделать так, чтобы если разница больше диапазона от начала суток и до конца, то разделить значения на дополнительные строки. Пример в приложенном файле.
Изменено: Medvedoc - 19.02.2024 13:14:36
Найти среднее значение по условию.
 
Добрый вечер! Есть два столбца со значениями. В столбце 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
Перенос строк на другой лист по диапазону дат, редактирование и замена на на основном листе отредактированного интервала
 
Добрый вечер, форумчане! Прошу Вашей помощи в вопросе:

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

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

То есть надо, чтобы сами данные хранились во внешнем файле и только подгружались при открытии книги, а при закрытии выгружались и хранились только во внешнем файле.
Изменено: Medvedoc - 31.01.2023 16:51:05
Как привязать кнопку на RibbonX к определенному листу?
 
Добрый вечер! Как можно привязать кнопку RibbonX к определенному листу? То есть чтобы при открытии нужного листа кнопка становилась активной или просто появлялась, а при уходе с данного листа она становилась неактивной или скрывалась.
Выборка нескольких наибольших значений по сложному условию
 
Добрый вечер, уважаемые специалисты в области Excel.
Помогите составить формулу поиска нескольких наибольших значений в диапазоне со сложным условием.
В диапазоне имеются дробные числа, которые имеют закономерность от возрастания до падения с последующим подобным шагом. Надо найти каждый наибольший пик таких возрастаний.
Как получить из диапазона последние уникальные значения дубликатов?
 
День добрый!
Имеется таблица с датами, среди которых повторяются сами даты.
10.09.2022
10.09.2022
11.09.2022
11.09.2022
11.09.2022
12.09.2022
14.09.2022
14.09.2022
19.09.2022
20.09.2022

Как составить формулу, чтобы на выходе получилось
10.09.2022
11.09.2022
12.09.2022
14.09.2022
19.09.2022
20.09.2022

И именно последние значения дублей брались
Как правильно получить и просуммировать данные из одного диапазона в другой?
 
Имеется диапазон, в который вводятся по датам предупреждения. На одну дату может быть несколько предупреждений, каждое из которых вносится с новой строки.
Как просуммировать одинаковые предупреждения и с остальными предупреждениями перенести за соответствующую дату в другой диапазон и все проставить в одну строку?
Образец приложил.
Как копировать данные в автоматическом режиме из одной книги в другую?
 
Доброй ночи! Как можно сделать так, чтобы вводимые данные в автоматическом режиме сохранилясь в закрытую книгу? Таблицы идентичны что в рабочей, что в закрытой книгах. Просто надо, чтобы при вводе значений они автоматически сохранялись в закрытую книгу
Как с помощью формул отфильтровать диапазон между датами с присутствием пустых ячеек?
 
Всем доброго утра!
Имеется некий диапазон, в котором первый столбец содержит даты. Каждой дате соответствует строка с данными. Но таких строк может быть несколько. В результате одинаковая дата у последующих строк не проставляется.
Фильтрация производится по "Базе записей" и выводится результат в таблицу "Результат фильтрации".

На листе "Оригинал" приведена работа формул, которые фильтруют данные, но не учитывают строки, у которых дата аналогичная не проставляется. А на листе "Костыль" привел пример работы формул через костыли. Добавил дополнительный столбец, в котором через формулы заполняю опущенные по умолчанию даты и выполняю фильтрацию уже по данному столбцу. Но данный способ немного нерационален. Может кто сможет подсказать как обойти в первом варианте вывод результатов с данными пробелами по датам?
Изменено: Medvedoc - 07.09.2022 08:49:15
"Как получить все с троки из диапазона между двумя датами?"
 
Добрый вечер! Уважаемые форумчане!
Имеется диапазон с данными, из которых делается выборка данных между двумя датами. Вроде все работает, но вот если одной дате соответствует несколько строк и она по умолчанию не проставляется, то выбирается только первая строка данной даты. А необходимо, чтобы если данная дата должна выводиться, то и все строки соответствующие ей выводились.
Пример с файлом приложил.

И второй момент - каким образом добавить выборку не только по дате, но чтобы и время участвовало в выборке из столбца "Время начала"?
Изменено: Юрий М - 06.09.2022 18:55:16
Как автоматически сделать изменение значения зависимого списка в зависимости от выбранного значения в основном списке?
 
Добрый день! Как сделать в зависимых выпадающих списках автоматическое переключение зависимого списка?
Рассматривал пример https://www.planetaexcel.ru/techniques/1/38/
Если я выбираю в начальном списке нужную категорию, то в зависмом списке остается значение от первоначального варианта. Как сделать так, чтобы он заменялся на первое значение из выбранной категории?
Как выполнить поиск в строке по списку слов заданного диапазона с последующим выводом заголовка данного диапазона в соседней строке", Поиск по словам из диапазона в строке с последующим выводом заголовка диапазона в соседней строке
 
Добрый вечер! Нужна помощь в оптимизации формулы.

Имеется вкладка "Настройка" с диапазонами по группам и есть вкладка с таблицей данных. Необходимо каждую строку брать, перебирать содержимое группы настройки на присутствие слов в данной строке и при нахождении в соседнем столбце проставлять название данной группы.
Реализовать получилось, но формула получается грамоздкой. Приложил пример.
Как оптимизировать формулу, чтобы она не была грамоздкой?
Изменено: Юрий М - 24.08.2022 21:11:11
Помогите транспарировать данные
 
Добрый вечер! Есть таблица вопросов и ответов, которые расположены блоки на странице исходные данные. Как вывести на странице преобразованные данные в таблицу с готовыми ответами?
Файлы примера прикладываю.
Прогрессбар выполнения макроса в ячейке
 
Добрый вечер! Как можно реализовать в ячейке прогрессбар выполнения макроса?
Добавление новой строки при выборе значения из выпадающего списка
 
Доброй ночи! Как сделать добавление новой строки при выборе из выпадающего списка значения ниже? Строка должна добавляться ниже, но перед подписью (пример прилагаю)

В добавленной строке также должна быть возможность выбирать в ячейке из выпадающего списка значения.
Выполнить макрос при закрытии книги
 
Доброй ночи! Как при закрытии книги или вызова команды "Сохранить как" для сохранения в отдельную книгу запустить выполнение нескольких макросов, вывести сообщение, что идет сохранение и только после завершения работы макросов создать новую книгу.
макрос объединения ячеек с последующей их нумерацией автоматической
 
Доброго  дня! Подскажите пожалуйста макрос объединения ячеек с последующей их нумерацией автоматической.

Есть в ячейке выпадающий список с числами. При выборе нужного значения в столбце должно происходить объединение ячеек на длину всего столбца на количество ячеек, выбранных в выпадающем списке.
И автоматически пронумероваться.
Выпадающий список в ячейках с возможностью дальнейшего редактирования
 
Добрый вечер! Как подобное можно реализовать? Есть два листа. На одном листе столбец со строками заполненными.
На другом листе в столбце нужно выбрать ячейку и при клике по ней должен появиться выпадающий список в самой ячейке, содержимое которого берется как раз со столбца выше указанного листа.
После выбора значения из списка должна быть возможность для дальнейшего редактирования ячейки. Также после редактирования должна быть кнопочка в ячейке, с помощью которой можно добавить введенное значение в тот самый список.
После перехода на ячейку ниже в выше расположенной кнопчки добавления и списка должны скрываться.

Как подобное можно  реализовать?
Формула для поиска по словосочетаниям в ячейке
 
Доброй ночи! Подскажите формулу пожалуйста. Пример таблицы прикладываю.

Таблица состоит из двух листов. На листе параметры указаны словосочетания, по которым необходимо проводить поиск.
На листе таблица необходимо во втором столбце проверить на наличие словосочетаний, указанных в листе настройка и при их нахождении подставить время из первого столбца в столбцы 3 и 4.
В столбец 3 при нахождении словосочетаний из параметры 1, а в столбец 4 при нахождении из параметры 2.

Поиск должен осуществляться именно по первому вхождению найденного словосочетания.

Нашел вот такой пример https://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=8&TID=44285
Но он громоздкий слишком. Спасибо заранее.
Подскажите формулу для создания дублей через строку
 
Добрый день, уважаемые форумчане!!!
Не судите строго, просто толком не знаю как правильно описать нужную формулу, но все же попытаюсь.
Есть таблица с данными по метрам. Первая часть таблицы идет через каждые 10 метров (в приложенном файле выделил желтым цветом), а потом через каждые 5 метров (выделил оранжевым цветом). Нужна формула, которая бы на новом листе подтягивала данные с первого листа, но полностью через каждые 5 метров. Т.е. выделенное желтым цветом должно стать через каждые 5 метров.
На листе 1 отображено как есть в данный момент, а на листе 2 как должно получиться.
Подскажите макрос копирования диапазона со смещением
 
Необходим макрос копирования с листа на лист диапазона ячеек со смещением.

1. Диапазон ячеек на лист1
2. Кнопка для копирования
3. После нажатия на кнопку поиск последней заполненной строки (можно по Range)
4. копирование ниже последнего заполненного диапазона с лист1
Какая формула для подстановки данных с одного листа в другой с эффектом накопления?
 
Здравствуйте, уважаемые форумчане! Подскажите пожалуйста формулу, которая копирует значения с диапазона одного листа в другой, но с эффектом накопления. То есть на первом листе вводится в диапазон определенные значения и они на другом листе подставляются в тот же диапазон. После обновляются значения на первом листе и уже на втором листе они подставляются ниже последней заполненной ячейки данного диапазона.
Объединение массива в строку с добавлением API ключа, код PHP в VBA
 
Добрый день! Как переделать код PHP под VBA?

Код
function Signature( $params, $api_key )
{
$params = array(
    'timestamp' => '1501052684',
    'login'     => 'YourLogin',
    'phone'     => '0',
    'sender'    => 'smstest'
    'text'      => 'Long text'
);

//сортировка по алфавиту
    ksort( $params );
    reset( $params );
 
//преобразовывание результата сначала в строку, потом в md хеш
    return md5( implode( $params ) . $api_key );
}


В результате получится YourLogin0smstestLong text1501052684. В конец строки добавить $api_key.
Изменено: Medvedoc - 26.07.2017 13:35:56
Видимость элементов формы при ее прозрачности
 
Здравствуйте! Подскажите пожалуйста, как можно сделать форму прозрачной, но при этом чтобы элементы самой формы были видимыми. В интернете много примеров по прозрачности формы, но при этом все элементы на ней тоже становятся прозрачными.
VBA: ошибка при передае названия формы в процедуру
 
Добрый день! Подскажите как побороть ошибку передачи имени формы в процедуру Userform
Код
Private Sub UserForm_Initialize()
        Dim FormName
        FormName = UserForm.Name
        
        Dim FormArray As Variant
        FormArray = Array(Add.Name, Edit.Name, Del.Name)
       
        Procedure FormName, FormArray
End Sub

Процедура
Код
Sub Procedure (FormName, FormArray)
    Dim i As Integer
    For i = 0 To 2
    FormName.Controls(FormArray(i)).BackColor = RGB(333, 111, 222)
    Next
End Sub

Ругается на эту строку FormName.Controls(FormArray(i)).BackColor = RGB(333, 111, 222), а если быть точнее на FormName
Выдает ошибку Object required. Как же правильно передать имя формы в процедуру?
VBA. Как перебрать массив из названий элементов формы и подставить значения?
 
Всем доброго дня. Есть Userform с 3 image (элементы) - Image1, Image2, Image3
Как мне перебрать их массивом и подставить каждоум свойство BackColor = RGB (255, 255, 255)

Если ставлю так Image1.BackColor = RGB (255, 255, 255), то фон становится данного цвета
Код
Dim MyArray aS Variable
Dim I As Intager

en = MyArray(Image1.Name, Image2.Name, Image3.Name)
For I=0 To en(I)
       en(I)&".BackColor" = RGB (255, 255, 255)
Next I

При выполнении подобного кода ничего не происходит. Как правильно сделать подобное?
Изменено: Medvedoc - 27.05.2017 23:48:45
Страницы: 1 2 3 След.
Наверх