Страницы: 1
RSS
Команда "разделить на" в VBA
 
Уважаемые коллеги!  
 
Такая проблема - давно хочу создать  макрос, чтобы по нажатию сочетания клавиш активная ячейка поделилась на 1000.    
 
Как это стандартными средствами Excel - не придумал.    
(поделить на из специальной вставки не подходит, так как требуется сначала загнать число делителя -1000- в буфер обмена)  
 
Для осуществления задуманного хотелось бы узнать, как пишется команда "поделить на" в VBA.  
Давно хочу освоить VBA, но пока все никак не получается.  
 
Заранее большое спасибо за помощь!  
 
Дима.
 
Cells(1,1)=cells(1,1)/1000  
Это, если без дополнительных проверок.
 
Не увидел, что про активную:  
Cells(1,1) меняем на ActiveCell
 
Юрий, спасибо большое!  
Все работает, только не совсем так, как хотел пользователь :)  
 
Если в ячейке просто число - то все отлично!  
А если в ячейке ссылка, то при выполнении макроса, который Вы помогли создать, ссылка переделывается в значение \1000.  
 
Или:  
a1 = 600500  
b1= a1.  
Если выполнить Ваш макрос над активной ячейкой b1,  то в этой ячейке окажется значение 600,5.  
 
А хотелось бы, чтобы после выполнения макроса ячейка b1=a1/1000.  
 
Похоже, что не совсем корректно сформулировал задачу:  
Нужен макрос, который бы:  
_ вставлял в начало активной ячейки "=";  
_ вставлял в конец активной ячейки "\1000".  
 
В случае, если активная ячейка - ссылка, Excel сам уберет лишний знак "=".  
 
Понимаю, что это немного более сложная задача, однако именно такая формулировка задачи полностью отвечает поставленным задачам.  
 
Буду очень признателен, если удастся решить эту проблему!  
Дима.
 
Попробуйте так:  
Sub Test()  
   If ActiveCell.HasFormula Then  
       ActiveCell.Formula = ActiveCell.Formula & "/ 1000"  
   Else  
       ActiveCell = ActiveCell / 1000  
   End If  
End Sub  
Если в активной ячейке ссылка, то она останется, но будет добавлено деление на 1000.  
Если в активной ячейке число - просто деление.
 
Уточню - имеющуюся формулу надо в скобки брать, кстати так работает PasteSpecial.  
 
Sub DivideBy1000()  
With ActiveCell  
   If IsNumeric(.Value) And Not IsEmpty(.Value) Then  
       If .HasFormula Then  
           .Formula = "=(" & Mid(.Formula, 2) & ")/1000"  
       Else  
           .Formula = "=" & .Formula & "/1000"  
       End If  
   End If  
End With  
End Sub
 
Казанский, согласен - делал исключительно для простой ссылки, как и просил автор. А вот насчёт второй части (Else) - зачем там добавлять символ "равно"? Просто делим значение :-)
 
Ну, может, и не надо. Пусть автор прояснит. Я сделал по заданию  
 
*************************************************  
Нужен макрос, который бы:  
_ вставлял в начало активной ячейки "=";  
_ вставлял в конец активной ячейки "\1000".  
*************************************************
 
:-)) Понятно. Я от этого отталкиваюсь:  
{quote}{login=dmit}{date=10.07.2010 10:27}{thema=}{post}Если в ячейке просто число - то все отлично!{/post}{/quote}  
Подождём заказчика
 
Большое Вам спасибо!  
 
Протестировал оба предложенных варианта. Особо отмечу, что Казанский приложил еще и файл с готовым макросом. Кстати, как Вам удается вставить в название макроса цифры? Мне Excel не позволял этого сделать - не принимал название макроса.    
 
По итогам тестирования, хотел бы отметить следующее:  
_ при работе с простыми числами  все отлично;  
_ макрос Юрия при работе с простой формулой (а1= в1) вставляет пробел ( а1= в1\_1000) - пробел не в виде "палочки", а просто пробел, чего не делает макрос Казанского;  
_при работе со сложными формулами (а1= в1+25) макрос Юрия не работает совсем, чего нельзя сказать про макрос Казанского, который работает корректно.  
 
В итоге пользуюсь макросом Казанского.  
Еще раз огромное спасибо за помощь! И прошу прощения, что устроил некоторое состязание - надеюсь, так было интереснее.  
 
Дима.
Страницы: 1
Читают тему
Наверх