Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
824to828
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Bezüge aus Formel in Textdatei schreiben

Bezüge aus Formel in Textdatei schreiben
06.12.2006 23:23:22
paul
Hallo zusammen,
habe eine Excelmappe mit ca. 50 Blättern.
In den Zellbereichen A1 bis Z50 der einzelnen Blätter stehen einge Formeln =ABRUNDEN('Tabelle1'!M139*Faktor+0,99;0).
Der Pfad in der Formel weist immer auf eine (unterschiedliche) Zelle mit Preisen in Tabelle1.
Kann man per Makro (VBA) ein Tabellenblatt Zeile für Zeile auf Formeln durchsuchen und den Wert (Preis) auf den der Pfad in der Formel verweist dann in eine Textdatei schreiben? Für jedes Tabellenblatt sollte dann noch eine eigene Textdatei entstehen.
Gruß
Paul

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Deine Frage kann definitiv mit JA beant...
07.12.2006 03:06:45
Luc:-?
...wortet wdn, Paul!
Soweit die gute Nachricht! Sicher stellt dich das aber nicht zufrieden, obwohl deine Frage damit beantwortet wäre. ;-) Deshalb noch folgende Draufgabe:
Das kann man auf 2erlei Weise bewerkstelligen - 1. mit Formeln und Funktionen, 2. mit einer VBA-Subprozedur (Makro), die dann idR auch nur für diese eine Aufgabe taugt. Ich persönlich ziehe zumeist die Lösung mit Formeln und Fktt vor (wie die Jungs von ExcelFormeln, nur schreib ich meine Fktt selber), das ist universeller. Und auch dafür habe ich welche, aber es geht vielleicht auch mit Standardfktt, nur aufwändiger - das wären dann 1a und 1b. Und nun noch die schlechte Nachricht: Die Fkttprozeduren sind sehr umfangreich und z.Z. noch nicht in meinem offiziellen Angebot, weshalb ich die hier auch nicht publizieren werde. Für die Erarbeitung einer Subprozedur habe ich leider auch keine Zeit. Aber vielleicht ja jemand anders... (deshalb offen)? Nur noch soviel als Vorgehenstipp:
Mit VBA muss für jede Zelle des Blattes [→ ActiveWorkbook.Sheets("name").Range("adresse") oder besser zyklisch mit .Cells(zeilenindex, spaltenindex)].Formula (engl) oder ...FormulaLocal (dt b.dt Excel) abgefragt wdn und darin nach signifikanten Merkmalen für eine Adressangabe gesucht wdn. Diese kann dann mit Range (wie oben) nach ihrem Wert (.Value) abgefragt wdn (evtl vorher noch Blattnamensverweisteil abtrennen und wie oben ...Sheets("name") davorsetzen. Das Komplizierteste ist dabei die Identifikation der Adressen. Das Andere nur mehr oder weniger Schreibaufwand. So, damit solltest du trotz deines Levels das Ganze schon mal etwas besser einschätzen können. Vielleicht packt dich ja der Ehrgeiz und du willst es selber machen? Dann aber unbedingt mit den Grundregeln der Pgmierung vertraut machen und Schritt für Schritt vorgehen. Unbedingt die VBA-Hilfe in Anspruch nehmen, auch wenn sie mitunter schwerer verständlich ist und oft ziemlich blöde Bspp enthält. Hilfe schreiben macht den Pgmierern halt auch mehr Arbeit als Freude.
Mit Detailfragen kannst du dich dann jederzeit wieder melden - das Ganze ist aber doch etwas zu komplex für eine schnelle Lösung.
Also dann viel Spaß - oder es findet sich doch noch ein Wagemutiger oder Einer, der die Lösung schon in der Tasche hat (aber da lernt man weniger!)?! ;-)
Gruß Luc :-?
Anzeige
AW: Deine Frage kann definitiv mit JA beant...
07.12.2006 16:36:04
fcs
Hallo Paul,
ich frag mich zwar wozu man so etwas braucht, aber des Menschen Wille ist sein Himmelreich.
Hier eine Möglichkeit.
Die Prozedur stellt den Rahmen bereit mit den Funktionen
-Tabellen nacheinander abarbeiten,
-Dateiname der Textdatei festlegen
-Die Zellen im jeweiligen Blatt abarbeiten
-Ergebnis in die Textdatei schreiben
Die Function führt die eigentliche Formelanalyse durch.
Das Ganze muss du noch an deine Bedürfnisse anpassen. In meinem Beispiel werden alle Zellen ausgewertet, die in der Formel den Tabellennamen "Tabelle 1" und die Funktion "ABRUNDEN" enthalten
Gruß
Franz

Sub WerteInTabelle1finden()
Dim wks1 As Worksheet, wks2 As Worksheet, wb As Workbook
Dim Zeile As Long, Spalte As Integer
Dim TextDatei As String, Zelle1 As String, Zelle2 As String, Wert1 As Variant
Set wb = ActiveWorkbook
Set wks1 = wb.Worksheets("Tabelle 1") 'Tabelle auf die in Formeln verwiesen wird
For Each wks2 In wb.Worksheets
If wks2.Name <> wks1.Name Then
'Dateiname der Textdatei generieren
TextDatei = Left(wb.FullName, Len(wb.FullName) - 4) & "_" & wks2.Name & ".txt"
Open TextDatei For Output As #1
For Zeile = 1 To wks2.UsedRange.Row + wks2.UsedRange.Rows.Count - 1
For Spalte = 1 To wks2.UsedRange.Column + wks2.UsedRange.Columns.Count - 1
If wks2.Cells(Zeile, Spalte).HasFormula Then
Zelle1 = FormelAnalyse(wks1.Name, wks2.Cells(Zeile, Spalte).FormulaLocal, "ABRUNDEN")
If Zelle1 <> "" Then
Zelle2 = wks2.Cells(Zeile, Spalte).Address
Wert1 = wks1.Range(Zelle1).Value
'schreibt Daten kommagetrennt in Textfile, so dass mit Input #1, Var1,Var2, Var3 Daten wieder eingelesen werden könnte
'Write #1, Zelle2, Zelle1, Wert1
'schreibt Daten semikolongetrennt zeilenweise in Textfile
Print #1, Zelle2 & ";" & Zelle1 & ";" & Wert1
End If
End If
Next Spalte
Next Zeile
Close #1
End If
Next wks2
End Sub
Private Function FormelAnalyse(Tabelle As String, Formel As String, Optional FormelTeil As String = "") As String
'Tabelle = Name der Tabelle die in der Formel gesucht wird
'Formel = Formel in der auszuwertenden Zelle
'FormelTeil = optionaler Formeltext, der in der Formel auch enthalten sein soll
Dim FormelAuswerten As Boolean
If InStr(1, Formel, Tabelle) > 0 Then
FormelAuswerten = False
If FormelTeil <> "" Then
If InStr(1, Formel, FormelTeil) > 0 Then
FormelAuswerten = True
End If
Else
FormelAuswerten = True
End If
If FormelAuswerten = True Then
'Funktionen für die Formelanalyse sind jeweils individuell anzupassen
FormelAnalyse = Trim(Mid(Formel, InStr(InStr(1, Formel, Tabelle), Formel, "!") + 1, InStr(InStr(1, Formel, Tabelle), Formel, "*") - InStr(InStr(1, Formel, Tabelle), Formel, "!") - 1))
End If
End If
End Function

Anzeige

316 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige