< návrat zpět

MS Excel


Téma: Autom. vyplňování pořadového čísla řádku rss

Zaslal/a 13.5.2016 9:36

Zdravím Vás,

dovolím si Vás požádat o radu, jak zefektivnit makro:

r = Target.Row
s = Target.Column

If r > 1 And s = 3 Then

If IsNumeric(Target) Then Exit Sub

If CStr(Target) <> "" Then

Cells(r, 2) = "=IF(RC[1]="""","""",R[-1]C+1)"

Else

Cells(r, 5) = ""
End If
End If


Jest tabulka, kde mám makro, které v sloupci B vyplňuje pořadové číslo, pokud buňka v sloupci C obsahuje nějaký text. Problém je v tom, že text ve sloupci C se může opakovat a uživatel kopíruje do více buňek pod sebe, ale to už pak makro přestává fungovat a v dalších zkopírovaných buňkách již pořadové číslo ve sloupci B nevyplní.

Je možné to nějak ošetřit makrem, aby pokud zkopíruju třeba 5 buněk pod sebe, aby vyplnilo i dalších 5 pořadových čísel? 1

Díky moc za pomoc.
Michal

Zaslat odpověď >

#031512
elninoslov
Netuším, či Vás chápem správne, ale na to podľa mňa nepotrebujete makro, navyše to máte pravdepodobne vo Worksheet_Change, čím prichádzate o Undo.

EDIT:
Inak ak by ste chcel robiť psie kusy s každou zmenenou bunkou v C od riadku 2, tak napr:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Zmena As Range, Bunka As Range, Hodnota
Set Zmena = Intersect(Columns(3).Resize(Rows.Count - 1).Offset(1, 0), Target)
If Not Zmena Is Nothing Then
Application.EnableEvents = False: Application.ScreenUpdating = False
For Each Bunka In Zmena
Hodnota = Bunka

'Tu si robte čo chcete s každou zmenenou bunkou v 3. stĺpci
If Not IsNumeric(Hodnota) Then
If CStr(Hodnota) <> "" Then
Cells(Bunka.Row, 2) = "=IF(RC[1]="""","""",R[-1]C+1)"
Else
Cells(Bunka.Row, 5) = ""
End If
End If

Next Bunka
Set Bunka = Nothing
Application.EnableEvents = True: Application.ScreenUpdating = True
End If
Set Zmena = Nothing
End Sub


Ale to čo tam v strede máte ako jadro kódu ... no neviem ... podľa mňa to nefunguje. Keďže vkladáte vzorec na číslo len v prípade, že bol v C vložený text, tak ak tam bude vložené číslo a po ňom text, tak sa nemá odkiaľ pripočítať 1. Dá Vám to chybu. Rovnako by ste mal pri zmene na číslo v C, zmazať vzorec na číslo, keď píšete, že tam má byť očíslovanie iba v prípade textu. To samozrejme znefunkční vzorec, tak ako ho máte.

Trochu to lepšie popíšte.
Příloha: zip31512_slovanie-textov.zip (7kB, staženo 19x)
citovat
#031513
avatar
Nemůžete použít tabulku (ListObject) se vzorcem, který se postará o autoincrement?citovat
#031514
avatar
Ano, jedná se o makro ve Worksheet_Change, jednak soubor má mnoho listů a pak mnoho řádků, proto to neřeším vloženým vzorcem natvrdo v každé buňce sloupce B.

Nyní to funguje tak, že vložím text např. do buňky C10 a makro mi vloží do buňky B10 pořadové číslo, respektive vzorec B9+1 atd.

Problém nastává, pokud uživatel najednou nakopíruje stejný údaj např. do buněk C11:15. Zde potřebuji přepsat makro, aby poznalo, že ve sloupci C přibylo 5 nových buněk (řádků), tak aby i do oblasti B11:B15 napsalo 5x vzorec "Předchozí buňka +1", čili C10+1, C11+1 atd.

Poupravil jsem ten původní vzorec, je pravda, že jsem tam měl chybu při vkládání textu/čísla:

Private Sub Worksheet_Change(ByVal Target As Range)

r = Target.Row
s = Target.Column

If r > 1 And s = 3 Then

If Target.Column = 3 Then

If CStr(Target) <> "" Then

Cells(r, 2) = "=IF(RC[1]="""","""",R[-1]C+1)"

Else

Cells(r, 5) = ""
End If
End If
End If
End Sub

Snad je to lépe pochopitelné.

Díky za každou radu.

M.citovat
#031515
elninoslov
Veď to makro čo som Vám poslal robí práve to, že zistí ktoré bunky boli v C zmenené (kľudne milión), a po jednom Vám tieto (iba zmenené !) ponúka na zlatom podnose v cykle v premennej Bunka. V tom prostrednom bloku si robte čo chcete, pričom Bunka.Row je riadok práve spracovávanej bunky. To môžete použiť na vkladanie toho vzorca. Pozreli ste sa na to vôbec ? Veď je to presne to, čo požadujete.

Vo Vašom makre máte napr.
Cells(r, 2) = "=IF(RC[1]="""","""",R[-1]C+1)"

v mojom by to bolo
Cells(Bunka.Row, 2) = "=IF(RC[1]="""","""",R[-1]C+1)"
aj keď korektne by malo byť
Cells(Bunka.Row, 2).FormulaR1C1= "=IF(RC[1]="""","""",R[-1]C+1)"

Ale opakujem, že vkladanie Vašeho vzorca nebude fungovať, akonáhle bude niekde v stĺpci B prázdna bunka pred vzorcom. To tam vložte ten môj vzorec z prvého príspevku. Ten zvládne medzery.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje