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

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 21 След.
перевод на другой язык, как перевести ячейку, а перевод поместить в соседнюю ячейку
 
Всем привет!
Новая версия тут.
Если исправить опечатку 'Игрушка-антистресс с глиттером "Рыбка" 11см  4в. в/в' (в слове "глиттер" должно быть 2 буквы "т"), то Google работает корректно. Вероятно, это починят. Но а пока не починили добавил сервис MyMemory.
Создать UserForm со скриншотом
 
Также в пост 1 добавил информацию про Коэффициент PixelsToPoints.
Создать UserForm со скриншотом
 
Добавил лист "Экран" с:
- функцией Screen, определяющей параметры дисплея (немного не корректно, но норм)
- кнопкой "Показать форму" (идеально вписывается в экран с/без заголовка)
- кнопкой "Квадрат 3х3 см" (рисует квадрат почти идеально 3х3)
Файл сохранён в старый формат и размещён в посте №1. Информации вроде достаточно.
Дальше нужен кто-то со скиллом повыше моего, чтобы доработать CreateUserFormWithScreenshot. ))
Создать UserForm со скриншотом
 
Ни у кого никаких соображений нет?
Создать UserForm со скриншотом
 
nilske, БМВ, вывод в статье правильный: "можно подружить физические и виртуальные сантиметры".
Осталось переписать JavaScript на VBA. )) Добавил кнопку "Квадрат 3х3 см", должно работать.
Но как определить scalingFactor программно и прикрутить всё это к моему коду не сообразил.
Файл в посте №1.
Изменено: Acid Burn - 20.12.2024 13:19:58
Создать UserForm со скриншотом
 
Вынес сохранение скриншота в отдельный Sub SaveScreenshot. Теперь сохраняется с правильным пиксельным соотношением сторон. Вопрос с коэффициентами пересчёта из/в сантиметры остаётся актуальным. Файл в посте №1.
Изменено: Acid Burn - 20.12.2024 00:32:01
Создать UserForm со скриншотом
 
Всем привет!

По нажатию кнопки "Тест" макрос создаёт UserForm и размещает на ней скриншот.
Размер UserForm указан в сантиметрах в [C5:C6], диапазон для скриншота в [C7].
Высота текста, строк и столбцов для оптимизации скриншота рассчитаны в [C8:C11].
В итоге на мониторе должна получиться картинка 1:1, чтобы её можно было измерить линейкой.

Увы, размеры UserForm, рисунка в UserForm и ячейки листа в Excel отнюдь не в сантиметрах.
Пока наобум подобрал коэффициенты под свой 4K монитор - в режиме 2K с масштабом 100% норм.
Помогите поставить вместо них обоснованные коэффициенты, чтобы работало на любом мониторе.
PS: добавлена функция Screen, создание квадрата чётко 3х3 см и много всего интересного. ))

С уважением.
Изменено: Acid Burn - 21.12.2024 22:22:53
Площадь многоугольника. пользовательская функция
 
Спасибо за функцию PlMnUg, проверил в AutoCAD - работает правильно!
Минус - PlMnUg нельзя разместить в ячейке A26, т.к. попадёшь в цикл, проблема в коде.
А функцию SquareMSK можно, а также она может считать площадь по GPS-координатам.

Синтаксис: =SquareM(XY,SK,SU), где
XY - диапазон ячеек с координатами
SK - тип координат (1 - метры, 2 - GPS)
SU - тип результата (1 - м2, 2 - км2)
Доп. ячейки не требуются, пустые ячейки игнорируются.
Изменено: Acid Burn - 17.12.2024 18:22:39
Условное форматирование уникальных групп цифр
 
Sergius, спасибо, добавил Ваш вариант, как "ver4" в файл в посте 1.
С этого варианта я и начал - начиная со строки 141 работает не правильно (там подряд 2 блока с чётными значениями)...
Условное форматирование уникальных групп цифр
 
Всем привет!

В столбце [A:A] набор 6-значных цифр (первые 3 - позиция генплана, вторые 3 - привязанные к ней объекты).
Нужна формула условного форматирования (УФ) для визуального разделения позиций генплана.
По сути нумерация уникальных значений в диапазоне ЛЕВСИМВ(A2:A551;3).

В [A:A] - желаемый результат.
В [B:B] - формула УФ ЕНЕЧЁТ(B1): работает правильно, но требует доп. столбец В.
В [C:C] - формула УФ ЕНЕЧЁТ(NumInGroup(A2;$A$2:$A$551)): работает на базе функции NumInGroup и ЕНЕЧЁТ.
В [D:D] - формула УФ NumInGroup2(A2;$A$2:$A$551): работает на базе функции NumInGroup2.

Код функций:
Код
Function NumInGroup(XX As Range, UR As Range) As Long
  Application.Volatile False
  Dim UC As Collection, UV As String, II As Long, JJ As Long
  Set UC = New Collection
  On Error Resume Next
  For II = 1 To UR.Count
    UC.Add Left(UR(II), 3), CStr(Left(UR(II), 3))
  Next
  On Error GoTo 0
  UV = Left(XX, 3)
  For JJ = 1 To UC.Count
    If UC(JJ) = UV Then NumInGroup = JJ: Exit Function
  Next
  NumInGroup = 0
End Function

Код
Function NumInGroup2(XX As Range, UR As Range) As Long
  Application.Volatile False
  Dim UD As Object, Data As Variant, II As Long, JJ As String
  Set UD = CreateObject("Scripting.Dictionary")
  Data = UR.value
  For II = LBound(Data) To UBound(Data)
    JJ = Left(Data(II, 1), 3)
    If Not UD.Exists(JJ) Then UD.Add JJ, UD.Count + 1
  Next
  NumInGroup2 = IIf(UD.Exists(Left(XX.value, 3)), IIf(UD(Left(XX.value, 3)) Mod 2, 1, 0), 0)
End Function

Можно ли оптимизировать функцию NumInGroup/NumInGroup2 или заменить её на формулу?


С уважением.
Изменено: Acid Burn - 10.11.2024 18:52:21
Парсинг текста
 
Всем привет!
Даты из исходных строк получилось достать даже без предварительной обработки.
Версии находятся с ошибками (на 462 строки 80 ошибок, 17%). Помогите доработать!
Файл в посте №1.
Как реализовать функцию =ImportXML (google docs) в Excel?
 
Тимофеев, согласен. Остальное бы подтянуть...
Как реализовать функцию =ImportXML (google docs) в Excel?
 
Doober, здравствуйте!
Нашёл Ваш макрос 2014 года и похожий код в виде UDF, подставил свои URL и Xpath, - ответ #ПУСТО!.
Хотелось бы, чтобы работали:
=ImportXML("http://www.nyam.pe.kr/dev/imagine/doc/Whatsnew.txt")
=ImportXML("https://www.autodesk.com/support/technical/article/caas/sfdcarticles/sfdcarticles­/Autodesk-Licensing-Service-Updates.html";"//tr[1]/td[1]|//tr[1]/td[4]")
=ImportXML("https://www.softpedia.com/get/Programming/File-Editors/Restorator.shtml";"//div[1]/span[2]|//h2/span")
Это текстовая, динамическая и статическая страницы.
Можете помочь?
Изменено: Acid Burn - 09.06.2023 16:27:17
Парсинг текста
 
nilske, вообще там была версия Microsoft Office, которую удобно отслеживать на одном Украинском сайте. ))
Парсинг текста
 
Msi2102, вот уж не ожидал. Да, 7 строк выбиралось с Украинских сайтов - строки убрал, файл заменил.
Парсинг текста
 
Up!
Парсинг текста
 
Alien Sphinx, первая версия UDF в посте #1. Не смог доделать, но думаю, что смысл ясен.
Буду рад, если кто-то предложит свои варианты. Может быть всё можно сделать проще?
Изменено: Acid Burn - 31.05.2023 02:50:01
Парсинг текста
 
Alien Sphinx, в смысле?
Исходный текст уж какой есть, его я изменить не могу.
Ожидаемый результат - дата в формате ГГГГ-ММ-ДД, пробел, кавычка, пробел, номер версии. Или что-то близкое по смыслу.
Пока пытаюсь что-то написать в таком духе:
- "оцифровываем" месяца (01^, 02^ и т.д.)
- удаляем всё, кроме цифр и символов .^
- разбираем строку на 2 блока - "дата » версия"
- преобразуем даты в формат "ГГГГ-ММ-ДД"
Изменено: Acid Burn - 30.05.2023 20:48:01
Парсинг текста
 
Всем привет!
Помогите распарсить текст, пожалуйста. Файл во вложении.
Изменено: Acid Burn - 06.06.2023 02:01:11
перевод на другой язык, как перевести ячейку, а перевод поместить в соседнюю ячейку
 
stalker138013, обновлённый файл в посте #22.
перевод на другой язык, как перевести ячейку, а перевод поместить в соседнюю ячейку
 
stalker138013, теперь понял. Исправил, файл там же.
Jack Famous, New, сделал немного иначе.
В VBA-версию GoogleTranslate добавил Function decodeHTML для замены всех кодов HTML соответствующими символами.
В XLS-версии оставил только замену кода апострофа на апостроф, т.к. функция и так длинная, как Вы и предлагали.

PS: вопрос на счёт того, как сделать, чтобы формула работала с массивом строк остаётся актуальным.
Я просто не знаю, как быть с разбивкой строк и каково ограничение Google Translate на длину строки...
Изменено: Acid Burn - 25.05.2023 13:02:35
перевод на другой язык, как перевести ячейку, а перевод поместить в соседнюю ячейку
 
stalker138013
На скриншоте 101010.jpg апострофа не было. Откуда оно берётся не знаю, у меня нет ни "& # 39;", ни апострофов.
Файл перезалил, проверяйте.

To All
Как бы сделать, чтобы формула работала сразу с массивом строк?
Изменено: Acid Burn - 25.05.2023 10:57:11
перевод на другой язык, как перевести ячейку, а перевод поместить в соседнюю ячейку
 
stalker138013, исправленная формула и UDF в посте #22.
Изменено: Acid Burn - 29.05.2023 15:29:18
Сбор данных всех ячеек всех листов для перевода
 
Кто-нибудь может помочь?
Сбор данных всех ячеек всех листов для перевода
 
Всем привет!
Сделал макрос, который выбирает данные из всех формул:
Код
Sub CollectFormulas()
  Dim ws As Worksheet, cell As Range, fileNum As Integer, FilePath As String, fileContents As String, output As String, quoteText As String
  FilePath = "C:\Формулы.txt"
  fileNum = FreeFile()
  Open FilePath For Output As fileNum
  For Each ws In ActiveWorkbook.Worksheets
    For Each cell In ws.UsedRange
      If cell.HasFormula Then Print #fileNum, cell.FormulaLocal
    Next cell
  Next ws
  Close fileNum
  Open FilePath For Input As #1
  fileContents = Input$(LOF(1), #1)
  Close #1
  For i = 1 To Len(fileContents)
    If Mid(fileContents, i, 1) = """" Then
      quoteText = ""
      For j = i + 1 To Len(fileContents)
        If Mid(fileContents, j, 1) = """" Then
          i = j: Exit For
        Else
          quoteText = quoteText & Mid(fileContents, j, 1)
        End If
      Next j
      quoteText = Trim(quoteText)
      If InStr(output, quoteText) = 0 Then output = output & quoteText & vbNewLine
    End If
  Next i
  Open FilePath For Output As #1
  Print #1, output
  Close #1
End Sub
И по идее всех элементов управления, диаграмм и комментариев:
Код
Sub CollectControls()
  Dim ws As Worksheet, shp As Shape, cht As ChartObject, cmt As Comment, FilePath As String
  FilePath = "C:\Controls.txt"
  Open FilePath For Output As #1
  For Each ws In ActiveWorkbook.Worksheets
  ' Проходим по всем элементам ActiveSheet.Shapes и собираем тексты
    For Each shp In ws.Shapes
      If shp.Type = msoFormControl Then
        Select Case TypeName(shp.ControlFormat)
          Case "CheckBox", "OptionButton", "GroupBox", "Button", "EditBox", "Label"
            If shp.ControlFormat.Value <> "" Then Print #1, shp.ControlFormat.Value
        End Select
      End If
    Next shp
  ' Проходим по всем элементам ActiveSheet.ChartObjects и собираем тексты
    For Each cht In ws.ChartObjects
      For Each shp In cht.Chart.Shapes
        If shp.Type = msoFormControl Then
          Select Case TypeName(shp.ControlFormat)
            Case "CheckBox", "OptionButton", "GroupBox", "Button", "EditBox", "Label"
              If shp.ControlFormat.Value <> "" Then Print #1, shp.ControlFormat.Value
          End Select
        End If
      Next shp
   Next cht
 ' Проходим по всем комментариям на листе и собираем тексты
   For Each cmt In ws.Comments
     If cmt.Text <> "" Then Print #1, cmt.Text
     Next cmt
   Next ws
 ' Проходим по всем комментариям в Range и собираем тексты
   For Each cmt In ActiveSheet.Comments
     If cmt.Text <> "" Then Print #1, cmt.Text
   Next cmt
   Close #1
End Sub
Первый работает, буду рад, если кто-то сможет оптимизировать.
Второй что-то выбирает, но не всё. Как доработать и объединить с CollectValues?
Изменено: Acid Burn - 23.05.2023 23:07:54
перевод на другой язык, как перевести ячейку, а перевод поместить в соседнюю ячейку
 
Тимофеев, отличный вариант!
Только Google и MyMemory работают просто и быстро, без всяких API-ключей и Selenium VBA.
Они дают перевод в статическом коде, что даёт использовать быстрый WorksheetFunction.WebService.
С Bing, DeepL, Linguee, PROMT, Reverso, Yandex, а также ChatGPT, Gemini и Grok так не получится.
Добавил UDF с синтаксисом, аналогичным функции GoogleTranslate из GoogleSheets.
И близкий к встроенной в Excel функции ПЕРЕВОД, которая всегда пишет #занято!. ))

История версий:
v1 от 2023-05-23:
- добавлена VBA-функция GoogleTranslate(исходный_текст; исходный_язык; целевой_язык)
v2 от 2023-05-29:
- добавлена массовая замена кодов HTML соответствующими символами
v3 от 2025-04-10:
- функция GoogleTranslate заменена на GTranslate(исходный_текст; исходный_язык; целевой_язык; сервис)
- добавлен сервис перевода MyMemory (ограничение ~500 запросов в день)
- добавлен кэш для ускорения перевода и уменьшения обращений к сервисам (и макрос ClearCache)
- улучшены функции decodeHTML, decodeUnicode и парсинг HTML (регулярные выражения вместо InStr и Mid)
Изменено: Acid Burn - 10.04.2025 17:31:59
Расчёт вершин прямоугольника
 
Апострофф, огромное спасибо!
Расчёт вершин прямоугольника
 
Всем привет!
Помогите рассчитать координаты вершин прямоугольника, заданного высотой и координатами срединной линии.
Пока угол поворота 0 (пример 1), всё работает. Если есть поворот (пример 2), результат не правильный.
Пожалуйста, поправьте функцию. Файл во вложении.
С уважением.
Сбор данных всех ячеек всех листов для перевода
 
New, действительно, благодарю Вас!
Попробую заняться переводом, там будет видно, получилась ли выборка полноценной. )
Сбор данных всех ячеек всех листов для перевода
 
Ещё вариант - в выборке 1273 строки, тоже как-то маловато...
Код
Sub TranslateValues()
  Dim ws As Worksheet, cell As Range, dict As Object, arr() As Variant, i As Long, j As Long
  Set dict = CreateObject("Scripting.Dictionary")
' Перебираем все листы в книге
  For Each ws In ThisWorkbook.Worksheets
    For Each cell In ws.UsedRange.Cells ' 1273
      Select Case VarType(cell.Value)
        Case vbDouble, vbString
          If Not IsNumeric(cell.Value) And cell.Value <> "" And Not dict.exists(cell.Value) Then
            dict.Add cell.Value, 1
          End If
      End Select
    Next cell
  Next ws
' Создаем отсортированный массив без дубликатов
  ReDim arr(0 To dict.Count - 1)
  i = 0
  For Each Key In dict.keys
    arr(i) = Key
    i = i + 1
  Next Key
' Записываем значения из массива в столбец A на листе "Translate"
  Set ws = ThisWorkbook.Worksheets("Translate")
  For i = 0 To UBound(arr)
    If Not IsNumeric(arr(i)) Then arr(i) = CStr(arr(i))
  Next i
  ws.Range("A1").Resize(UBound(arr) + 1, 1).Value = Application.Transpose(arr)
' Удаляем дубликаты, сортируем
  ws.Range("$A:$A").RemoveDuplicates Columns:=1, Header:=xlNo
  With ws.Sort
    .SortFields.Clear
    .SortFields.Add Key:=ws.Range("A:A"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    .SetRange ws.Range("A:A")
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
  End With
End Sub
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 21 След.
Наверх