Если ячейка отформатирована как текст, формулы не рассчитываются - PullRequest
0 голосов
/ 17 сентября 2018

Мне нужно сохранить ячейки в формате текста и в то же время убедиться, что Excel рассчитывает формулы внутри них.
Есть ли способ сделать это?

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Неясно, нужен ли вам формат ячейки, чтобы быть текстом, или если вам нужны результаты формулы в ячейке, которая будет преобразована в строку / текст.Формулы Excel не влияют на форматирование ячеек и не влияют на форматирование ячеек.Прекрасный пример этого - даты.Даты - это целое число, считающее количество дней с момента начала.День 1 - это 1900/01/01 на ПК (на Mac я думаю, что это 1905/01/01, но я могу ошибаться).Если вы введете сегодняшнюю дату (2018/09/17) в любой ячейке по умолчанию, Excel идентифицирует ее как дату, изменит форматирование ячейки и преобразует дату в 43360. Это будет видно, если вы измените формат ячейки обратно на общийи вы заметите, что номер выровнен по правому краю.Если вы измените формат ячейки на текстовый, вы все равно увидите 43360, но вместо этого он будет выровнен по левому краю.Что еще более важно, это все еще число, и вы можете проверить его, используя ISTEXT(A1), где A1 - рассматриваемая ячейка.Он по-прежнему будет возвращать true.

Чтобы сделать содержимое ячейки строкой, вы можете просто объединить формулу с помощью "".

=Your_Function&""

=1+1&""

Сказав это.Если ячейка отформатирована как строка, ФОРМАТ ячейки останется строкой, несмотря на все математические вычисления внутри нее.Поэтому, если вы отформатируете A2 как текст, а затем поместите = 1 + 1 внутри него, результатом в ячейке будет число 2, и ячейка будет отформатирована как текст.

0 голосов
/ 18 сентября 2018

Я решил это !!!

В модуле Sheet:

Option Explicit
Private Busy As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Busy Then
        Busy = True
        If ActiveSheet.ProtectContents Then ActiveSheet.Protect UserInterfaceOnly:=True
        CalculateFormula Target.Row, Target.Column
        Busy = False
    End If
End Sub

В стандартном модуле:

Option Explicit
Sub CalculateFormula(Row As Long, Column As Long)
    Dim Format As String
    If Left(Cells(Row, Column).Value, 1) = "=" Then
        Format = Cells(Row, Column).NumberFormat
        Cells(Row, Column).NumberFormat = "General"
On Error Resume Next
        Cells(Row, Column).FormulaLocal = Cells(Row, Column).Value
On Error GoTo 0
        Cells(Row, Column).NumberFormat = Format
    End If
End Sub
0 голосов
/ 17 сентября 2018

Вставьте ваши Excel-формулы в текстовые функции. = Текст ( ваша функция , "@") больше информации: https://support.office.com/en-us/article/text-function-20d5ac4d-7b94-49fd-bb38-93d29371225c edit: если ваши формулы не оцениваются, то для этого могут быть и другие причины, кроме форматирования ячеек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...