< návrat zpět

MS Excel


Téma: VBA - odstranění určitého textu pomocí makra rss

Zaslal/a 16.7.2023 11:11

FantasykZdravím,

Potřeboval bych poradit s makrem.
Chtěl bych odstranit určité data ve sloupích.
Za podmínky pokud najde ve sloupci B (označené červeně) 703320 odstranit data ve sloupích B až AA (označené oranžově a červeně), ale další data ve sloupci AB zanechat.

Díky za jakoukoliv radu.
Fantasyk

Příloha: zip55181_sesit1.zip (16kB, staženo 1x)
Zaslat odpověď >

#055182
elninoslov
Dáta v stĺpci AB je možné zanechať iba za predpokladu konverzie vzorca, ktorý sa v AB nachádza na hodnotu. Teda ten výpočet bude v AB (v daných riadkoch) ďalej nefunkčný.
Sub Vymaz_B_AA()
Dim R As Long, i As Long, B(), rngCAA As Range, rngAB As Range, rng As Range, HLADAJ

HLADAJ = 703320

With ThisWorkbook.Worksheets("List1")
R = .Cells(Rows.Count, 2).End(xlUp).Row
B = .Cells(1, 2).Resize(R).Value2

For i = 1 To R
If B(i, 1) = HLADAJ Then
If rngCAA Is Nothing Then
Set rngCAA = .Range("B1:AA1").Offset(i - 1, 0)
Set rngAB = .Cells(i, "AB")
Else
Set rngCAA = Union(rngCAA, .Range("B1:AA1").Offset(i - 1, 0))
Set rngAB = Union(rngAB, .Cells(i, "AB"))
End If
End If
Next i
End With

If Not rngAB Is Nothing Then
For Each rng In rngAB.Areas
rng.Value2 = rng.Value2
Next rng
rngCAA.ClearContents
End If
End Sub

EDIT:
V oblasti som urobil preklep. Namiesto C1:AA1 má byť samozrejme B1:AA1. V prílohe aj v kóde som to opravil.citovat
#055184
Fantasyk

elninoslov napsal/a:

Dáta v stĺpci AB je možné zanechať iba za predpokladu konverzie vzorca, ktorý sa v AB nachádza na hodnotu. Teda ten výpočet bude v AB (v daných riadkoch) ďalej nefunkčný.
Sub Vymaz_B_AA()
Dim R As Long, i As Long, B(), rngCAA As Range, rngAB As Range, rng As Range, HLADAJ

HLADAJ = 703320

With ThisWorkbook.Worksheets("List1")
R = .Cells(Rows.Count, 2).End(xlUp).Row
B = .Cells(1, 2).Resize(R).Value2

For i = 1 To R
If B(i, 1) = HLADAJ Then
If rngCAA Is Nothing Then
Set rngCAA = .Range("C1:AA1").Offset(i - 1, 0)
Set rngAB = .Cells(i, "AB")
Else
Set rngCAA = Union(rngCAA, .Range("C1:AA1").Offset(i - 1, 0))
Set rngAB = Union(rngAB, .Cells(i, "AB"))
End If
End If
Next i
End With

If Not rngAB Is Nothing Then
For Each rng In rngAB.Areas
rng.Value2 = rng.Value2
Next rng
rngCAA.ClearContents
End If
End SubPříloha: 55182_odstraneni-urciteho-textu-pomoci-makra.zip (17kB, staženo 1x)


Díky moc
jen jsem přepsal AB na AA a funguje tak jak má.

ještě jednou díky Elninoslovcitovat
#055185
elninoslov
Akurát som odoslal EDIT do príspevku. Mal som preklep v oblasti C1:AA1 vs B1:AA1.
To čo upravujete Vy, teda AB na AA, neodpovedá požiadavke, ktorú ste napísal, a to, že chcete AB hodnoty ponechať.
To .Cells(i, "AB") v kóde slúži práve na to, aby sa uložili oblasti, ktoré sa majú previesť neskôr na hodnoty. Nie zmazať ani nie ponechať vzorec. V AB je totiž vzorec, nemôžete mu zmazať zdrojové hodnoty C,B,K,AA, nezostane mu výsledok.citovat
#055186
Fantasyk

elninoslov napsal/a:

Akurát som odoslal EDIT do príspevku. Mal som preklep v oblasti C1:AA1 vs B1:AA1.
To čo upravujete Vy, teda AB na AA, neodpovedá požiadavke, ktorú ste napísal, a to, že chcete AB hodnoty ponechať.
To .Cells(i, "AB") v kóde slúži práve na to, aby sa uložili oblasti, ktoré sa majú previesť neskôr na hodnoty. Nie zmazať ani nie ponechať vzorec. V AB je totiž vzorec, nemôžete mu zmazať zdrojové hodnoty C,B,K,AA, nezostane mu výsledok.

Já výsledek nepotřebuji jen to chci smazat což teď už to maže a zanechá jen samotný vzorec, který u toho nepotřebuji. Potřebuji jen výsledky u toho kde není 703320 1citovat
#055187
elninoslov
Aj tak neviem naisto, či potom dobre rozumiem...:
Sub Vymaz_B_AA()
Dim R As Long, i As Long, B(), rngBAA As Range, HLADAJ

HLADAJ = 703320

With ThisWorkbook.Worksheets("List1")
R = .Cells(Rows.Count, 2).End(xlUp).Row
B = .Cells(1, 2).Resize(R).Value2

For i = 1 To R
If B(i, 1) = HLADAJ Then
If rngBAA Is Nothing Then
Set rngBAA = .Range("B1:AA1").Offset(i - 1, 0)
Else
Set rngBAA = Union(rngBAA, .Range("B1:AA1").Offset(i - 1, 0))
End If
End If
Next i
End With

If Not rngBAA Is Nothing Then rngBAA.ClearContents
End Sub
citovat
#055188
Fantasyk

elninoslov napsal/a:

Aj tak neviem naisto, či potom dobre rozumiem...:
Sub Vymaz_B_AA()
Dim R As Long, i As Long, B(), rngBAA As Range, HLADAJ

HLADAJ = 703320

With ThisWorkbook.Worksheets("List1")
R = .Cells(Rows.Count, 2).End(xlUp).Row
B = .Cells(1, 2).Resize(R).Value2

For i = 1 To R
If B(i, 1) = HLADAJ Then
If rngBAA Is Nothing Then
Set rngBAA = .Range("B1:AA1").Offset(i - 1, 0)
Else
Set rngBAA = Union(rngBAA, .Range("B1:AA1").Offset(i - 1, 0))
End If
End If
Next i
End With

If Not rngBAA Is Nothing Then rngBAA.ClearContents
End Sub


Už ten první kód jsem si jen upravil a jelo to dikycitovat

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse