Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
GELÖST

Ganze Zeilen in Sheet vervielfältigen

Frage Entwicklung VB for Applications

Mitglied: ShitzOvran

ShitzOvran (Level 1) - Jetzt verbinden

07.07.2011, aktualisiert 16:46 Uhr, 3059 Aufrufe, 2 Kommentare

ich möchte mittels VBA in Excel Zellen vervielfältigen. Wie oft, wird anhand einer Zelle festgelegt.

Hallo Spezialisten da draußen,

wie man vllt erahnen kann, habe ich ein Problem...
ich habe eine Tabelle indem mehrere Zeilen vorkommen. in der Tabelle sind auch Mengen angegeben (siehe Beispiel)
ad13ae53baa19124c737bb514044aa24 - Klicke auf das Bild, um es zu vergrößern

Jetzt ist es so, dass die Zeilen, die indem die Menge mehr als '1' ist, so oft kopiert werden soll, dass ich im So viele Zeilen habe, dass überall Menge '1' steht.

also im Endeffekt soll es so aussehen:
cc21ddb264f21aa7efb8525683de7c72 - Klicke auf das Bild, um es zu vergrößern

Die Tabelle ist natürlich stark vereinfacht. In den meisten Fällen ist es so, dass ich hunderte Datenasätze mit unzähligen Spalten habe. Ich müsste also irgendwie dynamisch sagen können, in welcher Spalte die Mengen stehen, auf die sich das Skript beziehen soll... (zB: die Spalte der aktiven Zelle, oder so) eine weitere Schwierigkeit ist zudem noch, dass er nach kopieren dann die werte auf 1 ändern soll.. oder evtl, mehrmalig durchgehen soll, und nach jedem kopieren und einfügen den wert herunterzählt und in der neu eingefügten Zelle den Wert '1' einträgt. Natürlich können auch Spaltenüberschriften vorhanden sein... alles sehr kopliziert.

ich habe zwar ein Skript mitdem ich einfach jede Zelle verdoppeln kann, aber das ist in diesem fall wohl eher unbrauchbar,.. aber trotzdem möchte ich euch es nicht vorenthalten:

01.
Sub zeilen_verdoppeln() 
02.
Dim lastrow As Long, i As Long 
03.
Dim wks1 As Worksheet 
04.
 
05.
Set wks1 = ActiveSheet 
06.
lastrow = wks1.Cells(Rows.Count, 1).End(xlUp).Row  'durchgehend genutzte Spalte nutzen 
07.
 
08.
For i = lastrow To 1 Step -1 
09.
    wks1.Rows(i + 1).Insert 
10.
    wks1.Rows(i).Copy wks1.Rows(i + 1) 
11.
Next i 
12.
End Sub

ich hoffe ihr habt irgendeine idee, wie ich anfangen kann

Kurzfristig habe ich das mit einer Formel gelöst, diese ist auf dem zweiten Tabellenblatt.
01.
=INDEX(Tabelle1!A:A;999-SUMMENPRODUKT(N(ZEILE(Tabelle1!A1)<=TEILERGEBNIS(9;BEREICH.VERSCHIEBEN(Tabelle1!D$1;;;ZEILE($1:$999)))))+1)
elegeanter wäre es aber natürlich über ein Skript

mfg
Shitz
Mitglied: bastla
07.07.2011 um 17:18 Uhr
Hallo ShitzOvran!

Du hattest es ja fast schon:
01.
Sub zeilen_verdoppeln() 
02.
Const Spalte = "B" 
03.
 
04.
Dim lastrow As Long, i As Long, Anzahl As Long 
05.
Dim wks1 As Worksheet 
06.
 
07.
Set wks1 = ActiveSheet 
08.
lastrow = wks1.Cells(Rows.Count, TheColumn).End(xlUp).Row  'durchgehend genutzte Spalte nutzen 
09.
 
10.
For i = lastrow To 1 Step -1 
11.
    Anzahl = Cells(i, Spalte).Value 
12.
    If Anzahl <> 1 Then 
13.
        Cells(i, Spalte).Value = 1 
14.
        For j = 1 To Anzahl - 1 
15.
            wks1.Rows(i + 1).Insert 
16.
            wks1.Rows(i).Copy wks1.Rows(i + 1) 
17.
        Next 
18.
    End If 
19.
Next i 
20.
End Sub
Für "Spalte" kannst Du natürlich auch eine Variable und/oder einen numerischen Wert verwenden ...

Grüße
bastla
Bitte warten ..
Mitglied: ShitzOvran
13.07.2011 um 16:19 Uhr
vielen dank,

hab den Code noch ein bisschen angepasst und nu läufts...

ich weiß, nicht schön, aber selten

01.
Sub zeilen_verdoppeln() 
02.
 
03.
Dim Spalte          As String 
04.
Dim lastrow         As Long 
05.
Dim i               As Long 
06.
Dim Anzahl          As Variant 
07.
Dim wks1            As Worksheet 
08.
Application.EnableEvents = False 
09.
 
10.
 
11.
On Error GoTo Fehler 
12.
Spalte = ActiveCell.Column 
13.
Set wks1 = ActiveSheet 
14.
lastrow = wks1.Cells(Rows.Count, 1).End(xlUp).Row 
15.
For i = lastrow To 1 Step -1 
16.
    Anzahl = Cells(i, ActiveCell.Column).Value 
17.
    If IsNumeric(Anzahl) And Anzahl > 1 Then 
18.
            Cells(i, ActiveCell.Column).Value = 1 
19.
        For j = 1 To Anzahl - 1 
20.
            wks1.Rows(i + 1).Insert 
21.
            wks1.Rows(i).Copy wks1.Rows(i + 1) 
22.
        Next 
23.
    End If 
24.
Fehler: 
25.
Next i 
26.
End Sub
Bitte warten ..
Ähnliche Inhalte
Sicherheits-Tools
Sicherheitstest von Passwörtern für ganze DB-Tabellen (1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Batch & Shell
gelöst In allen Textdateien eines bestimmten Pfades die Zeilen x bis Ende löschen (2)

Frage von Schloth zum Thema Batch & Shell ...

Datenbanken
gelöst MSSQL Datenkonvertierung 1 Zeile auf mehrere Zeilen - bitte um Tips (4)

Frage von highmoe zum Thema Datenbanken ...

Entwicklung
gelöst Notepad++ Reihenfolge von jeweils 2 Zeilen umkehren (7)

Frage von maxico zum Thema Entwicklung ...

Neue Wissensbeiträge
Google Android

Cyanogenmod alternative Downloadquelle

(5)

Tipp von Lochkartenstanzer zum Thema Google Android ...

Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(5)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Statische Routen mit Shorewall, ISC-DHCP Server konfigurieren für Android Devices (25)

Frage von terminator zum Thema LAN, WAN, Wireless ...

Server
gelöst Wie erkennen, dass nur deutsche IPs Zugang zu einer Website haben? (22)

Frage von Coreknabe zum Thema Server ...

Hardware
16-20 Port POE Switch mit VLAN (19)

Frage von thomasreischer zum Thema Hardware ...

Windows Server
Exchange HyperV Prozessorlast (18)

Frage von theoberlin zum Thema Windows Server ...