lrt088
Goto Top

Excel evtl. VB Zeichen X zählen und Summe in eine extra Tabelle eintragen

Mehrere Excel Dateien, die jeweils ein oder mehrere X-Zeichen enthalten kann, auf 72 Zellen verteilt.

Hallo,

Datei1 hat eine Tabelle mit 72 Zellen
Datei2 hat eine Tabelle mit 72 Zellen
...

Es soll gezählt und aufgelistet werden, wie viele X bei allen Dateien in der Zelle 1, Zelle 2, ... enthalten sind. Ergebnis in einer neuen Tabelle ausgeben.
neue Tabelle:
Zelle 1 = 12
Zelle 2 = 44
...

Ich bin da noch recht unerfahren. Wäre froh, wenn man mir helfen könnte. Tipps, Anregungen...
Freundlich grüßt
lrt0088

Content-Key: 50108

Url: https://administrator.de/contentid/50108

Printed on: April 23, 2024 at 13:04 o'clock

Member: Biber
Biber Jan 29, 2007 at 15:55:03 (UTC)
Goto Top
Moin lrt088,

willkommen im Forum.

Vermutlich hat so lange keine/r auf Deine Frage geantwortet, weil noch eine wesentliche Detailangabe fehlt.
[Oder weil noch alle Lachtränen in den Augen haben wegen der ersten M$-Vi$ta-Feedbacks...]

JHowever, was mir fehlt, um eine sinnvolle Strategie vorzuschlagen, ist die Info, ob es denn um namentlich bekannte (handverlesene) Dateien Datei1.xls, Datei2.xls etc handelt

-oder-
ob es denn täglich/stündlich wechselnde Dateien mit "zufälligen" Dateinamen z.B. aus einem Log-Verzeichnis handelt.

Im ersten Fall (jede Datei ist einzeln anzugeben und angegeben), dann würde ich eine einfache neue Summentabelle aufmachen, in der von Hand jeweils die Formel eingetragen wird:
=ZÄHLENWENN([Datei1.xls]!Mappe1.A:Datei1.xls]!Mappe1.A;"*X*")
-bzw- für Sparsame
=ZÄHLENWENN([Datei1.xls]!Mappe1.A1:Datei1.xls]!Mappe1.A72;"*X*")

...diese Formel in die erste Zeile (da sollte dann in Deinem Beispiel 12 herauskommen) usw.

Im zweiten Fall (namentlich nicht bekannte Dateien) wäre der Weg über ein kleines Makro sinnvoller... geleiches Schema, nur dass das ZÄHLENWENN() auf neudeutsch COUNTIF() heißt.

Gruß
Biber
[Edit]...nach bastla's Kommentar..
Sorry, ich hatte es so interpretiert, dass pro Zeile in Spalte A ein oder eben kein Zeichen "x" vorhanden ist...
Die ZÄHLENWENN()-Funktion mit obiger Syntax zählt entsprechend nur die Anzahl Zeilen, die ein "X" enthalten.
[/Edit]
Member: bastla
bastla Jan 29, 2007 at 16:01:56 (UTC)
Goto Top
Hallo lrt0088 und willkommen im Forum!

Damit ich Dich richtig verstehe: In den Zellen A1:A72 jeder Datei befindet sich eine jeweils unterschiedliche Anzahl von "X" (aber keine anderen Zeichen). In einer anderen Datei soll eine Tabelle für jede der Dateien in einer Spalte (also A1:A72 für Datei1, B1:B72 für Datei2) die Anzahl der "X" angeben - richtig?

Sofern diese Annahmen zutreffen, könntest Du folgende Formel verwenden (für alle Zeilen kopieren; analog für "Datei2"):
=LÄNGE([Datei1.xls]Tabelle1!A1)

HTH
bastla

[Edit] @Biber - gehöre wohl auch schon zu den "älteren Leuten" ... [/Edit]
Member: lrt088
lrt088 Jan 30, 2007 at 07:57:54 (UTC)
Goto Top
Hallo biber,
hallo bastla,

vielen Dank für das schnelle Antworten. Die X Zeichen werden von Hand eingetragen, Bewertungsbogen. (1. Hat dir die Freizeit gefallen? sehr gut/gut/befriedigend/... // 2. dfghj? sehr gut/gut/befriedigend/...)

Der erste Teil:
Es gibt insgesamt 72 Zellen, die in jeder Datei die gleiche Position haben und entweder leer sind oder ein X enthalten. (die Fragen stehen in anderen Zelle)

Die Ergebnistabelle:
In einer neuen Datei soll eine Tabelle erstellt werden, die mir sagen kann, wie viele X Zeichen in der Zelle A1 in allen Dateien stehen. Wie viele X Zeichen stehen in der Zelle B1 in allen Dateien? D.h. in der neuen Tabelle soll die Summe angezeigt werden. z.B. zur ersten Frage haben 15 Personen bei "sehr gut" ein X eingetragen.

Hoffentlich habe ich es jetzt besser erklärt face-smile

Grüße
lrt088
Member: bastla
bastla Jan 30, 2007 at 16:05:54 (UTC)
Goto Top
Hallo lrt088!

Vielleicht vorweg eine Vorgangsweise, die ich in dieser Situation wählen würde (obwohl ich versucht hätte, gar nicht erst in diese Situation zu kommen face-wink):

Als ersten und wichtigsten Schritt würde ich alle Bewertungen in einem Blatt zusammenzufassen, wobei ich aus den Spalten Zeilen (Datensätze) erzeugen und jedes "X" durch die Zahl 1 ersetzen würde.
Durch das Zusammenfassen vereinfacht sich eine ev weitere Auswertung (zB: sind genug Fragen beantwortet, um diesen "Fragebogen" überhaupt als valide anzuerkennen, oder sollte er besser aussortiert werden; gibt es Zusammenhänge zwischen den Antworten auf Frage 2 und 7; ...), und ich könnte auch eine große Menge an "Fragebögen" erfassen (bis Office 2003 hat Excel ja nur 256 Spalten pro Tabellenblatt). Außerdem könnte dann auch ein Export in eine Datenbank Deiner Wahl erfolgen.

Das Umwandeln von "X" in 1 ermöglicht das Berechnen einfacher Anzahlen (wie von Dir ursprünglich gewünscht) sogar per "SUMME" (ansonsten gäbe es auch "SUMMENPRODUKT" bzw "Array"-Formeln).

Ein entsprechendes VBA-Programm (Makro) könnte so aussehen:
Option Explicit

Sub Zusammenfassen()
Const sSourcePath As String = "Z:\Fragebogendateien" '######## anpassen ########  
Dim wbGes As Workbook, wbTeil As Workbook
Dim fso As Object, oFile As Object
Dim rNext As Integer

Set wbGes = ActiveWorkbook
Set fso = CreateObject("Scripting.FileSystemObject")  

For Each oFile In fso.GetFolder(sSourcePath).Files
    If LCase(Right(oFile.Name, 4)) = ".xls" Then  
        Application.Workbooks.Open (oFile.Path)
        Set wbTeil = ActiveWorkbook
        wbTeil.Worksheets(1).Activate
        Range("A1:A72").Copy '##################### anpassen ####################  
        wbGes.Worksheets(1).Activate
        rNext = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row + 1
        ActiveSheet.Cells(rNext, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=True
        Application.CutCopyMode = False
    End If
    wbTeil.Close
Next

wbGes.Worksheets(1).Activate
Cells.Replace What:="X", Replacement:="1", LookAt:=xlPart, _  
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
Cells.Replace What:="x", Replacement:="1", LookAt:=xlPart, _  
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
wbGes.Save
MsgBox "Fertig."  
End Sub

Vorgangsweise:

Sammle alle Einzeldateien in einem gemeinsamen Ordner (im Beispiel oben "Z:\Fragebogendateien").

Erstelle eine neue Excel-Datei "Zusammenfassung.xls" und speichere diese nicht im gleichen Ordner wie die Einzeldateien.

Gehe mit Alt-F11 in den VBA-Editor, doppelklicke im Projekt-Explorer (links oben) auf "Diese Arbeitsmappe" und füge den oben stehenden Code ein.

Passe die beiden markierten Positionen an Deine Gegebenheiten an.

Setze den Cursor auf die Zeile "Const ..." und drücke die blaue "Play"-Taste in der Symbolleiste (oder die Taste F5).

Nachdem alle Dateien bearbeitet wurden, erhältst Du den Hinweis "Fertig."

Danach findest Du in der Zusammenfassungsdatei Deine einzelnen Datenspalten als Zeilen wieder (Zeile 1 sollte frei sein - dort kannst Du eine lfd Nummer von 1 - 72 unterbringen; vielleicht fügst Du nach dieser "Überschrift" noch eine Leerzeile ein (damit beim n#chsten Schritt nicht irrtümlich die Nummer mitgerechnet wird).

Jetzt kannst Du durch Summierung die Anzahl der ursprünglichen "X" in den einzelnen Spalten bestimmen.

Falls Dir diese Vorgangsweise nicht zusagt, bitte um Rückmeldung.

Grüße
bastla
Member: lrt088
lrt088 Jan 31, 2007 at 12:54:26 (UTC)
Goto Top
Hallo bastla,

ich bin noch mit dem Verstehen Deiner Antwort beschäftigt face-smile. Jedenfalls sieht die Struktur des Fragebogens so aus:

Zelle A10 = Frage 1
Zelle A11 = Sehr gut
Zelle B11 = X oder leer
Zelle C11 = Gut
Zelle D11 = X oder leer
Zelle E11 = Befriedigend
Zelle F11 = X oder leer
usw.

Zelle A13 = Frage 2
Zelle A14 = Sehr gut
Zelle B14 = X oder leer
Zelle C14 = Gut
Zelle D14 = X oder leer
Zelle E14 = Befriedigend
Zelle F14 = X oder leer
usw.

- die Summe, wieviele z.B. auf die Frage 1 ein X bei "gut" gesetzt haben, ist das Hauptziel

- wieviele Fragen und welche Fragen unbeantwortet blieben wäre schön, wenn dies in der Ergebnis-Datei auch mit angezeigt werden könnte

- das Ergebnis braucht in keine Datenbank

- Zusammenhänge zwischen den Antworten der Fragen braucht nicht berücksichtigt werden

Grüße
lrt088
Member: bastla
bastla Jan 31, 2007 at 13:29:58 (UTC)
Goto Top
Hallo lrt088!

Da hatte ich Dich falsch interpretiert, da ich angenommen hatte, alle "Antwort"-Zellen stünden untereinander und würden nur ein "X" (oder vielleicht auch "x") für "ja" enthalten oder bei einem "nein" leer geblieben sein ...

Außerdem war ich von nur einem "Fragebogen" je Datei ausgegangen (so als hätte jede/r Befragte eine eigene Datei erhalten und diese "ausgefüllt" retourniert).
Jetzt sieht es für mich so aus, dass also je Datei die Zellen B11, B14, B17, ... , B224 und analog die Spalten D, F, H, J, L die Ergebnisse enthalten - richtig? Ist sicher gestellt, dass diese Zellen nur entweder leer oder mit "X" gefüllt sind, oder soll angenommen werden, dass jede nicht leere Zelle als "angekreuzt "gilt?

Falls ich das richtig erfasst habe, als neuer Vorschlag:
Ergebnisdatei mit je einer Zeile pro Antwortdatei, in Spalte A (als Rückbezug) der Dateiname, ab Spalte B 72 Zellen mit den Antworten (auf 72 Fragen) in numerischer Form, also 0 für "nicht beantwortet", 1 für "Sehr gut", ... Bei Mehrfachantworten wäre dann der Inhalt zB 34 (diese Zellen ließen sich danach per "Bedingter Formatierung" sehr leicht farblich kennzeichnen - die Zellen mit Inhalt 0 natürlich ebenso).

Die Auswertung könnte danach mit "ZÄHLENWENN" erfolgen, um spaltenweise die Häufigkeiten feststellen zu können.

Soll ich auf dieser Basis einen Versuch machen?

Grüße
bastla

[Edit] Zelladressen B11, B14, ... korrigiert [/Edit]
Member: lrt088
lrt088 Jan 31, 2007 at 15:17:11 (UTC)
Goto Top
Hallo bastla,

sorry, ich hätte das gleich genau sagen müssen.

Zitat:
"Außerdem war ich von nur einem "Fragebogen" je Datei ausgegangen (so als hätte jede/r Befragte eine eigene Datei erhalten und diese "ausgefüllt" retourniert)."

- das ist richtig

Zitat:
"Jetzt sieht es für mich so aus, dass also je Datei die Zellen B11, B14, B17, ... , B224 und analog die Spalten D, F, H, J, L die Ergebnisse enthalten - richtig?"

- ja, pro Frage gibt es 6 Antworten zur Auswahl. Nur eine darf man wählen.

Zitat:
"Ist sicher gestellt, dass diese Zellen nur entweder leer oder mit "X" gefüllt sind, oder soll angenommen werden, dass jede nicht leere Zelle als "angekreuzt "gilt?"

- Falsches auswählen ist möglich. wenn man die falsch ausgefüllten Fragen markieren kann, wäre das natürlich noch einen Schritt edler. Bevor es dir zuviel wird, lass es weg.

Zuerst waren es 12 Fragen, jetzt sind es 20 Fragen. Mehr wird es nicht. Pro Fragen 6 Antwortmöglichkeiten = 120 Zellen, die entweder X oder leer sind.

Ich bin wirkliche gespannt, wie so etwas in VBA oder Excel Formel aussieht.

Grüße
lrt088
Member: bastla
bastla Jan 31, 2007 at 15:33:51 (UTC)
Goto Top
Hallo lrt088!

Ich hatte schon auf Verdacht ein wenig mit folgendem Ergebnis experimentiert:
Option Explicit

Sub Zusammenfassen()
Const sSourcePath As String = "Z:\Fragebogendateien" '######## anpassen ########  
Const intErsteZeile = 3 'der Tabelle mit der Zusammenfassung  
Const intAnzahlFragen = 20
Const intAnzahlAuspr = 6

Dim wbGes As Workbook, wbTeil As Workbook
Dim fso As Object, oFile As Object
Dim intZeile As Integer, i As Integer, j As Integer
Dim strVon As String, strBis As String
Dim astrAntwort(intAnzahlFragen) As String

Set wbGes = ActiveWorkbook
Set fso = CreateObject("Scripting.FileSystemObject")  

For i = 1 To intAnzahlFragen
    With wbGes.Worksheets(1).Cells(intErsteZeile, i + 1)
        .FormulaR1C1 = "Frage" & Chr(10) & CStr(i)  
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlTop
        .ColumnWidth = 5
    End With
Next

intZeile = intErsteZeile + 2
For Each oFile In fso.GetFolder(sSourcePath).Files
    If LCase(Right(oFile.Name, 4)) = ".xls" Then  
        Application.Workbooks.Open (oFile.Path)
        Set wbTeil = ActiveWorkbook
        For i = 1 To intAnzahlFragen
            astrAntwort(i) = ""  
            For j = 1 To intAnzahlAuspr
            If wbTeil.Worksheets(1).Cells(i * 3 + 8, j * 2).Value <> "" Then  
                astrAntwort(i) = astrAntwort(i) & CStr(j)
            End If
            Next
            If astrAntwort(i) = "" Then astrAntwort(i) = "0"  
        Next
        wbGes.Worksheets(1).Cells(intZeile, 1).Value = oFile.Name
        For i = 1 To intAnzahlFragen
            wbGes.Worksheets(1).Cells(intZeile, i + 1).Value = astrAntwort(i)
        Next
    End If
    wbTeil.Close
    intZeile = intZeile + 1
Next

wbGes.Worksheets(1).Activate
With Range(Cells(intErsteZeile + 2, 2), Cells(intZeile - 1, intAnzahlFragen + 1))
    .FormatConditions.Delete
    .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="0"  
    .FormatConditions(1).Interior.ColorIndex = 19
    .FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, Formula1:="6"  
    .FormatConditions(2).Interior.ColorIndex = 34
End With

strVon = "R" & CStr(intErsteZeile + 2) & "C"  
strBis = "R" & CStr(intZeile - 1) & "C"  

For j = 0 To intAnzahlAuspr + 1
    With wbGes.Worksheets(1).Cells(intZeile + 1 + j, 1)
        .Value = j
        .HorizontalAlignment = xlLeft
    End With
    For i = 1 To intAnzahlFragen
        If j <= intAnzahlAuspr Then
            wbGes.Worksheets(1).Cells(intZeile + 1 + j, i + 1).FormulaR1C1 = _
                "=COUNTIF(" & strVon & ":" & strBis & ",RC1)"  
        Else
            wbGes.Worksheets(1).Cells(intZeile + 1 + j, i + 1).FormulaR1C1 = _
                "=COUNTIF(" & strVon & ":" & strBis & ","">=""&RC1)"  
            wbGes.Worksheets(1).Cells(intZeile + 1 + j + 2, i + 1).FormulaR1C1 = _
                "=SUM(R" & CStr(intZeile + 1) & "C:R[-2]C)"  
        End If
    Next
Next

wbGes.Save
MsgBox "Fertig."  
End Sub
In dieser Fassung werden alle Bewertungszellen, die nicht leer sind, gezählt (auch wenn Dir jemand ein "U" für ein "X" vorgemacht haben sollte face-wink).

Die jeweiligen Anzahlen (von "0" für nicht beantwortet bis "7" für Mehrfachantwort) werden eingetragen und zur Kontrolle werden alle Anzahlen addiert - diese Summe müsste in jeder Spalte mit der Zahl der Fragebögen übereinstimmen.

Die Beschreibung der Vorgangsweise (siehe oben) zur Verwendung des Programms (bis "Fertig.") gilt weiterhin.

Grüße
bastla
Member: lrt088
lrt088 Feb 01, 2007 at 12:10:46 (UTC)
Goto Top
Hallo bastla,

ich bin noch dabei das auszuprobieren. Das dauert noch face-smile

Vielen Dank!!

Grüße
lrt088