Этот код VBA не получит никаких наград, но это О.К. для быстрого просмотра типичных формул. Он просто делает то, что вы делаете с паренами или разделителями вручную. Вставьте его в модуль кода и вызовите его из командной строки непосредственного окна VBA. (РЕДАКТИРОВАТЬ: мне недавно пришлось взглянуть на некоторые формулы, и я улучшил то, что было здесь, из своего первоначального ответа, поэтому я вернулся и изменил его.)
Public Function ppf(f) As String
Dim formulaStr As String
If IsObject(f) Then
Debug.Assert TypeOf f Is Range
Dim rng As Range
Set rng = f
formulaStr = rng.Formula
Else
Debug.Assert VarType(f) = vbString
formulaStr = f
End If
Dim tabs(0 To 99) As Long
Dim tabNum As Long
tabNum = 1
Dim tabOffset As Long
Dim i As Long
Dim c As String
For i = 1 To Len(formulaStr)
c = Mid$(formulaStr, i, 1)
If InStr("({", c) > 0 Then
ppf = ppf & c
tabNum = tabNum + 1
tabs(tabNum) = tabs(tabNum - 1) + tabOffset + 1
tabOffset = 0
ppf = ppf & vbCrLf & Space(tabs(tabNum))
ElseIf InStr(")}", c) > 0 Then
tabNum = tabNum - 1
tabOffset = 0
ppf = ppf & c & vbCrLf & Space(tabs(tabNum))
ElseIf InStr("+-*/^,;", c) > 0 Then
tabOffset = 0
ppf = ppf & c & vbCrLf & Space(tabs(tabNum))
Else
ppf = ppf & c
tabOffset = tabOffset + 1
End If
Next i
End Function
Если вы называете это так:
?ppf([q42])
вам не нужно беспокоиться о том, чтобы избежать двойных кавычек и так далее. Вы получите вывод, который выглядит следующим образом:
AC6+
AD6+
(
IF(
H6="Yes",
1,
IF(
J6="Yes",
1,
0)
)
)
+
IF(
X6="Yes",
1,
0)
Вы также можете назвать его простой строкой.