Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1916to1920
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
Inhaltsverzeichnis

VBA für eine Umfrage

VBA für eine Umfrage
18.01.2023 19:54:33
Volker
Hallo,
leider bin ich noch VBA Neuling und mit Excel Formeln lässt sich das Problem nicht lösen.
Für eine Umfrage habe ich eine Formblatt mit Fragen entworfen und mit vielen Hinweisen zum ausfüllen versehen. Die Struktur des Formblatt das man ausfüllen muss ist sehr "Übersichtlich" gestalten und könnte noch angepasst werden.
Die Rang und das Gewicht der Fragen soll dann nach dem ausfüllen des Formblatt in eine Tabelle geschrieben werden. Bzw. aus der Tabelle in das Formblatt zur Korrektur.
Die Tabelle enthält dann die Ergebnisse aus dem Formblatt über mehrere Teams.
Die Tabelle steht dann später für statistische Auswertungen zur Verfügung.
Wie könnten die VBA Schleifen zum übertragen der Daten aussehen?
Vielen Dank für eure Ideen.
Volker
https://www.herber.de/bbs/user/157359.xlsm

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA für eine Umfrage
18.01.2023 20:24:48
Yal
Hallo Volker,
vielleicht so:
Sub lesen()
Dim Z As Range 'Z wie Zelle
Dim tmp
    With Worksheets("Formblatt")
        For Each Z In Intersect(.Range("A:A"), .UsedRange)
            tmp = Split(Z.Value, ".") 'Trennung nach dem Punkt
            If UBound(tmp) = 1 Then
                If InStr(1, "ABCDEFGH", tmp(0)) And IsNumeric(tmp(1)) Then _
                    Ergebnis_hinzufügen .Range("C3").Value, tmp(0), tmp(1), Z.Offset(0, 2).Value, Z.Offset(0, 3).Value
            End If
        Next
    End With
End Sub
Private Function Ergebnis_hinzufügen(ParamArray Werte()) 'Team, Thema, FrageNr, Rang, Gewicht
Dim LO As ListObject
    Set LO = Range("Tabelle1").Parent.ListObjects("Tabelle1") 'Name der intelligente Tabelle an 2 Stellen anpassen.
    With LO.ListRows.Add
        .Range(1).Resize(1, UBound(Werte) + 1) = Werte
    End With
End Function
VG
Yal
Anzeige
Tschuldigung...
18.01.2023 20:30:40
Yal
Ich entdecke gerade, dass die Fragengruppen von A bis K sind.
If InStr(1, "ABCDEFGH", tmp(0)) And IsNumeric(tmp(1)) Then _
muss in
If InStr(1, "ABCDEFGHIJK", tmp(0)) And IsNumeric(tmp(1)) Then _
erweitert werden.
Ich gehe dabei davon aus, dass vor dem Punkt nur diese eine Buchstabe steht und danach einen Zahl.
VG
Yal
AW: Tschuldigung...
19.01.2023 09:59:49
Herbert_Grom
Hallo Yal,
vielen Dank für dieses Lehrstück in VBA-Programmierung! Jetzt weiß ich wieder, dass ich nix weiß! Und das meine ich in vollem Ernst und nicht ironisch, etc. Darauf wäre ich so nicht gekommen. Wirklich spitze!
Servus
AW: Tschuldigung...
19.01.2023 10:55:12
Yal
Hallo Herbert,
vielen Dank für die Blumen. Nicht zweifeln, es kommt nach und nach.
Hochachtung meinerseits, dass Du dir die geposteten Codes vornimmst, um in VBA reinzukommen. Da siehst Du sicher viele verschiedenen Ansätze. Es ist immer schwierig zu sagen, welche gut und welche besser ist.
Das Wesentlich ist das Wissen über die Objekte. Workbook(s), Worksheet(s), Range hat man schnell im Griff. ListObject ist an sich ganz pratisch, weil man weniger Row & Column verwalten muss. Aber es bedarf viel Try&Error bis man es im Griff hat.
Man könnte aber den Code kürzen, weil die Verlagerung der Schreibvorgang in einer separaten Prozedure nicht notwendig ist.
Sub lesen()
Dim Z As Range 'Z wie Zelle
Dim LO As ListObject
Dim Frg, Arr
    Set LO = Range("Tabelle1").Parent.ListObjects("Tabelle1") 'Name der intelligente Tabelle an 2 Stellen anpassen.
    With Worksheets("Formblatt")
        For Each Z In Intersect(.Range("A:A"), .UsedRange)
            Frg = Split(Z.Value, ".") 'Trennung Anhand des Punktes
            If UBound(Frg) = 1 Then
                If InStr(1, "ABCDEFGHIJK", Frg(0)) And IsNumeric(Frg(1)) Then
                    Arr = Array(.Range("C3").Value, Frg(0), Frg(1), Z.Offset(0, 2).Value, Z.Offset(0, 3).Value)
                    LO.ListRows.Add.Range(1).Resize(1, UBound(Arr) + 1) = Arr
                End If
            End If
        Next
    End With
End Sub
Der Weg über den Array "Arr" ist auch nicht notwendig, aber erlaubt mehr Flexibilität, weil man sonst den Anzahl an Spalten in Resize festschreiben müsste.
VG
Yal
Anzeige
AW: Tschuldigung...
19.01.2023 11:43:31
Herbert_Grom
Hallo Yal,
"um in VBA reinzukommen"! Das ist gut! Das schlimme daran ist, dass ich seit 1994 mit Excel/VBA arbeite, seit 1987 mit Basic programmiere und bereits 1975 einen Programmiererlehrgang gemacht habe! Jetzt wirst du sicher überlegen, "wie alt ist denn dann dieser Nichtskönner"? 72! Und deshalb bin ich leicht frustriert, wenn ich deinen genialen Code sehe und weiß, dass ich das so nicht gekonnt hätte! Gut dass du im Forum bist!
Servus
AW: Tschuldigung...
19.01.2023 12:09:13
Yal
Hallo Herbert,
sorry, ich habe mich irgendwo verzettelt. Ich weiss von einem Beitragenden (es könnte neopa C, bin aber nicht sicher), der bereit Formel super Profi ist und gerade erst ins VBA einsteigt. Ich habe diese Erinnerung fälschlicherweise Dir zugeordnet.
In 1984 bin ich auch in die Welt der Programmierung eingetaucht. War aber erst 13. Der Weg führt über Algorythmus-Lehre, Mathematik, Datenmodellierung und sehr sehr viele Stunden Praxis. Davon sehr viele nicht erfolgreiche. Man könnte sagen, man weiss erst was gut ist, wenn man genug Erfahrung mit weniger gut hat.
Effektivität, Klarheit, Einfachheit und nicht zuletzt Schönheit sind tatsätzlich einige von meinen Anstreben beim Codieren. Es ist aber immer ein Abwägen: ist man z.B. zu sehr verkürzt, verliert man Flexibilität, wie z.B. das Auslassen von "Arr". Und was einem schön ist, ist dem anderen zu überfrachtet oder zu asketisch.
VG
Yal
Anzeige
AW: Tschuldigung...
20.01.2023 01:18:20
Volker
Hallo Zusammen,
vielen Dank für die rege Diskussion und insbesondere an Yal für den tollen Code. Aber ich sehe das ich mich voraussichtlich zu weit mit meinen bescheidenen VBA Kenntnissen vor gewagt habe. Die Aufgabe ist doch viel mächtiger als ich gedacht habe.
Ich habe sicher Heute 8 Stunden damit zugebracht die VBA Sub's aufzusetzen die ich benötigen werde und sie sind weit entfernt davon zu funktionieren.
Das Excel-Beispiel spiegelt meinen aktuellen (Wissen-)Stand wieder.
Ich habe es aber insbesondere nicht geschafft den Code von Yal in die entsprechende Sub zu integrieren. Meine Google Recherchen sind gigantisch um hier weiterzukommen. Vielleicht hat wieder jemand eine Idee?
Vielen Dank im Voraus und Gruß
https://www.herber.de/bbs/user/157394.xlsm
Volker

Anzeige
Starthilfe
20.01.2023 09:23:47
Yal
Hallo Volker,
warum "integrieren"? einfach Alt+F8 drücken, Makro "lesen" auswählen, ausführen.
Mehr braucht man nicht.
Die Team-Bezeichnung ist nicht mehr in "C3" sondern "D3".
VG
Yal

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige