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

Страницы: 1 2 След.
VBA RegEx макрос для .docx (или для строки в ячейке Excel), Замена значений в тексте
 
Да, я не мог понять, что Replace не производит замену в исходном, анализируемом тексте "documentText", а стало быть, натыкается в последующем на ранее найденные ref[*]ref и проводит итерацию i = i +1 но без преобразования значения. Это я смог понять после Вашего поста о "одинаковых ссылках". Уже думал создавать массив с "ранее встречавшимися" ссылками, с последующей проверкой.
Да, это решает проблему, вопрос закрыт:
Цитата
написал:
1If InStr(s, m) Then i = i + 1: s = Replace(s, m, "[" & i & "]")
Еще раз, огромное человеческое спасибо, Вы очень и очень выручили!!!!
VBA RegEx макрос для .docx (или для строки в ячейке Excel), Замена значений в тексте
 
Цитата
написал:
это не ошибка
это ОТСУТСВИЕ обьяснений задачи
где должно быть человеческим языком сказано что делать если в данных есть одинаковые ссылки
все что вы не обьяснили, но очень сильно об этом думали - осталось в ваших мыслях и ни одним словом не коснулось меня
исправляйте самостоятельно)
Вот именно что предусмотрел, даже дважды в тексте отобразил.

Первый раз:

"необходимо найти первый фрагмент, заключенный между служебными словами ref и заменить такой фрагмент во всем тексте на [1] и т.д."

Внимание вопрос (глядя на эту фразу), ссылка может встречаться в тексте более чем один раз?

А второй раз даже пример привел, если Вы вдруг не заметили, аккурат с "одинаковыми ссылками":

Было: ref[ivanov-14]ref, тут текст ref[!VasilyevMA]ref еще текст [text], ref[ivanov-14]ref
Стало: [1], тут текст [2] еще текст [text], [1]

Тем не менее, просто по человечески благодарю за проявленный интерес к проблеме.
Изменено: taxol - 02.12.2022 15:10:59
VBA RegEx макрос для .docx (или для строки в ячейке Excel), Замена значений в тексте
 
Большое спасибо за ответ! Дело в том, что как и в моем случае, возникает ошибка.
Получается [1],[2],[3],[7] вместо [1],[2],[3],[4]
Изменено: taxol - 02.12.2022 00:42:59
VBA RegEx макрос для .docx (или для строки в ячейке Excel), Замена значений в тексте
 
Задача решена практически на 99%, для этого пришлось все ссылки обрамить служебными словами:  ref[ссылка]ref,
однако зачастую программа "проскакивает" некоторые элементы и в результате нарушается порядок: [1], [2], [4], [5] ...
Не мог бы кто-нибудь подсказать, как пофиксить баг?
Код
Sub findTest()
    Application.ScreenUpdating = False
    Dim firstTerm As String
    Dim secondTerm As String
    Dim myRange As Range
    Dim documentText As String

    Dim startPos As Long 'Stores the starting position of firstTerm
    Dim stopPos As Long 'Stores the starting position of secondTerm based on first term's location
    Dim nextPosition As Long 'The next position to search for the firstTerm
    Application.ScreenUpdating = False
    nextPosition = 1
    'Get all the document text and store it in a variable.
    Set myRange = ActiveDocument.Range

    documentText = myRange.Text
    i = 1
    With Selection.Find
    
        Do While .Execute(FindText:="ref[")
            Selection.HomeKey Unit:=wdStory
    'First and Second terms as defined by your example.  Obviously, this will have to be more dynamic
    'if you want to parse more than justpatientFirstname.
            firstTerm = "ref["
            secondTerm = "]ref"
            
            startPos = InStr(nextPosition, documentText, firstTerm, vbTextCompare)
            stopPos = InStr(startPos, documentText, secondTerm, vbTextCompare)
            myString = Mid$(documentText, startPos + Len(firstTerm), stopPos - startPos - Len(firstTerm))
            myString2 = "ref[" & myString & "]ref"
            nextPosition = InStr(stopPos, documentText, firstTerm, vbTextCompare)

    
            myRange.Find.Execute FindText:=myString2, ReplaceWith:="[" & i & "]", Replace:=wdReplaceAll
     
            i = i + 1
        Loop
    End With
    Application.ScreenUpdating = True
        
End Sub
VBA RegEx макрос для .docx (или для строки в ячейке Excel), Замена значений в тексте
 
Всем доброго времени суток. Прошу помощи в написании макроса.
Имеется огромный документ, в котором наименование источников необходимо привести к "ссылочному" варианту. Вручную перебирать более 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
Изменено: taxol - 29.11.2022 10:24:10
VBA борьба с вложенными циклами, Вызов процедуры проверки из кода программы.
 
Добрый день! В процессе написания кода часто сталкиваюсь с одной проблемой: приходится использовать процедуру проверки введенных оператором в таблицу значений, (численное/строковое значение, больше или меньше определенного значения и т.п.). При этом приходится использовать цикл IF, в результате чего
образуется множество вложенных циклов. Читабельность кода резко снижается.
В показанном ниже по тексту примере, если условие не выполняется, выходим из процедуры Sub procedure(). Но нельзя ли вызвать отдельную процедуру Sub check() в рамках которой проверить выполнение условия, и если оно не выполняется, завершить Sub procedure(). Помимо прочего, возможно Вам известны интересные варианты с передачей параметров из основного метода в check; использованием значений счетчиков (полученных в результате работы циклов) и т.п. Буду благодарен за любые предложения, интересные примеры, ссылки, лайфхаки.
Код
 Sub procedure()
If range("A1").Value=1 Then
MsgBox("значение равно единице")
else
Exit Sub
End If
End Sub
Изменено: taxol - 12.06.2022 11:05:29
VBA Передать имя рабочего листа из списка
 
Доброго времени суток!
В листе "Лист1", диапазона A1:A находятся некоторые имена листов активной рабочей книги. Например, Range("A3").Value="Лист5"
Как "прогнать макрос" (любое действие) только по тем рабочим листам, имена которых располагаются в диапазоне A1:A листа Лист1?
VBA Range().Find(), Поиск
 
Очепятался, спасибо, проблема решена.
Изменено: taxol - 28.04.2022 01:52:12
VBA Range().Find(), Поиск
 
Всем доброго дня. Имеется не сложный скрипт. Если я правильно понимаю, проблема в представлении типа данных. "даты" никак не хочет искать.
Код
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
Изменено: taxol - 28.04.2022 00:01:49
VBA перебор книг в каталоге с внесением изменений
 
Благодарю за содействие, все прекрасно работает. Не подскажете, есть ли разница: использовать в решении объект файловой системы fso или решать задачу через Dir?
Изменено: taxol - 02.11.2021 13:07:07
VBA перебор книг в каталоге с внесением изменений
 
Всем доброго времени суток!
В каталоге имеется набор файлов-рабочих книг в формате .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
Изменено: taxol - 02.11.2021 08:42:26
Создание консолидированной таблицы данных (отсортированных по дате) со всех рабочих листов книги
 
Grand merci !
Изменено: vikttur - 17.09.2021 09:47:45
Создание консолидированной таблицы данных (отсортированных по дате) со всех рабочих листов книги
 
Всем доброго времени суток!
Синонимичные темы несколько отличаются в реализации, поэтому решил создать новую тему.
На всех рабочих листах книги, в колонках B и D, начиная с третьей строки, располагаются данные: фамилия - дата рождения.
Необходимо в сводной таблице на листе "result" отобразить те же данные, только предварительно отсортировать по дате.
Заранее благодарю за содействие.
Изменено: vikttur - 17.09.2021 00:10:16
Разрядность числа как у числа из соседней ячейки
 
Премного благодарен всем отписавшимся по теме. Отдельное спасибо tolikt и БМВ за решение вопроса, все работает.
Я счёл некорректным прикреплять к письму громоздкие рабочие книги с бесчисленными связями; "заливать" это правилами округления, порядком значащих цифр, суммой квадратов ошибок, приписанными значениями, нормами точности измерений и т.п., поэтому прошу прощения за некоторую сумятицу, которая могла возникнуть при восприятии задачи. Если "в двух словах", то следуя одной МВИ, результат от 1,00 до 4,99 мг/л записываем до двух знаков после запятой (равно как и погрешность), от 5,0 до 14,9 с одним, свыше 15 - округляем до целого. Однако имеется множество методик с разными диапазонами, поэтому не стал конкретизировать.  
Изменено: taxol - 29.04.2021 11:20:15
Разрядность числа как у числа из соседней ячейки
 
Цитата
Андрей_26 написал:
Зачем себе создавать головную боль?)))
Уже совсем другой вопрос, "зачем это нужно". Чётко поставлен вопрос: "как это реализовать?" Но если принципиально важно, то существует требование методики выполнения измерений, в любой из ячеек столбца A или B может быть хоть 0,266 (и тогда разницу в "C" нужно будет округлить до третьего знака после запятой), а может быть 2,8 (и тогда придется разницу округлять до первого знака после запятой).
Изменено: taxol - 29.04.2021 00:38:08
Разрядность числа как у числа из соседней ячейки
 
Всем доброго времени суток!
В приведенном примере, в колонках А и B исходные значения, в колонке С результат (построчная разность). В случае если разрядность чисел из столбцов A и B одинакова, как "разницу" отображать с той же разрядностью? Например: (8-7=1); (8,1-7,1=1,0); (1,20-1,10=0,10). Пытался использовать ДЛСТР(A1)-ПОИСК(",";A1) однако возникает "затык" с целочисленными значениями
Получить имя листа из ячейки и использовать при выборе данных
 
Цитата
Jack Famous написал:
не нашёл
*во вложении

Как оказалось, функция "ряд()" не является стандартной функцией листа и поэтому невозможно использовать сторонние функции в качестве аргументов. А макросы в данном конкретном случае использовать нежелательно.
Если кому-то понадобится, в приложении "пример3", в нем мое решение: выбираем на вкладке "результат" выпадающим списком нужный лист, функция "ДВССЫЛ" переносит необходимые данные для формирования таблицы на вкладку "доплист", после чего в "результате" наблюдаем нужный график.
Изменено: taxol - 04.03.2021 05:14:44
Получить имя листа из ячейки и использовать при выборе данных
 
К сожалению вариант не работает, как Вы и просили, переделал пример с функцией "=РЯД()" Переменная - "лист1" или "лист3" должна располагаться в AB2. Ожидаемый результат - горизонтальная линия в области построения на уровне 1,5 (лист1) или 2(лист3)
За решение, однозначно,донат.
Изменено: taxol - 03.03.2021 11:20:38
Получить имя листа из ячейки и использовать при выборе данных
 
Благодарю за ответ!
Утром я использовал предложенный вариант:
=РЯД("Верхний предел действия"; ДВССЫЛ(AB2 &"!$A$24:$A$912); ДВССЫЛ(AB2 &"!$O$24:$O$912);1)
Однако все равно выходит "неверная функция"
Но если Вы намекаете на знак равенства, то изначально вызывается функция "РЯД", тут "ДВССЫЛ" придется использовать внутри процедуры, как например в варианте из https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=37333 =ВПР(A:A;ДВССЫЛ("'[" & A1 & "]" & A2 & "'!$A:$B");2;0) где "ДВССЫЛ" вызывается внутри "ВПР".
Изменено: taxol - 03.03.2021 09:37:29
Получить имя листа из ячейки и использовать при выборе данных
 
В прикрепленном примере во вкладке "результат" используется формула =РЯД("Верхний предел действия";лист1!$A$24:$A$912;лист1!$O$24:$O$912;1)
Хотелось бы чтобы формула использовала имя листа (лист1, лист2...) из ячейки AB2. Не пойму в чем ошибка, все перепробовал.

Вариант:
=РЯД("Верхний предел действия";ДВССЫЛ(AB2&"!"&$A$24:$A$912);ДВССЫЛ(AB2&"!"&$O$24:$O$912);1)
не работает

Ума не приложу, почему не получается. Вопрос для меня чрезвычайно важный, прошу не закидывать камнями) Всех благодарю за содействие.
Изменено: taxol - 03.03.2021 07:36:33
Получить имя листа из ячейки и использовать при выборе данных
 
Большое спасибо. Таким образом, если имя листа записано в ячейке AB2, получится...
было:
Код
=РЯД("Верхний предел";'стандарт'!$A$24:$A$912;'стандарт'!$O$24:$O$912;6)

стало:
Код
=РЯД("Верхний предел";ДВССЫЛ(AB&"!"&2)!$A$24:$A$912;ДВССЫЛ(AB&"!"&2)!$O$24:$O$912;6)
Получить имя листа из ячейки и использовать при выборе данных
 
Добрый день!
При построении всевозможных графиков, для выбора данных используются формулы навроде:
Код
 =РЯД("Верхний предел";'стандарт'!$A$24:$A$912;'стандарт'!$O$24:$O$912;6)

Понятно что 'стандарт' это имя листа. При появлении стандарта1 приходится вручную изменять имя листа во всех формулах (их больше 30).

Можно ли вместо 'стандарт' прописать путь к ячейке, в которой будет находиться значение имени листа, чтобы это имя автоматически вставлялось вместо ;'стандарт' по всем формулам?

Вероятно как-то можно применить ДВССЫЛ: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=37333
VBA нахождение суммы чисел в столбце между разграниченными строками, пользовательская функция, нахождение суммы чисел между строками, имеющими выделенные границы
 
Благодарю за решение! Единственное, необходимо считать сумму между границами выше даты (так как текущая дата еще заполняется и по ней сумма будет произведена в момент, когда наступит следующая.
VBA нахождение суммы чисел в столбце между разграниченными строками, пользовательская функция, нахождение суммы чисел между строками, имеющими выделенные границы
 
Всем доброго здравия!
Можно ли создать пользовательскую функцию, выполняющую следующую работу (с автообновлением при внесении данных):
Как только в столбце "А" появляется значение даты, верхняя граница этой строки (нижняя вышестоящей офк), приобретает выделение в диапазоне столбцов "A-J" и происходит расчет суммы чисел, находящихся между границами. Пример с затравкой макроса во вложении.
Заранее благодарю за содействие.
Найти разницу между несколькими ячейками "приход" и "расход" построчно
 
Цитата
vikttur написал:
=A2+C2-(B2+D2)
В оригинальном документе большое количество столбцов, режет глаз "А4+C4+D4...". Вот и подумал, нельзя ли что-нибудь простенькое запилить, без применения сложных формул а наоборот, навроде "приход"-"расход", только построчно. Мало ли, вдруг существует виртуозное решение)) Всем спасибо за проявленный интерес к теме. Большое спасибо за приведенные формулы.
Изменено: taxol - 21.10.2020 12:28:45
Найти разницу между несколькими ячейками "приход" и "расход" построчно
 
Всем доброго времени суток!
Необходимо найти разницу между именованными элементами "приход" и "расход" построчно.
Благодарю за содействие
VBA открыть (если закрыт)/развернуть(если свернут) документ.
 
Ув. New, большое человеческое спасибо!
VBA открыть (если закрыт)/развернуть(если свернут) документ.
 
Имеется простой макрос, привязанный к кнопке. При нажатии - открытие документа, наименование которого расположено в ячейке А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

Вариант нерабочий. Прошу помочь с доработкой.
VBA Извлечь даты из комментария к ячейке
 
Благодарю за помощь.
VBA Извлечь даты из комментария к ячейке
 
Большое спасибо. Все работает как часы. Позвольте всего один вопрос (изучаю регулярные выражения, каверкая Ваш макрос))). Если применить приведенный Вами макрос с измененным паттерном .Pattern = "\d+\.\d+\." к вышеприведенному комментарию "дата: 05.09.2020 начало: 05.09.2020 суббота окончание: 06.09.2020 суббота" , получается  результат: "начало: 05.09. окончание: 06.09."
Однако с комментарием "начало: 05.09.2020 окончание: 06.09.2020" выдает ошибку.
Заранее благодарю за содействие.
Страницы: 1 2 След.
Наверх