Stránka 1 z 1

Pomozte s VBA kódem

Napsal: 25 dub 2008 10:20
od cauli
Zdravim,

Potrebuji zase poradit, jak udelat kod pro VBA ktery mi kdyz je nejaka bunka ve sloupci plna zapsal data do bunky v jinem liste, pokud je prázdná at zkontroluje dalsi bunku smerem dolu. Samozrejme kdyz zapise data do toho jineho listu musi se posunout rase o radek niz aby mel kam zapsat dalsi data.
Jde o to aby pak ve vysledku nebyly prazde bunky mezi rádky. Sortování nejde pouzit aby ty data byly za sebou jak maji byt podle toho prvniho listu.

/změna nadpisu
/mikel

Re: Maly help

Napsal: 25 dub 2008 13:57
od vashut
zkus toto máš to i popsaný pro snadnější úpravu :wink:

Kód: Vybrat vše

Sub vypsat()
Dim i As Long   'definice i jako dlouhe cislo pro pripad Option Explicit
Dim radek As Long    'radek jako dlouhy cislo
radek = 1   'nastaveni radek jako 1
For i = 1 To 65536  'pocita od 1 do 65536(posledni radek excel)
    If Sheets("List1").Cells(i, 1) <> "" Then   'pokud na List1 bunce na poloze
    'i (pocitadlo) ve sloupci 1 bude neco jinyho nez prazdno tak:
        Sheets("List2").Cells(radek, 1) = Sheets("List1").Cells(i, 1)
        'List2 bunka v radku radek, sloupec1 priradit porovnavanou hodnotu
        radek = radek + 1   'pocitadlo radku aby nebyly mezery probehne pouze pri vyplneni
    End If  'konec podnínky
Next    'konec pocitadla
End Sub


příště prosím "malý help" konkrétněji třeba alespoň VBA nebo excel - makro nebo něco konkrétnějšího :apple:

Re: Pomozte s VBA kódem

Napsal: 05 kvě 2008 22:45
od Jenda70
Doporučuji jednu drobnost :-)

xx = Cells.SpecialCells(xlLastCell).Row ' zjisti posledni radek v listu. xlLastCell = stejene jako klavesa CTRL+END
for i = 1 to xx

místo:
for i = 1 to 65536

Pravděpodobně nebudeš mít plný list až do konce a v případě běžných tabulek tak nax to 10tisíc řádek to makro urychlí. Nebude muset zbytečně procházet prázdné buňky.

Re: Pomozte s VBA kódem

Napsal: 06 kvě 2008 01:35
od mike007
vashut : Co když se jeho záložky nejmenují List1, List2 ? Nebylo by lepší nabídnout jinou metodu? :wink:
To je jen rejpavá. Promiň :smile:

Re: Pomozte s VBA kódem

Napsal: 06 kvě 2008 06:48
od vashut
místo "List1" pořadí listu (index číslo) máš na mysli

Re: Pomozte s VBA kódem

Napsal: 06 kvě 2008 10:43
od Jenda70
Když už do toho chce takhle rejpat :-) tak by to mohlo vypadat třebas takhle:

Sub vypsat()
Dim i As Long 'definice i jako dlouhe cislo pro pripad Option Explicit
Dim radek As Long 'radek jako dlouhy cislo
radek = 1 'nastaveni radek jako 1

' Rejpalka
aa = ActiveSheet.Index '- zjisti index aktualniho listu
If aa < Worksheets.Count Then '- zjisti jestli neni posledni
Else
Worksheets.Add after:=Sheets(aa) '- prida dalsi list za list aa
End If
bb = aa + 1 ' - index listu o jeden vice
' konec rejpalky :-)

For i = 1 To Cells.SpecialCells(xlLastCell).Row 'pocita od 1 do 65536(posledni radek excel)
If Worksheets(aa).Cells(i, 1) <> "" Then 'pokud na List1 bunce na poloze
'i (pocitadlo) ve sloupci 1 bude neco jinyho nez prazdno tak:
Worksheets(bb).Cells(radek, 1) = Worksheets(aa).Cells(i, 1)
'List2 bunka v radku radek, sloupec1 priradit porovnavanou hodnotu
radek = radek + 1 'pocitadlo radku aby nebyly mezery probehne pouze pri vyplneni
End If 'konec podnínky
Next 'konec pocitadla
End Sub

Re: Pomozte s VBA kódem

Napsal: 06 kvě 2008 12:07
od mike007
vashut : Správně :wink:

Jenda70 : Taky řešení :smile:

Obrázek

//Před pár minutami jsem dopsal a odladil prográmek pro mašinku na zakládání pružinek do automatu, ale na tohle doslova čumím jak Tatar na biftek. Klobouk dolů, kdo umí, umí... :idea:
//Karlos

Re: Pomozte s VBA kódem

Napsal: 06 kvě 2008 14:47
od vashut
jen k tomu ještě doplnim proč jsem to tak psal "List1" odpověď byla ráno a ve spěchu a když už je rejpavá: :D
každý ten způsob má svoje výhody a nevýhody a jelikož neznám uživatelovu zkušenost s programováním tak jsem volil druhej níže popsanej způsob
1. způsob Sheets(1).něco... má výhodu, že je kratší a nezáleží na jméně listu, je to vždy první v pořadí a i když normální první je skrytej (to považuju za nevýhodu když uživatel dostane již hotový sešit a neví, co se dělo) pak nemusí kod fungovat korektně. pak také pokud se listy prohoděj už to zase nefunguje

2. způsob Sheets("List1").něco... je delší zápis ale pro běžného uživatele naprosto tupovzdorný(nenarážim na nikoho) a ještě jsem neviděl, že by to někdo zplet. A může se listu libovolně měnit pořadí.
nevýhody: přejmenování = nefungčnost

je možný, že jsem na nějákou výhodu/nevýhodu zapoměl ale to kdyžtak doplnim až mě to trkne :smile:
hlavní důvod volby 2 je to, že jsem předpokládal přesun listu na první pozici