Autor: Peter Haserodt  --- Aus Excel VBA - Gruppe: Verschiedenes

Spielerei 1: Benutzte Excel Funktionen in einer Arbeitsmappe

Autor: Peter Haserodt - Erstellt: --      - Letzte Revision: --
Benutzte Funktionen in einer Arbeitsmappe

Eine kleine Spielerei, um alle benutzten Excel Funktionen in einer Arbeitsmappe zu ermitteln.

Hinweis: Der Code kann sicherlich noch etwas verfeinert werden, dies überlasse ich aber Ihnen.

Was brauchen Sie dafür?

Nun, erstellen Sie eine neue Mappe mit 2 Tabellenblättern.
Nennen Sie das erste Tabellenblatt Output und das zweite Tabellenblatt Funk
(Sie können dies natürlich später ändern und den Code entsprechend anpassen)

Nun müssen Sie noch nach der Datei
VBALISTE.XLS
auf Ihrer Festplatte suchen.

Öffnen Sie diese und wählen Sie dort das Blatt Tabellenfunktionen.

Kopieren Sie nun die Deutschen Funktionen beginnend mit der ersten Funktion (Abrunden) in die Tabelle Funk, beginnend in A1, diese sieht dann etwa so aus: Ausschnitt:
Funk
 A
1ABRUNDEN
2ABS
3ACHSENABSCHNITT
4ADRESSE
5ANZAHL
6ANZAHL2
7ANZAHLLEEREZELLEN
 

Jetzt können sie die VBAListe.xls wieder schließen.

Fügen Sie nun ein allgemeines Modul in Ihre Mappe:

Option Explicit
'Code Peter Haserodt 2005

' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
'Vorbemerkung
'DieseArbeitsmappe benötigt:
'Tabellenblatt funk in welchem beginnend in A1 die Funktionen nach unten aufgelistet sind (kannn man aus VBAliste.xls holen)
'Tabellenblatt output -> dort wird ausgegeben, kann man anpassen
' !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Dim fFormelFeld As Variant
Dim oSuchRange As Range, sFormlString As String
Dim iAnz As Integer
Public Sub HolDieFormeln()
'Code Peter Haserodt 2005
 Dim oZiel As Worksheet, iFormelCount As Long
 Dim s As String, iCount As Byte, k As Long, iZeitCount As Long, oRa As Range
 Dim oFormelRange As Range, oQuellMappe As Workbook, g As Worksheet
 Redim fFormelFeld(400) ' Nur so, sollte reichen, gegebenenfalls erhöhen
 sFormlString = "|"
 iAnz = 0
 iFormelCount = 0

 Set oZiel = ThisWorkbook.Sheets("output")
 Set oQuellMappe = ActiveWorkbook ' Entsprechend Anpassen
 Set oSuchRange = ThisWorkbook.Sheets("funk").Range("A1").CurrentRegion
 For Each g In oQuellMappe.Worksheets
 On Error Resume Next
 Set oFormelRange = g.Cells.SpecialCells(xlCellTypeFormulas)
 On Error GoTo 0
 If Not oFormelRange Is Nothing Then
 For Each oRa In oFormelRange
 iFormelCount = iFormelCount + 1
 FuncInFormel oRa.FormulaLocal
 Next oRa
 End If
 Set oFormelRange = Nothing
 Next g
  
 oZiel.Cells.Clear
 oZiel.Range("a1:a401").Value = WorksheetFunction.Transpose(fFormelFeld) ' Lazy
 oZiel.Range("a1").Value = oQuellMappe.Name
 End Sub
Private Function FuncInFormel(DieFormel As String)
'Code Peter Haserodt 2005
 Dim i As Integer, bHoch As Boolean, iKlammer As Integer, sMid As String
 
 Dim sZ As String, sOut As String
 
 For i = Len(DieFormel) To 1 Step -1
  sZ = Mid(DieFormel, i, 1)
  If sZ = """" Then
   If bHoch Then
   bHoch = False
   Else
   bHoch = True
   
   End If
   
  Else ' Nich bh
   If Not bHoch Then
   If iKlammer > 0 Then
    Select Case Asc(LCase(sZ))
     Case 48 To 57, 97 To 122, 246, 252, 228, 223
     Case Else
      sMid = Mid(DieFormel, i + 1, iKlammer - i - 1)
      If InStr(1, sFormlString, "|" & sMid & "|", vbTextCompare) = 0 Then
      If Not (oSuchRange.Find(sMid, lookat:=xlWhole) Is Nothing) Then
      sFormlString = sFormlString & sMid & "|"
      iAnz = iAnz + 1
      fFormelFeld(iAnz) = sMid
      End If
     End If
      iKlammer = 0
      If sZ = "(" Then iKlammer = i
    End Select
   Else
    If sZ = "(" Then
     Select Case Asc(LCase(Mid(DieFormel, i - 1, 1)))
      Case 48 To 57, 97 To 122, 246, 252, 228, 223
      iKlammer = i
     End Select
     
     
    End If
   End If
   End If
  End If
 Next i
 End Function

Öffnen Sie nun eine Arbeitsmappe mit Formeln.
Diese muss die aktive Arbeitsmappe sein. (Dies können Sie sich dann selbst im Code anpassen)
Nach Start der Prozedur Public Sub HolDieFormeln() werden die Funktionen in das Tabellenblatt Output geschrieben.

Selbstverständlich können Sie sich den Code anpassen und dynamisieren.

Dies überlasse ich dann aber Ihnen (Auch zusätzliche Funktionen noch mit aufzunehmen, z.B. Analysefunktionen etc... dafür müssen Sie einfach nur die Funktionsliste erweitern).


Weitere Artikel der Gruppe: Verschiedenes Aus Excel VBA
Nach oben