Страницы: 1
RSS
как посчитать выражение из текстовой ячейки
 
Собственно нужно сделать следующее: в одну ячейку заносят выражение типа 4+5-6 а в другой получить значение данного выражения
 
Как один из вариантов....  
Допустим ваша текстовая строка находится в ячейке В4. Рядом вставьте =ЛЕВСИМВ(B4;1)+ПСТР(B4;3;1)-ПРАВСИМВ(B4;1).
 
{quote}{login=}{date=29.01.2009 02:17}{thema=как посчитать выражение из текстовой ячейки}{post}Собственно нужно сделать следующее: в одну ячейку заносят выражение типа 4+5-6 а в другой получить значение данного выражения{/post}{/quote}  
Зачем это нужно никому непонятно но в реале это очень сложно.. путь могу подсказать ищете вхождения каждого ар знака по его символу потом считываете число до него и т.д.
 
{quote}{login=}{date=29.01.2009 05:14}{thema=}{post}Как один из вариантов....  
Допустим ваша текстовая строка находится в ячейке В4. Рядом вставьте =ЛЕВСИМВ(B4;1)+ПСТР(B4;3;1)-ПРАВСИМВ(B4;1).{/post}{/quote}  
Помоему не подходит! Как на счет выражения 20+2-5 ???
 
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  
ActiveCell.FormulaLocal = "=" & ActiveCell.Value  
End Sub  
 
при двойнои клике на ячейку.
 
{quote}{login=pch@koff}{date=29.01.2009 05:29}{thema=Re: }{post}{quote}{login=}{date=29.01.2009 05:14}{thema=}{post}Как один из вариантов....  
Допустим ваша текстовая строка находится в ячейке В4. Рядом вставьте =ЛЕВСИМВ(B4;1)+ПСТР(B4;3;1)-ПРАВСИМВ(B4;1).{/post}{/quote}  
Помоему не подходит! Как на счет выражения 20+2-5 ???{/post}{/quote}  
И не подойдет никогда при измении разрядов перестановки знаков и т.д.    
Надо писать что-то типа Левсимв(B4; ПОиск(+;B4)) и т.д причем неизвестно какой знак будет первым или надо искать расстояния между знаками ,,, а если там пробелы вставили и зачем главное этот геморой.
 
у марчука конечно универсальней:) ну я тоже нашел решение. все проще простого  
Sub sdf()  
Dim a As String  
a = Range("I38")  
Range("I40") = "=" & CStr(a)  
MsgBox Range("I40")  
End Sub
 
только я со всякими cstr намутил:) можно и без этого наверно
 
Или так:  
Sub xxx()  
On Error Resume Next  
ActiveCell.Offset(0, 1) = Application.Evaluate(CStr(ActiveCell))  
End Sub  
Или вообще так:
 
{quote}{login=Марчук}{date=29.01.2009 05:33}{thema=}{post}Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)  
ActiveCell.FormulaLocal = "=" & ActiveCell.Value  
End Sub  
при двойнои клике на ячейку.{/post}{/quote}  
Ваш вариант очень понравился.  
Позволил себе добавить к нему обработку ошибок и учел пожелания автора - "а в другой получить значение данного выражения".  
 
Итого:  
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)  
   On Error Resume Next  
   ActiveCell.Offset(0, 1).FormulaLocal = "=" & ActiveCell.Value  
   If Not IsNumeric(ActiveCell.Offset(0, 1)) Then  
       ActiveCell.Offset(0, 1) = ""  
   End If  
   ActiveCell.Offset(0, 1).Activate  
End Sub
 
Нашел баг.  
При вводе в ячейку: число / число - автоматически форматирует ее как дату.  
Тогда фишка из темы не работает.  
 
Может кто знает как отключать автоматическую смену формата ячейки?  
PS^ Excel 2003
 
Переключает в формат даты, если число1 от 1 до 31 и число2 от 1 до 12.  
(число1/число2)
 
все украдено до нас (с)прикл шурика
Живи и дай жить..
Страницы: 1
Читают тему
Наверх