Autor
|
Thema: Berichtsheft schreiben (1408 mal gelesen)
|
Steve12 Mitglied Bürokaufmann
Beiträge: 3 Registriert: 14.11.2015
|
erstellt am: 14. Nov. 2015 15:55 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe ein Problem mit Makros. Ich habe auf einem Excel sheet 20 Texteinträge die ich immer zufällig auswählen will. Anschließend möchte ich den gefunden Eintrag kopieren und in ein anderes Programm einfügen lassen. Besser wäre wenn gleich 5 Einträge ausgewählt und kopiert werden, damit ich Sie in eine andere Auswahl einfügen kann. Mein Quelltext sieht momentan so aus: Dim r As Range, zufallszelle As Integer, zufallsbereich As Integer Set r = Range("A1:a20").SpecialCells(xlCellTypeConstants) 'merke dir nur befüllte Zellen (hier nur Konstanten, formeln würden ignoriert) Range("A1:a20").ClearFormats ' löscht die Formatierung (hilfreich, wenn man Zelle farbig makiert zufallsbereich = Int(Rnd() * r.Areas.Count) + 1 'Ermittle, aus wievielen Bereichen die befüllten Zellen bestehen und suche dir irgendeine aus (RND-Funktion) zufallszelle = Int(Rnd() * r.Areas(zufallsbereich).Cells.Count) + 1 'Such dir aus dem beliebigen Bereich irgendeine Zelle aus r.Areas(zufallsbereich).Cells(zufallszelle).Activate 'Aktiviere die zufallszelle im Zufallsbereich r.Areas(zufallsbereich).Cells(zufallszelle).Interior.ColorIndex = 4 Kann mir jemand weiterhelfen. ???? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 14. Nov. 2015 17:56 <-- editieren / zitieren --> Unities abgeben: Nur für Steve12
Hallo Steve12, Willkommen im Forum Zu Deiner Frage: Warum machst Du Dir nicht einfach ein Variablenfeld in das Du die Werte hineinschreibst? Damit kannst Du dann machen was Du möchtest, an ein anderes Programm übergeben oder einen anderen Tabellenbereich füllen. Stellt sich nur die Frage, darf in einer 5er-Auswahl eine Zelle auch mehrfach übernommen werden? Wenn nicht müßte man die bereits ausgewählten dahingehend auch noch mal untersuchen. Grüße Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steve12 Mitglied Bürokaufmann
Beiträge: 3 Registriert: 14.11.2015
|
erstellt am: 14. Nov. 2015 19:15 <-- editieren / zitieren --> Unities abgeben:
|
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 14. Nov. 2015 21:46 <-- editieren / zitieren --> Unities abgeben: Nur für Steve12
Hey, Bin mir jetzt nicht ganz sicher, hat Dir der vorherige Hinweis schon geholfen oder brauchst Du weitere Unterstützung. Ich habe so ein wenig das Gefühl, dass dies Dein erstes Makro ist Nebenbei bemerkt: Wenn Du keine Mehrfachauswahl hast brauchst Du den Area-Bereich nicht und der Zufallsbereich wird nie andere Werte als 1 (=Spalte A) annehmen. Man könnte die Zelle also auch direkt über cells(Zeile,Spalte) also cells(zufallszelle,1) ansprechen. Grüße Klaus
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Steve12 Mitglied Bürokaufmann
Beiträge: 3 Registriert: 14.11.2015
|
erstellt am: 15. Nov. 2015 15:05 <-- editieren / zitieren --> Unities abgeben:
Hey, ja war mein erstes Makro. Hab ne Lösung gesucht um Texteinträge zufällig auswählen zu können. Hab auch das mit dem Aufnehmen von Makros und auch das was Sie meinten bezüglich Variablenfeld nicht ganz verstanden. Gibt es nun ne Möglichkeit, dass immer 5 unterschiedliche Einträge farblich durch Makro markiert werden und kopierbar sind ? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin
Beiträge: 2624 Registriert: 02.05.2006 Office 2010; Office365 Visual Basic
|
erstellt am: 15. Nov. 2015 17:31 <-- editieren / zitieren --> Unities abgeben: Nur für Steve12
Hallo, Ja Möglichkeiten gibt es viele aber dazu müßte man sich einmal mit den Grundlagen der Programmierung beschäftigen Wie eine (von vielen anderen) Lösung aussehen könnte siehst Du hier im Code:
Code: Sub Zufalltext() Dim r As Range Dim Zufallszelle As Integer Dim Zufallsbereich As Integer Dim L As Long, L1 As Long ' Schleifenvariable Dim sText(5) As String ' hier werden die Texte gespeichert Dim lZelle(5) As Long ' hier wird die Ausgangszelle gemerkt Dim bVorhanden As Boolean Set r = Range("A1:a20").SpecialCells(xlCellTypeConstants) 'merke dir nur befüllte Zellen (hier nur Konstanten, formeln würden ignoriert) Range("A1:a20").ClearFormats ' löscht die Formatierung (hilfreich, wenn man Zelle farbig makiert ' zufallsbereich = Int(Rnd() * r.Areas.Count) + 1 'Ermittle, aus wievielen Bereichen die befüllten Zellen bestehen und suche dir irgendeine aus (RND-Funktion) ' zufallszelle = Int(Rnd() * r.Areas(zufallsbereich).Cells.Count) + 1 'Such dir aus dem beliebigen Bereich irgendeine Zelle aus ' r.Areas(zufallsbereich).Cells(zufallszelle).Activate 'Aktiviere die zufallszelle im Zufallsbereich ' r.Areas(zufallsbereich).Cells(zufallszelle).Interior.ColorIndex = 4 ' Wir wollen mehrere Werte lelsen, das geschieht am einfachsten über eine Schleife For L = 1 To 5 ' 5 Werte werden gebraucht Zufallszelle = Int(Rnd() * r.Cells.Count) + 1 'Such dir aus dem beliebigen Bereich irgendeine Zelle aus ' Ein Wert soll nur übernommen werden, wenn er noch nicht vorhanden ist ' Deshalb werden die vorherigen Werte untersucht bVorhanden = False For L1 = L - 1 To 1 Step -1 ' vom zuletzt gespeicherten bis zum ersten ' Vergleich ob neuer Wert schon vorhanden If lZelle(L1) = Zufallszelle Then bVorhanden = True : Exit For Next L1 If bVorhanden Then L = L - 1 ' Rückstellen des aktuellen Zählers Else ' Übernahme der Werte sText(L) = r.Cells(Zufallszelle, 1) lZelle(L) = Zufallszelle r.Cells(Zufallszelle, 1).Interior.ColorIndex = 4 End If Next L ' Nun können diese Werte in eine andere Spalte geschrieben werden ' z.B. in Spalte C (=3) For L = 1 To 5 Cells(L, 3) = sText(L) Next L ' Hätte man auch über direkt kopieren machen können, dann spart man sich das Textfeld: ' Ergebnis in Spalte D (4) For L = 1 To 5 Cells(L, 4) = Cells(lZelle(L), 1) Next L End Sub
Wenn Du jetzt Interesse daran gefunden hast schau Dir einfach mal die Hilfe an da gibt es auch eine gute prinzipielle Einführung in VBA. Ein Grundwissen über Variable, Schleifen, Abfragen ist schnell erworben und auch leicht zu verstehen. Viel Spaß dabei Klaus Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|