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: 25632_nahradtext2.rar (251kB, staženo 12x) citovat