< návrat zpět

MS Excel


Téma: VYŘEŠENO Find_replace makro rss

Zaslal/a 19.6.2015 13:54

Ahoj,

potřebuji radu. Mám dvě tabulky například:

TAB 1:
Column 1
Apple
Keyboard
One

TAB 2:

Column 1
Apple
Keyboard
One

Column 2
Green Apple
Chicony Keyboard
Big One

A potřebuji makro, které mi nahradí Apple za Green Apple.

Pokud možno do něj ještě zanést, aby bylo citlivé na velikost písmen.

Děkuji za Vaše rady! :)

stop Uzamčeno - nelze přidávat nové příspěvky.

#025625
elninoslov
Jedná sa len o to jedno slovo "Apple" ? Alebo podobným spôsobom chcete aj ostatné nahradiť.citovat
#025626
avatar
Všechny :). Tím, že si označím nějakou oblast např A1:A3 (Apple až One) a poté tabulku B1:D3 a výsledkem bude Green Apple, Chicony Keyboard, Big One.

Samozřejmě to je jen příklad, potřeboval bych takové makro pro tabulky, které mají třeba 10 000 řádků.citovat
#025627
avatar
Dokonce na to i makro mám:

Sub MultiFindNReplace()
Dim Rng As Range
Dim InputRng As Range, ReplaceRng As Range
xTitleId = "Vyber_oblasti"
Set InputRng = Application.Selection
Set InputRng = Application.InputBox("Original Range ", xTitleId, InputRng.Address, Type:=8)
Set ReplaceRng = Application.InputBox("Replace Range :", xTitleId, Type:=8)
Application.ScreenUpdating = False
For Each Rng In ReplaceRng.Columns(1).Cells
InputRng.Replace what:=Rng.Value, replacement:=Rng.Offset(0, 1).Value
Next
Application.ScreenUpdating = True
End Sub

Ale nevím jak tam zavést citlivost na velká/malá písmena a fungovalo mi jen do tabulek +/- 100 řádků.citovat
#025628
elninoslov
Príloha by to značne uľahčila, ale pokiaľ to máte obdobné tomuto, že výsledok očakávate inde, tak to môžete urobiť vzorcom.
Tab1 - zdroj dát
Tab2 - určuje, čo sa má za čo nahradiť
Výsledok - výsleodk
Příloha: rar25628_nahradtext.rar (8kB, staženo 12x)
citovat
#025629
avatar

elninoslov napsal/a:

Príloha by to značne uľahčila, ale pokiaľ to máte obdobné tomuto, že výsledok očakávate inde, tak to môžete urobiť vzorcom.
Tab1 - zdroj dát
Tab2 - určuje, čo sa má za čo nahradiť
Výsledok - výsleodkPříloha: 25628_nahradtext.rar


No to by bylo ideální když bych málo řádků, ale když má mv tabulce např 10 000 řídku, které potřebuji nahradit a ještě k tomu to není seřazeno. Takže proti sobě nemám např. Apple a Green Apple na pozici A1 A B1, ale je to A1 a třeba B3580.

Takže bych potřeboval spíše makro kde můžu označit první oblast poté druhou oblast a zapíše se mi výsledek.citovat
#025632
elninoslov
Jediný problém tohto vzorca je, že neberie v úvahu CaseSensitive, a tým pádom je pre Vás nepoužiteľný.
Inak:

Tab2 - slúži iba ako vzor. Robí tú istú funkciu ako v tom Vašom makre. Je to iba vzor, čo sa má za čo nahradiť. A je na to použitý absolútny odkaz. Teda pre každú bunku z tých 10 000 v Výsledok sa urobí toto:
- Je hodnota tejto bunky vo vzoroch Tab2 ?
- Ak áno tak ju nahraď podľa vzoru (hľadaná hodnota stĺpec A, nahradená B, v tabuľke Tab2)
- Táto vzorová tabuľka Tab2, je navyše dynamická, čiže reaguje okamžite na zmenu hodnôt, či ich počtu.
- Ak chcete zobraziť aj hodnoty, ktoré niesú uvedené vo vzoroch, tak len zmente v tom vzorci "" za 'Tab1'!A1
- Tento vzorec natiahnete na počet riadkov, aký chcete, áno aj 10 000
- Ak potrebujete rezervu, čiže ak dopĺňate dáta do Tab1, tak vzorec sa dá jednoducho upraviť.

No treba ešte porozmýšľať, ako v tom či onom prípade poriešiť CaseSensitive...

EDIT:
To Vaše makro, upravte takto:
Sub MultiFindNReplace()
Dim Rng As Range
Dim InputRng As Range, ReplaceRng As Range, Spolu As String
xTitleId = "Vyber_oblasti"
Set InputRng = Application.Selection
Set InputRng = Application.InputBox("Original Range ", xTitleId, InputRng.Address, Type:=8)
Set ReplaceRng = Application.InputBox("Replace Range :", xTitleId, Type:=8)
Application.ScreenUpdating = False
Spolu = "|" & Join(Application.Transpose(InputRng.Value), "|") & "|"
For Each Rng In ReplaceRng.Columns(1).Cells
Spolu = Replace(Spolu, "|" & Rng.Value & "|", "|" & Rng.Offset(0, 1).Value & "|")
Next
Worksheets("Výsledok").Range(InputRng.Address).Value = Application.Transpose(Split(Mid(Spolu, 2, Len(Spolu) - 2), "|"))
Application.ScreenUpdating = True
End Sub


Prikladám súbor s riešením makrom aj vzorcom (maticový)
=IF('Tab1'!A1="";"";IFERROR(INDEX('Tab2'!$B$1:$B$4;MATCH(TRUE;EXACT('Tab1'!A1;'Tab2'!$A$1:$A$4);0));'Tab1'!A1))

Ako vidíte skúšané na 10800 riadkoch.
Příloha: rar25632_nahradtext2.rar (251kB, staženo 12x)
citovat
#025635
avatar
Dobrý den,

moc Vám děkuji! Vaše úprava funguje :).citovat

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