Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Zeilen einfügen mit VBA

Mitglied: CSS1977

CSS1977 (Level 1) - Jetzt verbinden

28.05.2009, aktualisiert 21:27 Uhr, 5224 Aufrufe, 10 Kommentare

Zeilen einfügen mit VBA in Excel

Hallo zusammen,

ich habe folgendes Problem: Meine Exceldatei besteht aus 3 Spalten (Kalenderwoche, Titel, Verkäufe) und sieht beispielsweise wie folgt aus:


KW Titel Verkäufe
1 a 8
2 a 7
3 a 6
4 a 5
5 a 3
7 a 12
2 b 8
3 b 7
4 b 4
6 b 3
8 b 2


Ich möchte diesen Datensatz nun erweitern, indem Kalenderwochen hinzugefügt werden, wo es keine Verkäufe gibt (bei Titel a ist es Kalenderwoche 6, bei Titel b ist es Kalenderwoche 5 und 7). Lediglich die erste Kalenderwoche ist variabel, d.h. Titel b kann mit der 2. Kalenderwoche anfangen. Wichtig wäre mir zudem, dass die Verkäufe für die hinzugefügten Kalenderwochen eine Null erhalten und der Titel in der neuen Zeile mit kopiert wird. Der finale Datensatz sollte dann folgendermaßen aussehen:

KW Titel Verkäufe
1 a 8
2 a 7
3 a 6
4 a 5
5 a 3
6 a 0
7 a 12
2 b 8
3 b 7
4 b 4
5 b 0
6 b 3
7 b 0
8 b 2

Es wäre super, wenn mir jemand einen Tipp geben könnte, ich hoffe, ich habe mich verständlich ausgedrückt.

Viele Grüße
Mitglied: bastla
29.05.2009 um 15:15 Uhr
Hallo CSS1977 und willkommen im Forum!

Unter der Annahme, dass die Zeilen nach Titel und innerhalb des Titels nach KW sortiert sind, könnte das so gehen:
[Edit] Auf Anregung von didi1954 Sortierung hinzugefügt [/Edit]
01.
Sub EinfKW() 
02.
Set StartAdresse = Range("A2") 
03.
 
04.
StartAdresse.CurrentRegion.Sort Key1:=StartAdresse.Offset(0, 1), Key2:=StartAdresse, Order1:=xlAscending, Order2:=xlAscending, Header:=xlYes 
05.
 
06.
AbZeile = StartAdresse.Row 
07.
AbSpalte = StartAdresse.Column 
08.
 
09.
Zeile = AbZeile 
10.
Do While Cells(Zeile, AbSpalte) <> "" 
11.
    KW = Cells(Zeile, AbSpalte) 
12.
    Titel = Cells(Zeile, AbSpalte + 1) 
13.
    If Titel = LetzterTitel Then 
14.
        If KW <> LetzteKW + 1 Then 
15.
            KW = LetzteKW + 1 
16.
            Rows(Zeile).Insert 
17.
            With Cells(Zeile, AbSpalte) 
18.
                .Value = KW 
19.
                .Offset(0, 1) = Titel 
20.
                .Offset(0, 2) = 0 
21.
            End With 
22.
        End If 
23.
    End If 
24.
    LetzterTitel = Titel 
25.
    LetzteKW = KW 
26.
    Zeile = Zeile + 1 
27.
Loop 
28.
End Sub
Die Zeile 2 legt die erste Zelle des Datenblocks fest.

Grüße
bastla
Bitte warten ..
Mitglied: 76109
29.05.2009 um 21:47 Uhr
Gelöscht.
Bitte warten ..
Mitglied: bastla
29.05.2009 um 21:55 Uhr
Hallo didi1954!

Schön - bis auf die Tatsache, dass unnötig ("Lediglich die erste Kalenderwoche ist variabel, d.h. Titel b kann mit der 2. Kalenderwoche anfangen.") eine Zeile für KW 1, Titel "b" eingefügt wird, und bei Änderung der Startzelle eine Menge Konstanten (Spaltenindizes!) anzupassen sind ...

Grüße
bastla

[Edit] Zählung der zu ändernden Konstanten von ursprünglich 4 gändert [/Edit]
Bitte warten ..
Mitglied: 76109
29.05.2009 um 22:10 Uhr
Gelöscht.
Bitte warten ..
Mitglied: bastla
29.05.2009 um 22:14 Uhr
@76109
Was meinst Du mit Startzelle 4
4 war nur das Ergebnis der ersten (oberflächlichen) Zählung von Konstanten (mittlerweile komme ich auf einige mehr und habe daher meinen Kommentar editiert), die anzupassen wären, wenn zB die Daten ab Zelle C5 eingetragen wären ...

Grüße
bastla
Bitte warten ..
Mitglied: 76109
29.05.2009 um 22:59 Uhr
Hallo bastla!

Stimmt. Das wäre natürlich ein Problem, wenn die Angaben im Beitrag nicht zutreffend sind.
Um diesem Risiko aus dem Weg zu gehen, ziehe ich es vor meinen Code zu entfernen

Gruß Dieter
Bitte warten ..
Mitglied: bastla
29.05.2009 um 23:03 Uhr
@76109
Um diesem Risiko aus dem Weg zu gehen, ziehe ich es vor meinen Code zu entfernen
Fände ich schade - warum versuchst Du nicht eher, ihn zu parametrisieren (etwa unter Verwendung von "Offset" oder zB "Resize" bei der Zuweisung des Arrays)?

Grüße
bastla
Bitte warten ..
Mitglied: 76109
30.05.2009 um 13:49 Uhr
Hallo bastla!

Zitat von bastla:
warum versuchst Du nicht eher, ihn zu parametrisieren

Also gut, dann aber gleich mit der automatischen Suche nach dem Datensatz

01.
Sub InsertKW() 
02.
    Dim Daten As Object, SortR As Range, Sort1 As Range, Sort2 As Range, Titel As String 
03.
    Dim KW As Integer, k As Integer, t As Integer, v As Integer, z As Integer 
04.
     
05.
    Set Daten = Rows.Find("Titel", LookAt:=xlPart): If Daten Is Nothing Then Exit Sub 
06.
     
07.
    With Daten 
08.
        If .CurrentRegion.Columns.Count <> 3 Or .CurrentRegion.Rows.Count = 1 Then Exit Sub 
09.
        Set Sort1 = Range(.Cells.Address) 
10.
        Set Sort2 = Range(.Offset(0, -1).Address) 
11.
        Set SortR = Range(.CurrentRegion.Address) 
12.
        t = .Column:  k = t - 1:  v = t + 1:  z = .Row + 1 
13.
    End With 
14.
     
15.
    SortR.Sort Key1:=Sort1, Key2:=Sort2, OrderCustom:=1, Header:=xlYes 
16.
     
17.
    Do Until Cells(z, t) = "" 
18.
        If Titel <> Cells(z, t) Then Titel = Cells(z, t): KW = 1 
19.
        If Cells(z, k) <> KW Then Rows(z).Insert:  Range(Cells(z, k), Cells(z, v)) = Array(KW, Titel, 0) 
20.
        z = z + 1: KW = KW + 1 
21.
    Loop 
22.
End Sub
Gruß Dieter

PS. Sort [xlAscending] ist Standard

[Edit]
Soll stets der erste KW-Eintrag pro Titel als Basis genommen werden, z.B. Titel = b und KW = 2, dann die Zeile 18 durch diese Zeile ersetzen
01.
If Titel <> Cells(z, t) Then Titel = Cells(z, t):  KW = Cells(z, k)
[/Edit]
Bitte warten ..
Mitglied: bastla
30.05.2009 um 15:58 Uhr
@76109
Freut mich, dass Du Dir die Mühe gemacht und einen noch besseren Ansatz gefunden hast.

PS. Sort [xlAscending] ist Standard
Ich weiß das - aber Excel ...

Versuch mal, zB die Daten in der Tabelle nach der Spalte "Verkäufe" absteigend und nach "KW" aufsteigend zu sortieren, und danach die Sortierung per VBA ohne Angabe der "Order" ...

Grüße
bastla
Bitte warten ..
Mitglied: 76109
30.05.2009 um 16:08 Uhr
Hallo bastla!

Zitat von bastla:
Freut mich, dass Du Dir die Mühe gemacht und einen noch besseren Ansatz gefunden hast.
Na, wenn Du zufrieden bist, dann bin ich es auch
Versuch mal, zB die Daten in der Tabelle nach der Spalte "Verkäufe" absteigend > und nach "KW" aufsteigend zu sortieren
In dem Fall wird es wohl nicht funktionieren?

Gruß und schöne Pfingsten
Dieter
Bitte warten ..
Ähnliche Inhalte
VB for Applications
VBA Formel einfügen
Frage von Gimli3311VB for Applications4 Kommentare

Guten Tag Zusammen, ich bin es mal wieder und brauche eure Hilfe. Problem: Ich möchte die Termintreue angezeigt bekommen ...

VB for Applications

Excel VBA Formel "WENN" einfügen

gelöst Frage von chef1568VB for Applications2 Kommentare

Hallo zusammen, ich möchte per Excel-Makro folgende Formel eintragen: EXCEL: VBA: Leider bekomme ich hier immer einen anwendungsrelevanten Fehler ...

Basic

Formeln in VBA Code einfügen

gelöst Frage von Dett18Basic6 Kommentare

Hallo liebe Excel VBA Gemeinde, ich habe hier eine Buchungsdatei, die mit Daten einer Rechnung gefüllt wird. Da ich ...

JavaScript

Zeile mit JS einfügen

gelöst Frage von lord-iconJavaScript3 Kommentare

Ich bau an ein JS Script, was mir eine Zeile einfügt (klappt mitunter auch). Siehe hier: 3 Probleme habe ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 21 StundenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 21 StundenSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 1 TagDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein Beitrag bei Heise (siehe Link folgend). Behörden ignorieren Sicherheitsbedenken gegenüber ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 1 TagSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
Exchange Server
Exchange Postfach Einbindung Betriebs-rat -Arzt, Bewerbung .
gelöst Frage von YellowcakeExchange Server23 Kommentare

Hey ich habe da mal eine Denksport Aufgabe bekommen Genutzt wird ein Exchange Server 2010. hier gibt es den ...

Windows Server
Delgegierte OU via RDP verwalten - Objektverwaltung zuweisen
gelöst Frage von TOAOICEWindows Server12 Kommentare

Hallo, ich habe folgendes Problem. Ich möchte in meiner Domäne (Server2016), einer Gruppe (OUAdmin) Berechtigungen auf die OU Test ...

LAN, WAN, Wireless
Gigabit-Lan mit zwei 4-adrigen Kabeln?
Frage von ArvedirmerLAN, WAN, Wireless11 Kommentare

Ich habe folgendes Problem: Ich betreue eine kleine Firma die sich im 1.Stock eines Gebäudes befindet. Es existiert ein ...

Router & Routing
Routing Probleme mit Firewall
gelöst Frage von mb1811Router & Routing9 Kommentare

Hallo Zusammen! Ich habe folgende Problematik, wo ich ein wenig Input benötige: Gem. angehängter Skizze habe ich folgenden Stand: ...