Добрый день! Имеется диапазон, в котором первый столбец названия, второй и третий - данные дат со временем, последний - разница между датами начала и конца. Как сделать так, чтобы если разница больше диапазона от начала суток и до конца, то разделить значения на дополнительные строки. Пример в приложенном файле.
Добрый вечер! Есть два столбца со значениями. В столбце 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
Добрый вечер, форумчане! Прошу Вашей помощи в вопросе:
Как с помощью макросов можно перенести строки указанного диапазона дат на другой лист, там отредактировать (удалить, изменить, добавить строки), а потом заменить изначальный вариант данного диапазона на отредактированный на основном листе? При этом строки содержать формулы, которые должны оставаться рабочими.
Имеется таблица (файл прилагается), в которой вводятся в одном и том же диапазоне построчно цифровые данные. Как сделать так, чтобы при соответствии вводимых данных в диапазон строки при идентичном соответствии диапазону вышерасположенной строки происходило автоматическое объединение соседних текущей ячейки и вышерасположенной?
Добрый день, форумчане! Подскажите как правильно вывести в userform время. На данный момент забираю время из ячейки и вывожу его на форму. Но вот разница в том, что в ячейке она отображается нормально, а в форме нет. Время показывается в ячейке больше суток, например 42:10, а в форме выводится 18:10 То есть получается выводит время в форме только до суток.
Добрый вечер, уважаемые форумчане!!!! Подскажите комбинированный макрос для работы с файлами. Данный макрос должен: 1. подгружать данные из внешнего текстового файла 2. при внесении новых данных автоматически или с небольшой задержкой или по кнопке сохранять новые данные в данный файл
То есть надо, чтобы сами данные хранились во внешнем файле и только подгружались при открытии книги, а при закрытии выгружались и хранились только во внешнем файле.
Добрый вечер! Как можно привязать кнопку 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
Имеется диапазон, в который вводятся по датам предупреждения. На одну дату может быть несколько предупреждений, каждое из которых вносится с новой строки. Как просуммировать одинаковые предупреждения и с остальными предупреждениями перенести за соответствующую дату в другой диапазон и все проставить в одну строку? Образец приложил.
Доброй ночи! Как можно сделать так, чтобы вводимые данные в автоматическом режиме сохранилясь в закрытую книгу? Таблицы идентичны что в рабочей, что в закрытой книгах. Просто надо, чтобы при вводе значений они автоматически сохранялись в закрытую книгу
Всем доброго утра! Имеется некий диапазон, в котором первый столбец содержит даты. Каждой дате соответствует строка с данными. Но таких строк может быть несколько. В результате одинаковая дата у последующих строк не проставляется. Фильтрация производится по "Базе записей" и выводится результат в таблицу "Результат фильтрации".
На листе "Оригинал" приведена работа формул, которые фильтруют данные, но не учитывают строки, у которых дата аналогичная не проставляется. А на листе "Костыль" привел пример работы формул через костыли. Добавил дополнительный столбец, в котором через формулы заполняю опущенные по умолчанию даты и выполняю фильтрацию уже по данному столбцу. Но данный способ немного нерационален. Может кто сможет подсказать как обойти в первом варианте вывод результатов с данными пробелами по датам?
Добрый вечер! Уважаемые форумчане! Имеется диапазон с данными, из которых делается выборка данных между двумя датами. Вроде все работает, но вот если одной дате соответствует несколько строк и она по умолчанию не проставляется, то выбирается только первая строка данной даты. А необходимо, чтобы если данная дата должна выводиться, то и все строки соответствующие ей выводились. Пример с файлом приложил.
И второй момент - каким образом добавить выборку не только по дате, но чтобы и время участвовало в выборке из столбца "Время начала"?
Добрый день! Как сделать в зависимых выпадающих списках автоматическое переключение зависимого списка? Рассматривал пример https://www.planetaexcel.ru/techniques/1/38/ Если я выбираю в начальном списке нужную категорию, то в зависмом списке остается значение от первоначального варианта. Как сделать так, чтобы он заменялся на первое значение из выбранной категории?
Как выполнить поиск в строке по списку слов заданного диапазона с последующим выводом заголовка данного диапазона в соседней строке", Поиск по словам из диапазона в строке с последующим выводом заголовка диапазона в соседней строке
Имеется вкладка "Настройка" с диапазонами по группам и есть вкладка с таблицей данных. Необходимо каждую строку брать, перебирать содержимое группы настройки на присутствие слов в данной строке и при нахождении в соседнем столбце проставлять название данной группы. Реализовать получилось, но формула получается грамоздкой. Приложил пример. Как оптимизировать формулу, чтобы она не была грамоздкой?
Добрый вечер! Есть таблица вопросов и ответов, которые расположены блоки на странице исходные данные. Как вывести на странице преобразованные данные в таблицу с готовыми ответами? Файлы примера прикладываю.
Доброй ночи! Как сделать добавление новой строки при выборе из выпадающего списка значения ниже? Строка должна добавляться ниже, но перед подписью (пример прилагаю)
В добавленной строке также должна быть возможность выбирать в ячейке из выпадающего списка значения.
Доброй ночи! Как при закрытии книги или вызова команды "Сохранить как" для сохранения в отдельную книгу запустить выполнение нескольких макросов, вывести сообщение, что идет сохранение и только после завершения работы макросов создать новую книгу.
Доброго дня! Подскажите пожалуйста макрос объединения ячеек с последующей их нумерацией автоматической.
Есть в ячейке выпадающий список с числами. При выборе нужного значения в столбце должно происходить объединение ячеек на длину всего столбца на количество ячеек, выбранных в выпадающем списке. И автоматически пронумероваться.
Добрый вечер! Как подобное можно реализовать? Есть два листа. На одном листе столбец со строками заполненными. На другом листе в столбце нужно выбрать ячейку и при клике по ней должен появиться выпадающий список в самой ячейке, содержимое которого берется как раз со столбца выше указанного листа. После выбора значения из списка должна быть возможность для дальнейшего редактирования ячейки. Также после редактирования должна быть кнопочка в ячейке, с помощью которой можно добавить введенное значение в тот самый список. После перехода на ячейку ниже в выше расположенной кнопчки добавления и списка должны скрываться.
Доброй ночи! Подскажите формулу пожалуйста. Пример таблицы прикладываю.
Таблица состоит из двух листов. На листе параметры указаны словосочетания, по которым необходимо проводить поиск. На листе таблица необходимо во втором столбце проверить на наличие словосочетаний, указанных в листе настройка и при их нахождении подставить время из первого столбца в столбцы 3 и 4. В столбец 3 при нахождении словосочетаний из параметры 1, а в столбец 4 при нахождении из параметры 2.
Поиск должен осуществляться именно по первому вхождению найденного словосочетания.
Добрый день, уважаемые форумчане!!! Не судите строго, просто толком не знаю как правильно описать нужную формулу, но все же попытаюсь. Есть таблица с данными по метрам. Первая часть таблицы идет через каждые 10 метров (в приложенном файле выделил желтым цветом), а потом через каждые 5 метров (выделил оранжевым цветом). Нужна формула, которая бы на новом листе подтягивала данные с первого листа, но полностью через каждые 5 метров. Т.е. выделенное желтым цветом должно стать через каждые 5 метров. На листе 1 отображено как есть в данный момент, а на листе 2 как должно получиться.
Необходим макрос копирования с листа на лист диапазона ячеек со смещением.
1. Диапазон ячеек на лист1 2. Кнопка для копирования 3. После нажатия на кнопку поиск последней заполненной строки (можно по Range) 4. копирование ниже последнего заполненного диапазона с лист1
Здравствуйте, уважаемые форумчане! Подскажите пожалуйста формулу, которая копирует значения с диапазона одного листа в другой, но с эффектом накопления. То есть на первом листе вводится в диапазон определенные значения и они на другом листе подставляются в тот же диапазон. После обновляются значения на первом листе и уже на втором листе они подставляются ниже последней заполненной ячейки данного диапазона.
Здравствуйте! Подскажите пожалуйста, как можно сделать форму прозрачной, но при этом чтобы элементы самой формы были видимыми. В интернете много примеров по прозрачности формы, но при этом все элементы на ней тоже становятся прозрачными.
Добрый день! Подскажите как побороть ошибку передачи имени формы в процедуру 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. Как же правильно передать имя формы в процедуру?
Всем доброго дня. Есть 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
При выполнении подобного кода ничего не происходит. Как правильно сделать подобное?