Страницы: 1 2 След.
RSS
VBA. Текстовый формат ячеек.
 
Здравствуйте.  
 
Возможно кто-небудь подскажет, как на VBA можно написать процедуру, которая проверяет формат ячеек заданного диапазона. Если формат ячеек текстовый - ничего не делать, если не текстовый -  присвоить ячейкам текстовый формат. Искал в интернете материал по заданной теме - ничего подходящего не обнаружил...
 
> Если формат ячеек текстовый - ничего не делать, если не текстовый - присвоить ячейкам текстовый формат  
Не проще всему диапазону присвоить текстовый формат?  
 
MyRange.NumberFormat = "@"
 
Из описания следует, что нужно тупо присвоить ячейкам текстовый формат (зачем тут проверять). Запишите это действие рекордером - получите рабочий макрос.
 
{quote}{login=Казанский}{date=01.02.2011 10:18}{thema=}{post}> Если формат ячеек текстовый - ничего не делать, если не текстовый - присвоить ячейкам текстовый формат  
Не проще всему диапазону присвоить текстовый формат?  
 
MyRange.NumberFormat = "@"{/post}{/quote}  
 
 
В данном случае не все так просто...Есть документ, в котором консолидируются некие данные. Часть данных выгружается из базы данных, часть берется из других источников, или вносится руками. При выгрузке из бд, ячейкам присваивается формат general, в результате чего в одном из столбцов теряется «0» перед данными в ячейках. Проверять на наличие первого символа «0» не получиться, потому что он не везде есть, его необходимо проставить только в ячейках, выгруженных из бд.  
 
Резюмируя – проверять формат ячеек необходимо.
 
{quote}{login=The_Prist}{date=01.02.2011 10:39}{thema=}{post}А я так полагаю, что нужен именно цикл, т.к. очень уж это на задание от препода смахивает :-){/post}{/quote}  
 
Вы ошибаетесь, учиться я уже давно закончил. Это производственная необходимость. Макрос уже готов, не могу только дописать часть с форматом... Почему необходимо проверять формат написал выше.
 
Всё равно не понятно, почему нельзя текстовому присвоить текстовый? Про другие понятно :)  
И то, что Вы общий поменяете на текстовый, на уже занесённые данные не повлияет - они так и останутся без нулей. Нужно формат задавать до импорта данных.
 
{quote}{login=Hugo}{date=01.02.2011 11:12}{thema=}{post}Всё равно не понятно, почему нельзя текстовому присвоить текстовый? Про другие понятно :)  
И то, что Вы общий поменяете на текстовый, на уже занесённые данные не повлияет - они так и останутся без нулей. Нужно формат задавать до импорта данных.{/post}{/quote}  
 
Импортирую данные не я - получаю уже в описанном виде. Для работы с документом думал использовать следующий алгоритм:  
 
- выбрать в столбце ячейки, у которых формат не текстовый (т.е., ячейки, которые выгружены с бд)  
- присвоить указанным ячейкам текстовый формат  
- присоединить к значению ячейки "0" вначале  
 
К сожалению, выложить сам файл не могу.
 
Т.е. Вы заранее не знаете, куда будут выгружены эти данные из БД?
 
Макрорекордером(кроме цикла).  
Sub Макрос1()  
' Макрос записан 01.02.2011 (Sergey)  
   Dim c As Range  
   Selection.SpecialCells(xlCellTypeConstants, 1).Select  
   Selection.NumberFormat = "@"  
   For Each c In Selection.Cells  
       c = "0" & c  
   Next  
End Sub  
Выделяете диапазон и вперед.
Я сам - дурнее всякого примера! ...
 
А я так, на столбец H:  
 
Sub tt()  
Dim cc As Range  
For Each cc In Intersect(ActiveSheet.UsedRange, [H:H]).Cells
   
If cc.NumberFormat = "General" Then  
cc.NumberFormat = "@"  
cc.Value = "0" & cc.Value  
End If  
Next  
 
End Sub
 
о! Это подходит. Спасибо всем огромное!!! Вы действительно очень помогли.
 
Игорь, почувствуй разницу.
Я сам - дурнее всякого примера! ...
 
Глюки, какие-то.
Я сам - дурнее всякого примера! ...
 
Ну колонка-то известна, судя по всему. А добавлять нули нужно только тем ячейкам, где выгрузка, т.е. где General.  
Вот и вся разница :)
 
Понял.
Я сам - дурнее всякого примера! ...
 
Ты файл посмотри.
Я сам - дурнее всякого примера! ...
 
да, Игорь совершенно прав. Его макрос подходит.    
 
Но, насколько я понял, занимаясь поиском материалов по текстовому формату, он в VBA никак не обозначен, или с ним работать очень сложно, потому что все избегают его использовать. Не нашел нигде даже его обозначения, кроме предложенного "@". Это действительно так?
 
Согласен, нужно добавить проверку на пусто/непусто.  
Ну а UsedRange нафига донизу в пустом листе? И размер неупакованный соответственно...  
А твой код лучше стал :)  
Лучше моего.
 
... про проверку на General забыл - мой лучше :)  
А лучше скрестить. Наши коды :)
 
А зачем проверять на General? Изменяем только константы-цифры:-) В листе для выгрузки изначально могут быть Бог знает какие форматы... Да и цикл по всем ячейкам дольше, чем только по нужным.
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=01.02.2011 01:01}{thema=}{post}А зачем проверять на General? Изменяем только константы-цифры:-) В листе для выгрузки изначально могут быть Бог знает какие форматы... Да и цикл по всем ячейкам дольше, чем только по нужным.{/post}{/quote}  
 
В выгрузке там везде General. А в ячейке могут быть не только цифры, но и буквы.  
 
З.Ы. А что с текстовым форматом VBA (я выше писал). Никто не знает, почему так?
 
Ну почему избегают? Иногда не обойтись даже и с числовыми данными, например полные номера кредитных карт только в текстовом формате можно на листе хранить - иначе искажает...
 
Если в ячейке буквы, то экс независимо от формата ячейки воспримет это как текст и не станет убирать лидирующие нули. Так, что и здесь проверка на General бесполезна. Wayfarer, сами подумайте, что проще - проверять на General в цикле, потом проверять на "пусто" или сразу поменять константы-цифры на текст? Вы мой файл смотрели? Не, ну дело Ваше...
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=01.02.2011 01:40}{thema=}{post}Если в ячейке буквы, то экс независимо от формата ячейки воспримет это как текст и не станет убирать лидирующие нули. Так, что и здесь проверка на General бесполезна. Wayfarer, сами подумайте, что проще - проверять на General в цикле, потом проверять на "пусто" или сразу поменять константы-цифры на текст? Вы мой файл смотрели? Не, ну дело Ваше...{/post}{/quote}  
 
Вы меня неправильно поняли. Предыдущий пост я не с наездом писал, а как бы отвечая на ваш пост выше...да и про буквы - просто уточнение...:)  
 
На самом деле очень благодарен Вам и Игорю за помощь.
 
Да, Сергей, я что-то пропустил, что константы - это и есть цифры в General.
 
{quote}{login=Hugo}{date=01.02.2011 02:13}{thema=}{post}Да, Сергей, я что-то пропустил, что константы - это и есть цифры в General.{/post}{/quote}  
 
И я это пропустил, потому написал уточнение, что там кроме цифр еще и буквы есть...:)
 
А функцию рабочего листа Application.WorksheetFunction.IsText никак не прикрутить?
 
ну а NumberFormat Property  ?
Живи и дай жить..
 
Если заранее известно к-во цифр в числах(и оно постоянно), то способ Слэна самый эффективный. Автор жмется пример выложить...
Я сам - дурнее всякого примера! ...
 
{quote}{login=KukLP}{date=01.02.2011 03:10}{thema=}{post}Если заранее известно к-во цифр в числах(и оно постоянно), то способ Слэна самый эффективный. Автор жмется пример выложить...{/post}{/quote}  
 
Количество цифр в числах постоянно, и известно заранее - это номера, состоящие из 12 цифр
Страницы: 1 2 След.
Читают тему
Наверх