Страницы: 1
RSS
Копировать видимое значение (объединить значение и формат ячейки)
 
Всем доброго дня!

Уважаемые пользователи, честно пытался найти тему, в которой поднимался бы схожий с моим вопрос, но нашёл только одну и, к сожалению, ответ в ней для меня оказался не очень полезен.

Суть вопроса: есть файл, выгружаемый из сторонней программы. В результате записи из этой программы в excel часть значений по какой-то причине записывается в ячейку, а часть в её формат. Кол-во строк в таблице с такими значениями от 1 до нескольких тысяч, так что хотелось бы это каким-то образом корректировать автоматически.
Например, значение 1551-LO-15952321 будет записано следующим образом: 1551 - в ячейку, а -LO-15952321 - в формат.
Естественно, что при сравнении ячейки со значением 1551-LO-15952321 с ячейкой со значением, где часть "потерялась" в формате, excel выдаёт неравенство

Моих скудных познаний и двудневного гугла хватило на ручное копирование в блокнот и функцию примерно следующего содержания:
Код
Function VisualVal_Text(rc As Range) 
 VisualVal_Text = rc.Text 
End Function 


НО! Т.к файл далее используется для сравнения с другой таблицей при помощи макроса, хотелось бы чтобы это всё и выполнялось сразу в этом макросе

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

Заранее спасибо!
 
Цитата
а -LO-15952321 - в формат.
А по русски можешь сказать или в файле показать запись в "формат"
Это типа заливка такая получается?
 
Цитата
Dualerov написал:
Можно ли каким-либо образом встроить эту функцию в код, а не в ячейку?
Можно, Например
Код
Function VisualVal_Text(rc As Range)
VisualVal_Text = rc.Text
End Function
Sub test()
MsgBox VisualVal_Text(Range("A1"))
End Sub
 
Цитата
Александр Моторин написал: А по русски...?
Формат имелся в виду пользовательский. Для каждой ячейки свой пользовательский формат, в который попадает часть значения. Подробнее можно в примере увидеть.

Александр П., в msgbox не надо было выводить, заменил его на цикл, который подставляет корректные значения прямо в той же ячейке, на тестах всё стабильно отработало. Спасибо большое! Оказалось всё настолько просто, прям под носом было решение! :)

В моём случае получился нижеследующий код, файл с примером прилагаю. Комментировать код не стал, так как о циклах и в интернете и здесь масса информации.

Код
Function VisualVal_Text(rc As Range)
VisualVal_Text = rc.Text
End Function

Sub test()
Dim lastRow As Long, i As Long
Dim ws As Worksheet
Set ws = Sheets("TDSheet")
lastRow = ws.Range("C" & Rows.Count).End(xlUp).Row    
With ws        
For i = 10 To lastRow - 2            
If Len(Trim(.Range("B" & i).Value)) <> 0 Then _            
.Range("C" & i) = VisualVal_Text(Range("C" & i))        
Next i    
End With
End Sub

 
Цитата
Dualerov написал:
Оказалось всё настолько просто, прям под носом было решение!
Оказалось, что не так уж и просто всё.
Функция полностью корректно выполняется, если  только данные надо заменить на том же листе, где она и прописана в вба. Если листов несколько и нужно заменить данные, скажем, на втором, то функция будет тянуть данные на второй лист с первого.

Как ей показать откуда тянуть? Ни Select ни Activate ни With не помогли, хотя возможно я просто чего-то не догоняю. :cry:

Файл-пример приложил.
 
Код
.Range("C" & i) = VisualVal_Text(Range("C" & i))
угадайте где надо поставить точку, чтобы в функцию передавать ячейку с листа Sheets("TDSheet")?
Для общего образования рекомендую ознакомиться: Как обратиться к диапазону из VBA
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
угадайте где надо поставить точку,
"Угадал", спасибо.Видимо по ночам работать после работы не сильно полезно для внимания. Даже не увидел вчера, что точки нет... :oops:

За ссылку спасибо, в общих чертах в курсе, но лишним не будет конечно же.
Страницы: 1
Наверх