VBA InStrRev - Jak používat funkci Excel VBA InStrRev?

Excel VBA INSTRREV

Funkce VBA INSTRREV , jak je zkratka pro 'In String Reverse' , vrací pozici prvního výskytu vyhledávacího řetězce (podřetězce) v jiném řetězci, počínaje od konce řetězce (zprava doleva), ze kterého hledáme prohledávatelný řetězec.

Funkce INSTRREV začne hledat prohledávatelný řetězec od konce řetězce, ve kterém musíme zjistit, ale počítá pozici od začátku. Existuje ještě jedna funkce INSTR VBA (zkratka „In String“ ), která také hledá řetězec v jiném řetězci a vrací pozici, ale tato funkce zahájí hledání od začátku řetězce, ze kterého hledáme řetězec, který lze prohledávat.

INSTRREV a INSTR jsou vestavěné funkce String / Text VBA aplikace MS Excel. Můžeme je použít při psaní libovolného makra v editoru Microsoft Visual Basic.

Syntax

Jak vidíme na obrázku výše, existují 2 povinné a 2 volitelné argumenty.

  • StringCheck As String: Toto je povinný argument. Musíme zadat hledaný výraz řetězce.
  • StringMatch As String: Tento argument je také povinný. Musíme zadat hledaný řetězcový výraz.
  • Start As Long = -1: Toto je volitelný argument. Určíme číselný výraz. Ve výchozím nastavení trvá -1, což znamená, že hledání začíná na poslední pozici znaku. Pokud zadáme libovolnou kladnou hodnotu, jako je 80, začne se hledat od konce řetězce po těchto 80 znacích vlevo.
  • Porovnat jako VbCompareMethod = vbBinaryCompare tak dlouho: Tento argument je volitelný.

Pro tento argument můžeme určit následující hodnoty.

Návratové hodnoty

  1. Funkce INSTRREV vrací 0, pokud má kontrola řetězce nulovou délku nebo není nalezena shoda řetězce nebo argument 'start' > délka shody řetězce .
  2. Tato funkce vrací ‚Null‘ v případě, že kontrola řetězec nebo řetězec zápas je ‚Null‘.
  3. Pokud má shoda řetězce nulovou délku, vrátí se funkce na začátek .
  4. Pokud je nalezena shoda řetězce v rámci kontroly řetězce , vrátí funkce pozici, ve které je shoda nalezena.

Jak používat funkci VBA INSTRREV?

Předpokládejme, že máme data pro názvy filmů a jejich režiséry. Chceme rozdělit jména režisérů.

Máme data v 1201 řádcích. Pokud tento úkol provedeme ručně, bude to trvat hodně času.

Abychom učinili totéž, použijeme kód VBA. Kroky jsou:

  • Musíme kliknout na příkaz „Visual Basic“, který je k dispozici ve skupině „Code“ na kartě „Developer“ , nebo můžeme stisknout Alt + F11 a otevřít editor jazyka Visual Basic .
  • Budeme vložení modulu pomocí menu ‚Vložit‘ .
  • Vytvoříme podprogram s názvem „SplittingNames“.
  • Potřebujeme 6 proměnných - jednu pro ukládání hodnot buněk, se kterými budeme manipulovat. Druhý pro uložení pozice prvního prostoru v řetězci, třetí pro uložení polohy posledního prostoru v řetězci, čtvrtý pro uložení čísla posledního řádku, pátý a šestý pro řádek a sloupec, které použijeme k tisku hodnot v sousedních buňky.
  • Chcete-li zjistit poslední použitý řádek v listu, musíme použít následující kód.

Tento kód nejprve vybere buňku B1 a poté ve posledním sloupci vybere poslední použitou buňku a potom proměnné „LastRow“ přiřadíme číslo řádku buňky.

  • Nyní pro manipulaci se všemi buňkami ve sloupci B spustíme smyčku 'pro' .
  • Uložíme hodnotu buněk sloupce B z řádku 2 do řádku 1201 jeden po druhém do proměnné 's', abychom s nimi manipulovali.
  • We need to set the value of the variable ‘Column’ to 3 as we need to write the split names in C (3rd Column) and a column onward.
  • If the string is only one word that means there is no space in the string, then we want the string itself as output. For this, we will specify the condition using ‘If and Else statement’ with an asterisk sign (denoting one or more characters) as follows:
  • If there is space in the string, then we want to split the string. To do the same, we have used INSTR and INSTRREV function both to find out the first space position and last space position, respectively. It will help us to find the first word and last word in the string, respectively.

INSTR Function takes the argument as below:

Argument Details

  • Start: From which position to start.
  • String1: We need to give string expression being searched.
  • String2: We need to specify string expression being searched for.

Compared as VbCompareMethod: Specifying Comparing method. By default, it is binary compare.

  • We need to use the VBA LEFT function to extract left characters from the string. We have used ‘Last Space-1’ to get the left characters before the last space.

We need to use the RIGHT and LEN functions to extract the right characters from the string after the first space.

Macro is written. Now we just need to run the macro using the F5 key.

Code:

Sub SplittingNames () Dim s As String Dim FirstSpace As Long Dim LastSPace As Long Dim LastRow As Long Dim Row As Long Dim Column As Long Sheet1.Range ("B1"). Select Selection.End (xlDown) .Select LastRow = ActiveCell. Řádek pro řádek = 2 k LastRow s = Sheet1.Cells (řádek, 2). Sloupec hodnoty = 3 Je-li jako "* *", pak FirstSpace = InStr (1, s, "") LastSPace = InStrRev (s, "") Sheet1.Cells (Row, Column) .Value = Left (s, LastSPace - 1) Sheet1.Cells (Row, Column + 1) .Value = Right (s, Len (s) - FirstSpace) Else Sheet1.Cells (Row, Column) .Value = s End If Next End Sub

Nyní máme výsledek.

Zajímavé články...