Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Excel
  Excel/VBA: Zeichenkombinationen von Einträgen in Array ändern

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Excel/VBA: Zeichenkombinationen von Einträgen in Array ändern (750 / mal gelesen)
Chriss7818
Mitglied


Sehen Sie sich das Profil von Chriss7818 an!   Senden Sie eine Private Message an Chriss7818  Schreiben Sie einen Gästebucheintrag für Chriss7818

Beiträge: 5
Registriert: 03.09.2020

erstellt am: 18. Mai. 2022 17:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


Array.txt


array.JPG

 
Hallo, in die Runde,

seit kurzem beschäftige ich mich mit Arrays und komme bei einer Herausforderung nicht weiter. Ich hoffe, ihr könnt mir einen Tipp geben.


Eine Exceldatei hat 999.999 Einträgen in Reiter 1 (dann fängt mit einer Schleife ein neuer Reiter an, ist hier aber nicht relevant).

Diese Liste wurde aus einer txt-Datei zeilenweise importiert und ist somit als Text in Spalte A (zeile 1 - 999.999) vorzufinden.

Dieser Text in Spalte A soll auf mehrere Spalten gesplittet werden.
Allerdings kann das Komma nicht verwendet werden, da es in einem String vorhanden ist, der nicht getrennt werden darf.

Also muss, nachdem Spalte A komplett in das Array "Zahl" geschrieben wurde, jede Zeile in dem Array Zahl bearbeitet werden:
Das Array "ersetzen" listet Zeichenkombination auf. Diese sollen je Eintrag im Array Zahl durch ein Semikolon ersetzt werden.

Das sieht so aus:

            For g = 0 To UBound(ersetze)
                zahl(i).Replace ersetze(g), ";"
            Next g
           

Als Fehlermeldung kommt:
Laufzeitfehler 424: Objekt erforderlich


Ehrlich gesagt, sieht es schlüssig aus. Aber ein Objekt scheint zu fehlen oder nicht ausreichend deklariert zu sein.

Für den jeden Hinweis bin ich sehr dankbar.

Nachfolgend der Code (auch als Anhang beigefügt)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub dyn_Arr()

'Das Array selbst
    Dim zahl()  'noch keinen Wert zuweisen, da es dynamisch sein soll, es wird daherr im Lokalfenster noch nicht als Array erkannt
   
'Die Variable
    Dim size As Long 'wie lang Array sein
   
'Laufvariable für  Schleife
    Dim i As Long
   
    Dim g As Byte
    Dim n As Byte

'Weise Variable size den Wert zu, wieviel Einträge in Spalte A des ersten Reiters vorhanden sind
    size = WorksheetFunction.CountA(Worksheets(1).Columns(1))
   
   
'Anpassen der Länge des Arrays
    ReDim zahl(size)
   
'Vorschleife, um einzelnen Arraypunkten Werte mitzugeben
    For i = 1 To size
   
        zahl(i) = Cells(i, 1).Value      'jede Zeile im Array einen Wert aus Worksheet zuordnen
       
    Next i

''''''''''''''''
Bis hierhin funktioniert alles
''''''''''''''''


'Beginn das Array zu bearbeiten
    For i = 1 To UBound(zahl, 1)

    'Der Inhalt je Zeile aus Spalte soll in Spalten getrennt werden
    'Allerdings kann das Komma nicht genommen werden, da es teilweise in einem geschlossenen String vorkommt. Daher müssen folgende  Zeichenkombinationen mit einem Semikolon ersetzt werden
   
        'Bereite Trennzeichen vor
            'Neues Array
            ersetze = Array("""", ";,;", ";,", ",;")


''''''''''''
das Lokalfenster erkennt ersetze als Array,
''''''''''''
           
            'Für jeden Eintrag im Array zahl soll eine Schleife laufen, um die Zeichenkombinationen durch ein ; zu ersetzen
            For g = 0 To UBound(ersetze)

''''''''''''''''''''
die nachfolgenden Zeile generiert den Laufzeitfehler
''''''''''''''''''''

                zahl(i).Replace ersetze(g), ";"


            Next g

       
        'Trenne anschließend Text in Spalten
            Text = zahl(i)
            einzelneWorte = Split(Text, ";")
           
            For n = 0 To UBound(einzelneWorte)
                ActiveSheet.Cells(i, n + 10) = einzelneWorte(n)
               
            Next n
    Next i
   
End Sub

Besten Dank und Grüße,
Chriss7819

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Nepumuk
Mitglied
Entwicklungsleiter


Sehen Sie sich das Profil von Nepumuk an!   Senden Sie eine Private Message an Nepumuk  Schreiben Sie einen Gästebucheintrag für Nepumuk

Beiträge: 351
Registriert: 16.10.2004

erstellt am: 18. Mai. 2022 17:56    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Chriss7818 10 Unities + Antwort hilfreich

Hallo Chriss,

kannst du eine Textdatei mit ein paar Beispieldaten hochladen?

------------------
Gruß
Nepumuk 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Sevy4791
Mitglied



Sehen Sie sich das Profil von Sevy4791 an!   Senden Sie eine Private Message an Sevy4791  Schreiben Sie einen Gästebucheintrag für Sevy4791

Beiträge: 70
Registriert: 28.01.2022

E3 2020 SP3 Build 21.30
I9-1295HX 32GB Win10 22H2
Eplan ProPanel 2.9
Eplan 3.3/5.x
Elcad
Fusion360

erstellt am: 19. Mai. 2022 07:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Chriss7818 10 Unities + Antwort hilfreich

Wurde der Befehl Replace geändert oder mach ich das immer falsch?
Meine Schreibweise war bisher immer so.

zahl(i) = Replace(zahl(i), ersetze(g), ";")

Gruss Sevy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Chriss7818
Mitglied


Sehen Sie sich das Profil von Chriss7818 an!   Senden Sie eine Private Message an Chriss7818  Schreiben Sie einen Gästebucheintrag für Chriss7818

Beiträge: 5
Registriert: 03.09.2020

erstellt am: 19. Mai. 2022 11:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Sevy,

der Hinweis ist goldwert.
Besten Dank! Auch für den superschnellen Support.

Ich wünsche einen schönen Tag

Gruß,
Chriss

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Chriss7818
Mitglied


Sehen Sie sich das Profil von Chriss7818 an!   Senden Sie eine Private Message an Chriss7818  Schreiben Sie einen Gästebucheintrag für Chriss7818

Beiträge: 5
Registriert: 03.09.2020

erstellt am: 19. Mai. 2022 11:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke Nepumuk,

es hat sich zwischenzeitlich geklärt.

Gruß,
Chriss

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

Office 2010; Office365
Visual Basic

erstellt am: 22. Mai. 2022 12:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Chriss7818 10 Unities + Antwort hilfreich

Hallo Chriss,

Vielleicht noch kurz zur Erklärung:
Man muß hier unterscheiden zwischen Variablen und Bereichen.
Für Deine Variable zahl(i) muß man die VBA-Funktion Var = Replace(var, find, replace) verwenden.
Dein erster Versuch bezog sich aber auf die Range.Replace Methode. Aber diese benötigt ein Range- und kein Variant-Objekt.

Grüße
Klaus 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Sevy4791
Mitglied



Sehen Sie sich das Profil von Sevy4791 an!   Senden Sie eine Private Message an Sevy4791  Schreiben Sie einen Gästebucheintrag für Sevy4791

Beiträge: 70
Registriert: 28.01.2022

erstellt am: 23. Mai. 2022 07:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Chriss7818 10 Unities + Antwort hilfreich

Hallo Klaus

Danke! Das mit dem Range Objekt kannte ich noch nicht.
Und hätte ich bestimmt auch schon mal brauchen können 

Gruss Sevy

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Chriss7818
Mitglied


Sehen Sie sich das Profil von Chriss7818 an!   Senden Sie eine Private Message an Chriss7818  Schreiben Sie einen Gästebucheintrag für Chriss7818

Beiträge: 5
Registriert: 03.09.2020

erstellt am: 23. Mai. 2022 07:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo, Klaus,

danke für die Erläuterung.
Arrays sind neu für mich. Deine Erläuterung hilft mir, die Fehlermeldung 424 besser zu verstehen 

An dich kann ich mich erinnern. In 2020 hattest du mir auch schon einmal weitergeholfen.
(https://ww3.cad.de/foren/ubb/Forum226/HTML/002110.shtml#000005)

Echt stark!
Danke

Grüße,
Chriss

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

Beiträge: 2624
Registriert: 02.05.2006

Office 2010; Office365
Visual Basic

erstellt am: 23. Mai. 2022 12:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Chriss7818 10 Unities + Antwort hilfreich

Hallo Chriss,
Jetzt war ich gerade etwas verwirrt (Link geht auf diesen Beitrag), habe es aber gefunden
Ist aber auch gemein, wenn man aus Chriss7819 Chriss7818 macht 

Grüße
Klaus 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Chriss7818
Mitglied


Sehen Sie sich das Profil von Chriss7818 an!   Senden Sie eine Private Message an Chriss7818  Schreiben Sie einen Gästebucheintrag für Chriss7818

Beiträge: 5
Registriert: 03.09.2020

erstellt am: 23. Mai. 2022 13:12    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo, Klaus,

Ohje, war kein Absicht. Entschuldige.
Und ja, damals hatte ich Probleme bei der Anmeldung

Viele Grüße,
Chriss

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz