Вычисление строкового выражения в excel

У меня есть строки с такими выражениями, как 8,753 - 1,087*4 + 0,1784*5*5 + 0,3447*4*4 в столбце A

Я хотел бы, чтобы VBA вычислил результирующее значение в столбце B.

Кто-нибудь может что-нибудь порекомендовать?

Я пробовал функцию оценки VBA, но это приводит к ошибке, я пробовал косвенно в excel и пытался вставить «=» в VBA - тоже не помогает. В настоящее время работает только ручной переход к ячейке и ввод = для каждой строки, но у меня есть 20000 таких строк, и я не могу изменить источник ввода или формат. Должен быть лучший способ сделать это...

Вам может быть интересно: stackoverflow.com/q/53315486/4961700

Solar Mike 19.04.2023 15:01
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
1
1
91
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы должны перебрать каждую строку в столбце A с помощью VBA, оценить выражение каждой строки, а затем ввести результат в столбец B. Чтобы помочь вам, рассмотрим следующий пример:

Sub Values()
    Dim lastRow As Long
    Dim i As Long
    Dim formula As String
    Dim result As Variant
    
    lastRow = Range("A" & Rows.Count).End(xlUp).Row 
    For i = 1 To lastRow 
        formula = Range("A" & i).Value 
        result = Evaluate(formula) 
        Range("B" & i).Value = result 
    Next i
End Sub 
Ответ принят как подходящий

Если строка содержит допустимый расчет, Application.Evaluate будет работать. Однако VBA предполагает, что в числах используется десятичная точка, а не запятая (запятая интерпретируется как разделитель параметров) — по этой причине вы получаете ошибку 2015.

Так что, возможно, используйте такую ​​​​функцию:

Function CalculateFormula(ByVal f As String) 
    f = Replace(f, ",", ".")
    CalculateFormula = Application.Evaluate(f)
End Function

Это сработало - проблема была с запятой / десятичной дробью - большое спасибо!

V_H 19.04.2023 15:41

Пытаться:

Public Sub test()

    Dim i As Long, LastRow As Long
    
    'Refer to the specific worksheet
    With ThisWorkbook.Worksheets("Sheet1")
        'Get last row of column A
        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row
        
        'Loop all values
        For i = 1 To LastRow
            'Replace extra spaces with nothing, replace "," with "." and evaluate the formula
            .Range("B" & i).Value = Evaluate(Replace(Replace(.Range("A" & i).Value, ",", "."), " ", ""))
        Next i
        
    End With
    
    
End Sub

Без VBA:

Формула в B1:

=EVAL(A1)

Где EVAL() — именованная функция, которая относится к:

=LAMBDA(x,EVALUATE(x))

Другие вопросы по теме