Страницы: 1 2 След.
RSS
Форматы для чисел с символами из соседней ячейки, Помогите пожалуйста с макросом.
 
Здравствующие, Уважаемые форумчане
Помогите пожалуйста с макросом.
Надо присвоить форматы числам сформированные из символов которые находятся в соседней к этому числу ячейке.
Как возможно такое?
Более понятно постаралась изобразить в файле.
Изменено: Вероника Суворова - 12.03.2025 16:51:04
 
Вероника Суворова, включаете запись макроса, ставите формат, выключаете запись - получаете
Код
Selection.NumberFormat = "#,##0.00"" TTRT"""

И видите, куда в коде можно прописать эти символы.
Можно например так использовать - встать на любую ячейку в D с числом и выполнить
Код
Sub Макрос5()
Dim s$

    s = " " & Selection.Offset(, -2) 'получаем в переменную символы
    Selection.NumberFormat = "#,##0.00" & s 'используем
End Sub
Изменено: Hugo - 12.03.2025 17:36:46
 
Если именно отформатировать, то при ограниченном количестве вариантов можно условным форматированием, если не ограниченно, то только макросом,
Если прост рядом отобразить , то текст( ) а в формате указать суффикс.
По вопросам из тем форума, личку не читаю.
 
Спасибо Вам Hugo, немного не до конца , но и так хорошо, а ваш совет отложу себе в памятку.
Изменено: Вероника Суворова - 12.03.2025 18:50:49
 
Ну до конца - это макрос на события нужно писать, а можно подсмотреть тут где-нить в сети и приспособить ))
 
Код
Sub ApplyFormatBasedOnAdjacentCell()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("ВашЛист") ' Укажите имя вашего листа
    
    Dim lastRow As Long
    lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row ' Предполагается, что данные в столбце B
    
    Dim i As Long
    For i = 1 To lastRow
        Dim formatString As String
        formatString = ws.Cells(i, "B").Value ' Символы для формата
        
        Select Case formatString
            Case "TTRT"
                ws.Cells(i, "C").NumberFormat = "0.00" ' Пример формата для TTRT
            Case "RRT"
                ws.Cells(i, "C").NumberFormat = "0" ' Пример формата для RRT
            Case "RRR"
                ws.Cells(i, "C").NumberFormat = "#,##0" ' Пример формата для RRR
            Case Else
                ' Действие по умолчанию, если формат не найден
                ws.Cells(i, "C").NumberFormat = "General"
        End Select
    Next i
End Sub
Пускаете через редактор VBA. Этот код проверяет символы в столбце B и применяет соответствующий числовой формат к ячейкам в столбце C. Больше условий можете добавить в Select Case
One tap - one kill
 
Цитата
написал:
Пускаете через редактор VBA. Этот код проверяет символы в столбце B и применяет соответствующий числовой формат к ячейкам в столбце C. Больше условий можете добавить в Select Case
Спасибо большое за труд, но в вашем варианте в коде строго прописаны значения форматов. Мысль была иная,- какое значение в ячейке столбца "B" таков и формат числа по строке в ячейке столбца "С"  (в файле примере столбец "С" с "D" спутан)
 
Цитата
написал:
И видите, куда в коде можно прописать эти символы.Можно например так использовать - встать на любую ячейку в D с числом и выполнить
Простите, за беспокойство, но вот сама никак не смогла разобраться. На определенные символы возникает ошибка, не подскажите в чем дело? Пример в файле.
 
Вероника Суворова, я смотрю Вы там уже ставили вручную такие форматы...
Запись рекордера даёт
Код
Selection.NumberFormat = "#,##0.00 \D\D\D"

т.е. для таких резервированных системой символов (формата даты и времени в данном случае) нужно экранировать каждый символ.
Это усложняет, но теоретически сделать можно. Но практически возиться никто не будет, если только сидя и работая работу ))
Наверняка ведь есть перечень этих возможных символов - составьте список форматов, и подставляйте готовое по списку.
P.S. Хотя можно просто любой набор символов разбивать на элементы и перед каждым ставить слэш... наверное должно сработать.
Код
Sub ФорматПрисвоить()
' Присваивает формат числу символом из соседней ячейки
Dim s$, ss$

    s = Selection.Offset(, -2)  'получаем в переменную символы
    For i = 1 To Len(s)
        ss = ss & "\" & Mid(s, i, 1)
    Next
    Selection.NumberFormat = "#,##0.00" & " " & ss 'используем
End Sub
Изменено: Hugo - 13.03.2025 13:10:47
 
Цитата
написал:
Это усложняет, но теоретически сделать можно. Но практически возиться никто не будет, если только сидя и работая работу ))Наверняка ведь есть перечень этих возможных символов - составьте список форматов, и подставляйте готовое по списку.
Спасибо большое! Вроде работает! Это наименование токенов, а их все не переберешь для списка...
 
Цитата
написал:
Хотя можно просто любой набор символов разбивать на элементы и перед каждым ставить слэш... наверное должно сработать.
Уважаемый, Hugo извините за реанимацию темы, но никак сама не могу дойти... Как подправить код, что бы столбец с символами в ячейках, к которому идет обращение, был постоянным, а столбец с данными для форматирования мог быть разным? То есть при активации той или иной ячейки (при запуске макроса) находящееся в ней число подлежала форматированию по своей строке из ячейки со столбца с символами. Столбец с символами может быть самый крайний с лева относительно форматируемых данных
Ну и намотала... понятно то хоть...?    
 
Или это только уже работая работу ?
 
Понятно сама... тогда похоже закрыта тема...
 
Вероника Суворова, Добрый день.
Ну отлучился чуть, отвлёкся на другой вопрос, не уследил... ((
Можно в коде указать номер столбца, можно определить последнее заполненное значение в строке например аналогично как и последнюю строку:
Код
LastCol = Cells(Selection.Row, Columns.Count).End(xlToLeft).Column

и использовать.
Нужно видеть в файле с задачей и кодом
Изменено: Hugo - 10.04.2025 10:57:20
 
Цитата
написал:
Ну отлучился чуть, отвлёкся на другой вопрос, не уследил... ((
Здравствуйте)
Простите за поспешный вывод)
Вот как бы реальная таблица, там же и макрос.
 
Вероника Суворова, вариант дальнейшего развития - выделяем ИЗБРАННО ячейки ОДНОГО столбца, выполняем tt
Код
Sub tt()
Dim c As Range
Dim x&

x = InputBox("Запрос сдвига", "Введите число")
For Each c In Selection
    Call ФорматЧисла(c, x)
Next
End Sub

Sub ФорматЧисла(c As Range, x&)
' ссылка на тему: https://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=170324&TITLE_SEO=170324-formaty-dlya-chisel-s-simvolami-iz-sosedney-yacheyki
' Присваивает формат числу символом из соседней ячейки 13/03/2025 реализация HUGO

Dim s$, ss$

    s = c.Offset(, -x)  'получаем в переменную символы
    
    For i = 1 To Len(s)
        ss = ss & "\" & Mid(s, i, 1)
    Next
    c.NumberFormat = "#,##0.00" & " " & ss 'используем

End Sub


Можно жёстко в коде прописать откуда брать формат, если он всегда там.
Ну и тут ещё разрядность не учитывается, это потом руками понажимать на кнопочку в панели
 
Цитата
написал:
Можно жёстко в коде прописать откуда брать формат, если он всегда там.
Вариант очень интересный со сдвигом, но вот боюсь оперативно у операциониста получится с ошибкой на какое кол-во стлб в лево сдвинуть.. А можно вариант с жестким определением столбца от куда брать формат? Главное чтоб понятно было как самой поправить когда таблица окончательно в своем виде утрясется. Если не затруднит конечно :)
 
Вероника Суворова,  Тогда нужно написать два разных макроса, в каждом указать свой сдвиг.
Ну один tt, второй ttt, и в каждом убрать запрос, заменив на константу, которую давать макросу задающему формат. Как вариант. Но его тоже нужно чуть поправить. Сейчас гляну
Глянул, скорректировал
Изменено: Hugo - 10.04.2025 13:03:36
 
А может (раз уж с InputBox) указать начальную ячейку столбца с данными? Или эт хлопотно?
 
Цитата
Вероника Суворова написал:
А может (раз уж с InputBox) указать начальную ячейку столбца с данными?
- ну  можно и так, выполнять один вызывающий макрос и там указывать 3 или 4.
А так с константами код выше.
 
Цитата
написал:
А так с константами код выше.
Ага, разобралась) Спасибо вам Hugo большое!
 
Вероника Суворова, Вероника, есть небольшой update основного макроса:
Код
Sub ФорматЧисла(c As Range, x&)
' ссылка на тему: https://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=170324&TITLE_SEO=170324-formaty-dlya-chisel-s-simvolami-iz-sosedney-yacheyki
' Присваивает формат числу символом из соседней ячейки 13/03/2025 реализация HUGO
Static f As String
Dim s$, ss$

    s = Cells(c.Row, x) 'c.Offset(, -x)  'получаем в переменную символы
    If Len(s) Then f = s
    For i = 1 To Len(f)
        ss = ss & "\" & Mid(f, i, 1)
    Next
    c.NumberFormat = "#,##0." & howmatch(c) & " " & ss 'используем

End Sub

Function howmatch(c) As String
Dim x, y&
x = Abs(c)
y = Application.Max(2, Len(CStr(x)) - InStr(CStr(x), ","))
howmatch = String(y, "0")
End Function

С этим кодом можно выделять диапазон целиком
как на скрине

и формат будет и в строках сумм. Код запоминает последний формат, и если нового нет в образце то применяет последний.

P.S. Можно даже
вот так выделить и выполнить макрос
Изменено: Hugo - 10.04.2025 17:56:19
 
Цитата
написал:
Код запоминает последний формат, и если нового нет в образце то применяет последний.
Что я могу сказать... СПАСИБО БОЛЬШОЕ HUGO! Для моей потребности доведено до идеала!
 
Вероника Суворова, для идеала на практике ещё бы нужно чтобы код сам искал где написаны эти символы форматов!
Но если они всегда будут в этих столбцах то ОК.
Но можно например подстраховаться - если в начале работы код в ячейке C3 не находит "Символ | Пара"  то вывести какое-то сообщение - тогда если вдруг кто-то сдвинет таблицу то это побудит и код подправить/доработать.
вот например эту одну строку
Изменено: Hugo - 11.04.2025 10:51:53
 
Цитата
написал:
искал где написаны эти символы форматов
Я думала про это, но не осмелилась)). Столбец с символами как раз и может (будет) меняться и не раз..  Изначально содержание символа и пары уникально: символ/пара в одной ячейке - напр PPP/USD то есть через косую (это я уже разнесла по столбцам для упрощения задачи) во всей таблице подобное сложение символов только у "символа и пары" ну вот как то так...  
 
Вероника Суворова, если будет часто меняться - то кроме проверки можно координаты этих столбцов писать где-то на листе, где всегда пусто, и невидимыми чернилами чтоб не мешало и не печаталось. И брать их кодом из этих константных ячеек.
Т.е. не поменяли координаты - будет сообщение.
Скорректировали - работаете без сообщений.
Ну или можно делать поиск (перебором, или Find использовать) - ну это если вообще код в надстройке, а файл каждый раз новый и совсем другой, но есть точный признак как найти эти символы.
И они могут быть и через косую черту, это не сложно в коде обработать.
Изменено: Hugo - 11.04.2025 13:16:47
 
Цитата
написал:
это не сложно в коде обработать
Да это я в курсе, что не сложно)) Для определенных специалистов :)) Похоже в раздел "Работа" с этим вопросом?
 
Ну можно и тут продолжать.
Только нужно определиться с ТЗ
 
Цитата
написал:
Только нужно определиться с ТЗ
Я поняла. Тогда для понимания варианта составление ТЗ надо выяснить вопрос какой принцип обработки применить
по принципу проще - бюджетней.
1)  Столбец с символами будущих форматов чисел в таблице как константа (то есть как сейчас).
2)  Первоначально в исходных данных в ячейках таблицы в числах присутствуют буквенные символы напр. - 10 000 PPP.
Могут ли они являться будущими форматами этих чисел?
После чего эти буквенные символы удаляются из чисел для приобретения их считабельности.
Ну и конечно же как итог стоимость этого проекта, так как это чисто моя хотелка для облегчения в работе.
 
Цитата
Вероника Суворова написал:
в числах присутствуют буквенные символы напр. - 10 000 PPP.Могут ли они являться будущими форматами этих чисел?
- могут.
По сути всё равно откуда брать символы в переменную s.
Т. к. они удаляются другим кодом (не вникал в тут тему, но очевидно что связано с этой)) - нужно будет подумать как это связать.
По стОимости пока ничего не скажу, т.к. нужно видеть всю картину.
Но сразу говорю - рублями взять не могу, санкции пока действуют.
Страницы: 1 2 След.
Читают тему
Наверх