Всем доброго времени суток. Прошу помощи в написании макроса. Имеется огромный документ, в котором наименование источников необходимо привести к "ссылочному" варианту. Вручную перебирать более 1500 источников было бы крайне утомительно, да и задача время от времени возникает.
В документе .docx (хотя задача может быть решена и для текста в ячейке A1 в документе .xlsx) необходимо найти первый фрагмент, заключенный между служебными словами ref и заменить такой фрагмент во всем тексте на [1] и т.д.
Было: ref[ivanov-14]ref, тут текст ref[!VasilyevMA]ref еще текст [text], ref[ivanov-14]ref Стало: [1], тут текст [2] еще текст [text], [1]
Другими словами, произвести замену элементов по всему тексту на порядковые номера, по порядку следования.
Sub ReplaceText()
Application.ScreenUpdating = False
Selection.HomeKey Unit:=wdStory
With Selection.Find
.ClearFormatting
.Replacement.Text = ""
Do While .Execute(FindText:="\[*\]", MatchWildcards:=True)
.Execute FindText:="[[\] ]", MatchWildcards:=True, _
ReplaceWith:="", Replace:=wdReplaceAll, Wrap:=wdFindStop
Loop
End With
Application.ScreenUpdating = True
End Sub
Добрый день! В процессе написания кода часто сталкиваюсь с одной проблемой: приходится использовать процедуру проверки введенных оператором в таблицу значений, (численное/строковое значение, больше или меньше определенного значения и т.п.). При этом приходится использовать цикл IF, в результате чего образуется множество вложенных циклов. Читабельность кода резко снижается. В показанном ниже по тексту примере, если условие не выполняется, выходим из процедуры Sub procedure(). Но нельзя ли вызвать отдельную процедуру Sub check() в рамках которой проверить выполнение условия, и если оно не выполняется, завершить Sub procedure(). Помимо прочего, возможно Вам известны интересные варианты с передачей параметров из основного метода в check; использованием значений счетчиков (полученных в результате работы циклов) и т.п. Буду благодарен за любые предложения, интересные примеры, ссылки, лайфхаки.
Код
Sub procedure()
If range("A1").Value=1 Then
MsgBox("значение равно единице")
else
Exit Sub
End If
End Sub
Доброго времени суток! В листе "Лист1", диапазона A1:A находятся некоторые имена листов активной рабочей книги. Например, Range("A3").Value="Лист5" Как "прогнать макрос" (любое действие) только по тем рабочим листам, имена которых располагаются в диапазоне A1:A листа Лист1?
Всем доброго дня. Имеется не сложный скрипт. Если я правильно понимаю, проблема в представлении типа данных. "даты" никак не хочет искать.
Код
Sub primer1()
Dim myPhrase As Variant, myCell As Range
myPhrase = myPhrase = Range("A7").Value
myPhrase = CDate(myPhrase)
Set myCell = Range("F8:F17").Find(myPhrase)
If Not myCell Is Nothing Then
MsgBox "Адрес: " & myCell.Address
Else
MsgBox "фраза не найдена"
End If
End Sub
Всем доброго времени суток! В каталоге имеется набор файлов-рабочих книг в формате .xlsx. Имена книг могут принимать разные значения. Из ячейки A26 рабочей книги (C:\Users\1\Desktop\вставляем_номер.xlsx) необходимо перенести значение в ячейку А26 для каждой рабочей книги из каталога (C:\Users\1\Desktop\вставить). Можно ли открывать по порядку каждую рабочую книгу, в реализации цикла For Each? В приведенном коде возникает ошибка, т.к. не правильно реализован open файлов. Прошу помощи в исправлении ошибки. P.S. Какие методы лучше использовать для решения подобных задач?
Код
Sub Number()
Workbooks.Open Filename:="C:\Users\1\Desktop\вставляем_номер.xlsx"
Workbooks("вставляем_номер.xlsx").Worksheets("Лист1").Cells(1, 26).Copy
Dim bookconst As Workbook
Dim oFile As Object
Dim oFolder As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = FSO.GetFolder("C:\Users\1\Desktop\вставить")
For Each oFile In oFolder.Files
ControlFile = ActiveWorkbook.Open
ActiveWorkbook.Worksheets("Лист1").Cells("A26").Select
ActiveSheet.Paste
bookconst.Save
bookconst.Close
Next
End Sub
Всем доброго времени суток! Синонимичные темы несколько отличаются в реализации, поэтому решил создать новую тему. На всех рабочих листах книги, в колонках B и D, начиная с третьей строки, располагаются данные: фамилия - дата рождения. Необходимо в сводной таблице на листе "result" отобразить те же данные, только предварительно отсортировать по дате. Заранее благодарю за содействие.
Всем доброго времени суток! В приведенном примере, в колонках А и B исходные значения, в колонке С результат (построчная разность). В случае если разрядность чисел из столбцов A и B одинакова, как "разницу" отображать с той же разрядностью? Например: (8-7=1); (8,1-7,1=1,0); (1,20-1,10=0,10). Пытался использовать ДЛСТР(A1)-ПОИСК(",";A1) однако возникает "затык" с целочисленными значениями
Понятно что 'стандарт' это имя листа. При появлении стандарта1 приходится вручную изменять имя листа во всех формулах (их больше 30).
Можно ли вместо 'стандарт' прописать путь к ячейке, в которой будет находиться значение имени листа, чтобы это имя автоматически вставлялось вместо ;'стандарт' по всем формулам?
VBA нахождение суммы чисел в столбце между разграниченными строками, пользовательская функция, нахождение суммы чисел между строками, имеющими выделенные границы
Всем доброго здравия! Можно ли создать пользовательскую функцию, выполняющую следующую работу (с автообновлением при внесении данных): Как только в столбце "А" появляется значение даты, верхняя граница этой строки (нижняя вышестоящей офк), приобретает выделение в диапазоне столбцов "A-J" и происходит расчет суммы чисел, находящихся между границами. Пример с затравкой макроса во вложении. Заранее благодарю за содействие.
Имеется простой макрос, привязанный к кнопке. При нажатии - открытие документа, наименование которого расположено в ячейке А1 на листе с именем "sheet1". Все прекрасно работает:
Код
Sub console_geo()
FilePath = Sheets("sheet1").Cells(1, 1)
Workbooks.Open Filename:=FilePath
End Sub
Однако как мы знаем, при попытке повторного открытия документа появляется сообщение о недопустимости повторного открытия документа и возможной потери данных. Поэтому необходимо изначально проверить, отрыт ли документ. Если он открыт, то просто развернуть на весь экран. Если же он закрыт, то открыть. Выходит что-то вроде:
Код
Sub console_geo()
FilePath = Sheets("sheet1").Cells(1, 1)
If Application.Windows().WindowState = xlMinimized Then Application.Windows().WindowState := xlMaximized
Else
Workbooks.Open Filename:=FilePath
End Sub
Доброго времени суток. Имеется набор комментариев типа: "дата: 05.09.2020 начало: 05.09.2020 суббота окончание: 06.09.2020 суббота" . Необходимо в любую ячейку записать "начало: 05.09.2020 окончание: 06.09.2020". Как можно дополнить код ниже приведенного макроса чтобы преобразовать комментарий?:
Код
Sub reestr()
Function GetComment(rCell As Range) As String
GetComment = rCell.Comment.Text
End Function
Добрый день. Имеется строка в ячейке A1: "Условия проведения измерений, температура градусов по Цельсию." В ячейке A2 находится значение "25". Необходимо при помощи макроса получить: "Условия проведения измерений, температура 25 градусов по Цельсию." По-возможности необходимо сохранить форматирование текста (жирный шрифт и т.д.).
Всем доброго времени суток! В приведенном ниже файле лист поискового запроса "поиск" и сканируемые массивы данных (седан, хэтчбэк) находятся в одном документе. Этот упрощенный (не стал выкладывать всю БД) документ решает задачу: пишем в "желтый квадрат" искомый автомобиль (если он есть в базе), программа выдает результат - объем двигателя.
Необходимо все листы разбить на отдельные документы (три документа), чтобы связь сохранялась, ессн) При этом чтобы в колонке T оставался список с наименованием листов в разных документах, а в колонке U (выделен серо-зеленым) был путь к документам (по названию документа), содержащим эти листы.
Впрочем, если просто удастся разбить на отдельные документы, буду благодарен.
Всем доброго времени суток! Необходимо использовать функцию "если" не вложением (в одну строчку), а разбить все условия по строчкам одного столбца. Во вложенном файле все условия находятся в столбце I. Мы поочередно проверяем, какому из трех условий соответствует значение, находящееся в столбце D и результат записываем в E.