Thema Datum  Von Nutzer Rating
Antwort
11.06.2019 11:15:16 Michel
NotSolved
11.06.2019 12:58:52 Gast7777
NotSolved
Rot Ergänzte Formel mit VBA bereinigen
11.06.2019 13:45:12 Gast35610
NotSolved
11.06.2019 14:00:33 Michel
NotSolved
11.06.2019 13:54:38 Gast40457
NotSolved

Ansicht des Beitrags:
Von:
Gast35610
Datum:
11.06.2019 13:45:12
Views:
483
Rating: Antwort:
  Ja
Thema:
Ergänzte Formel mit VBA bereinigen

@Gast7777: Ich würd' mal sagen, dass war nur ein einfaches Beispiel gewesen. ;-)


Beispiel-Tabelle zum Makro unten:

  H
1 =A2+B2+100
2 =A2+B2-100
3 =(A2+B2)*0,5
4 =100+A2+B2
5 =A2-100*B2
Option Explicit

Sub Test()
  
  Dim i As Long
  
  For i = 1 To 5
    With Cells(i, "H")
      'output next to source
      .Offset(, 1).Formula = Remove1stNumeric(.Cells(1))
    End With
  Next
  
End Sub

Public Function Remove1stNumeric(ByVal Expression As Variant) As Variant
  
  Dim col As VBA.Collection
  Dim expr As String
  Dim i As Long
  Dim j As Long
  
  'get formula
  If IsObject(Expression) Then
    If Expression Is Nothing Then Exit Function
    If TypeOf Expression Is Excel.Range Then
      expr = Expression.Formula
    Else
      Exit Function
    End If
  Else
    expr = CStr(Expression)
    If Left$(expr, 1) <> "=" Then expr = "=" & expr
  End If
  
  Set col = New VBA.Collection
  
  'splitting up formula
  j = 2
  col.Add "="
  For i = 1 To Len(expr) + 1
    Select Case Mid$(expr, i, 1)
      Case "+", "-", "*", "/"
        col.Add Mid$(expr, j, i - j)
        col.Add Mid$(expr, i, 1)
        j = i + 1
      Case ""
        col.Add Mid$(expr, j, i - j)
    End Select
  Next
  
  'remove first numeric value only
  For i = 1 To col.Count
    If IsNumeric(col(i)) Then
      If i = 2 Then 'first
        col.Remove 2
        col.Remove 2
      ElseIf i = col.Count Then 'last
        col.Remove col.Count
        col.Remove col.Count
      Else 'mid
        If (col(i - 1) = "-" Or col(i - 1) = "+") _
        And (col(i + 1) = "-" Or col(i + 1) = "+") _
        Then
          col.Remove i - 1
          col.Remove i - 1
        Else
          MsgBox "Formel: '" & expr & "'" & vbNewLine & _
                 "Wert := " & col(i) & vbNewLine & vbNewLine & _
                 "Wert befindet sich zwischen anderen Termen im Produkt/Division." & vbNewLine & _
                 "Was nun!?", _
                 vbExclamation
          Remove1stNumeric = CVErr(XlCVError.xlErrNA)
          Exit Function
        End If
      End If
      Exit For 'first numeric value got removed
    End If
    
  Next
  
  expr = ""
  For i = 1 To col.Count
    expr = expr & col(i)
  Next
  
  Remove1stNumeric = expr
  
End Function

 


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
Thema: Name: Email:



  • Bitte beschreiben Sie Ihr Problem möglichst ausführlich. (Wichtige Info z.B.: Office Version, Betriebssystem, Wo genau kommen Sie nicht weiter)
  • Bitte helfen Sie ebenfalls wenn Ihnen geholfen werden konnte und markieren Sie Ihre Anfrage als erledigt (Klick auf Häckchen)
  • Bei Crossposting, entsprechende Links auf andere Forenbeiträge beifügen / nachtragen
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen

Thema Datum  Von Nutzer Rating
Antwort
11.06.2019 11:15:16 Michel
NotSolved
11.06.2019 12:58:52 Gast7777
NotSolved
Rot Ergänzte Formel mit VBA bereinigen
11.06.2019 13:45:12 Gast35610
NotSolved
11.06.2019 14:00:33 Michel
NotSolved
11.06.2019 13:54:38 Gast40457
NotSolved