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

Страницы: 1
проблема с регулярным выражением для поиска одиночных символов по условию
 
Добрый день!
Столкнулся с задачей по поиску  прямых слешей в строке.
Условия:
  • Слева от него не стоит /
  • Справа от него не стоит /
  • Последовательность состоит из одного слеша: /
На python все решается через отрицательную негативную проверку:
Код
(?<!/)/(?!/)
Но в VBA нет отрицательной проверки.
Прошу подсказать, в каком направлении идти.
Заранее Всем большое спасибо!
Алгоритм перестановок. Возможно-ли ускорить код?
 
Всем привет!
Написал рекурсивный алгоритм перестановок.
Навеяло из этой темы.
Существуют ли более быстрые варианты реализации? Что можно почитать по этой теме?

Код:
Код
Sub main()
Dim arr, fact As Long, res(), s, t
' основная процедура
arr = Application.Transpose(Application.Transpose([A1:G1]))
t = Timer
s = permutations(arr, 1, res(), 1)
Debug.Print Timer - t
End Sub
Private Function swap(arr, a, b) As Variant
Dim s
' функция обмена переменными в массиве
s = arr(a)
arr(a) = arr(b)
arr(b) = s
swap = arr
End Function
Private Function permutations(arr, j, res(), k) As Variant
Dim i
' функция генерации перестановок
If j = UBound(arr) Then
    ReDim Preserve res(1 To k)
    res(k) = Join(arr, " ")
    k = k + 1
Else
    For i = j To UBound(arr)
        arr = swap(arr, j, i)
        permutations = permutations(arr, j + 1, res(), k)
        arr = swap(arr, j, i)
    Next i
End If
permutations = res
End Function

Всем большое спасибо!
обновление таблицы SQL запросом из другой книги Excel
 
Всем привет!
Столкнулся с проблемой: при обновлении записи в текущей книге из другой книги вложенный SQL запрос вызывает ошибку "запрос должен быть обновляемым".
Решил через еще один SQL запрос и объкт Recordset.
Прикрепил 2 книги Get и DB. DB - откуда брать данные для обновления, Get - куда вставлять
Всем большое спасибо!
Код :
Код
Sub Update_table()
Dim myConnect As Object, mySQL As String, myRecord As Object
Dim DataRange As String, strAddress As String, wshTarget As Worksheet
    strAddress = ActiveWorkbook.Sheets(1).Cells(1, 1).CurrentRegion.Address(0, 0)
    DataRange = "'" & ActiveWorkbook.FullName & "'.'" & ActiveWorkbook.Sheets(1).Name & "$'"
    Set myRecord = CreateObject("ADODB.Recordset")
    Set myConnect = CreateObject("ADODB.Connection")
    myConnect.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
           "Data Source=" & ThisWorkbook.Path & "\DB.xlsx;" & _
           "Extended Properties=""Excel 12.0;HDR=YES"""
    ' выбираем по критерию из книги DB.xlsx
    mySQL = "SELECT F2 FROM [Лист1$] WHERE [Data]=1"
    myRecord.Open mySQL, myConnect
    ' обновляем таблицу в книге с макросом
    mySQL = "UPDATE [" & ThisWorkbook.FullName & "].[Лист1$] SET F2=" & myRecord.Fields.Item(0).Value & " WHERE [Data]=1"
    myConnect.Execute mySQL
    
    myRecord.Close
    myConnect.Close
    
    Set myConnect = Nothing
    Set myRecord = Nothing
End Sub

' хотелось бы что-то такого: "UPDATE t_1 Set F2=(SELECT F2 FROM t2 WHERE [Data]=1) WHERE [Data=1]"

Изменено: artemkau88 - 04.05.2022 11:29:56
Способы определения языка строки VBA
 
Всем привет!

Есть ли способ определения языка строки средствами VBA?
Например в коде есть 2 строки, которые нужно сравнить по языку (одинаковы ли языки двух строк)
В файле примере 2 ячейки для сравнения. В первой ячейке первая буква английская, вторая вся на русском.

Всем большое спасибо!
Изменено: vikttur - 26.08.2021 12:02:06
Регулярные выражения. Метасимволы. Поиск наиболее полного руководства
 
Всем привет!

Только начал разбираться с регулярками. Наваял гигантский код, спасибо msi2102
Код
Sub Regulyarki()
Dim objRegexp As RegExp, myMatch As Match, colMatches   As MatchCollection
Dim i, k, myStr As String, CompStr As String, NewStr As String

Set objRegexp = New RegExp
objRegexp.Global = True
objRegexp.IgnoreCase = True
i = 1
myStr = CStr(Cells(1, 1))

While i < Len(myStr)
i = i + 1
    objRegexp.Pattern = "" & Mid(myStr, i, 1) & "(" _
                        & Mid(myStr, i, 1) & "){1,}"
            Set colMatches = objRegexp.Execute(myStr)
            For k = 0 To colMatches.Count - 1
                Set myMatch = colMatches.Item(k)
                CompStr = objRegexp.Replace(myMatch, myMatch.SubMatches(0))
                NewStr = Replace(myStr, myMatch, CompStr)
                myStr = NewStr
                Debug.Print NewStr
            Next k
            
Wend

Cells(2, 1) = myStr
End Sub

Но, как оказалось, можно написать короче, как это сделал Jack Famous в этой теме в 9 сообщении:
Код
Set REdd = New RegExp:  REdd.Global = True: REdd.Pattern = "([A-Za-zЁёА-я])(?:\1)+"
If REdd.test(vl) Then vl = REdd.Replace(vl, "$1")

Я понял, что я Лопух, и надо углубляться больше в метасимволы. Что можно почитать по ним в наиболее полном виде?

Большое Всем спасибо!
Изменено: vikttur - 26.06.2021 00:42:40
Удаление дубликатов в строке при помощи регулярных выражений
 
Всем привет!

Разбираюсь с регулярными выражениями. Запихнул строку в массив и ищу совпадения. При каждой итерации присваиваю паттерн и удаляю дубликаты.
Возник вопрос, как в массиве найти следующую букву, и перейти к ней по индексу?

Большое всем спасибо!
Изменено: vikttur - 18.08.2021 23:53:54
можно ли двумерный массив записать в строку?
 
Подскажите, можно ли двумерный массив записать в строку при помощи resize?
Или только циклом, например так:
Код
    For i = LBound(Result, 1) To UBound(Result, 1)
        For k = LBound(Result, 2) To UBound(Result, 2)
            RowTarget = Result(i, k)
            Set RowTarget = RowTarget.Offset(0, 1)
        Next k
    Next i
Добавление элементов в динамический двумерный массив из драгого массива
 
Всем привет!

Никак не могу разобраться с двумерными массивами. Как заполнять двумерный массив с сохранением предыдущих элементов?
Есть код:
Код
Sub Пример()
Dim i, Counter, myArr
Dim Criterial, RowTarget As Range, Result
Criterial = Cells(7, 1)
Set RowTarget = Range("a10")
myArr = Range("h1:j5")
For i = LBound(myArr, 1) To UBound(myArr, 1)
    If myArr(i, 1) = Criterial Then
                Counter = Counter + 1
                If Counter = 1 Then
                    ReDim Result(0, 1)
                Else
                    ReDim Result(UBound(Result), UBound(Result) + 1)

                End If
                Result(UBound(Result), UBound(Result)) = myArr(i, 2)
                Result(UBound(Result), UBound(Result) + 1) = myArr(i, 3)
    End If
Next i
RowTarget.Resize(1, UBound(Result) + 1) = Result

End Sub
Запутался с redim preserve.

Пример во вложении.
Всем большое спасибо!
Вопрос по определению последней строки vba, ActiveSheet.UsedRange.Rows.Count - 1 зачем вычитать единицу?
 
Всем добрый вечер!
Ребята, скажу сразу, только начинаю программировать на vba.
Возник вопрос: для чего в выражении ActiveSheet.UsedRange.Rows.Count - 1 вычитать единицу.
ActiveSheet - активный лист
UsedRange - рабочий диапазон
Rows.Count - количество строк
-1?
Объясните пожалуйста.
Заранее спасибо за ответ.
В интернете нашел: https://www.excel-vba.ru/chto-umeet-excel/kak-opredelit-poslednyuyu-yachejku-na-liste-cherez-vba/
Но что-то не совсем понял объяснение.
Получается -1 нужно для перехода на строку выше.
Всем большое спасибо!
Функция Поиск выводит данные без соответствия, Функция Поиск выводит данные без соответствия
 
Добрый день!
Подключил БД к книге. В ячейке С2 В Книге1 функцией ДВССЫЛ выбирается список городов.
Есть (в этой же книге) ячейка G2, в которую необходимо подставить адрес, выбранный в ячейке С2.
Для этого использовал функцию ПОИСК.
Причем даже при копировании адресов на отдельный лист с листа с бд, пишет неверный адрес.
создание выпадающего списка из закрытой книги Excel
 
Добрый вечер, ребята!

Недавно просмотрел на этом сайте создание списка при помощи ДВССЫЛ, которая ссылается либо на лист, либо на открытую книгу.
Возник вопрос можно ли сделать одной строкой через формулу список из закрытой книги?

Прошу помочь решить проблему.
Как привязать элемент формы combobox к значениям из листа книги
 
Добрый день!
Подскажите пожалуйста, как привязать элемент формы combobox к значениям из листа книги?
И какие материалы почитать для новичка.

Заранее спасибо за ответ.
Страницы: 1
Наверх