Excel VBA sadalītā funkcija - izskaidrota ar piemēriem

Strādājot ar VBA programmā Excel, jums var būt nepieciešams sadalīt virkni dažādās daļās, pamatojoties uz norobežotāju.

Piemēram, ja jums ir adrese, varat izmantot funkciju VBA Split, lai iegūtu dažādas adreses daļas, kuras atdala ar komatu (kas šajā gadījumā būtu norobežotājs).

SPLIT ir iebūvēta virknes funkcija programmā Excel VBA, kuru varat izmantot, lai sadalītu teksta virkni, pamatojoties uz norobežotāju.

Excel VBA SPLIT funkcija - sintakse

Sadalīt (izteiksme, [norobežotājs], [ierobežojums], [salīdzināt])
  • Izteiksme: Šī ir virkne, kuru vēlaties sadalīt, pamatojoties uz norobežotāju. Piemēram, adreses piemēra gadījumā visa adrese būtu “izteiksme”. Ja šī ir nulles garuma virkne (“”), SPLIT funkcija atgriež tukšu masīvu.
  • Atdalītājs: Šis ir fakultatīvs arguments. Šis ir norobežotājs, ko izmanto argumenta “Izteiksme” sadalīšanai. Mūsu adreses piemēra gadījumā komats ir norobežotājs, ko izmanto, lai sadalītu adresi dažādās daļās. Ja nenorādāt šo argumentu, atstarpes rakstzīme tiek uzskatīta par noklusējuma atdalītāju. Ja norādāt nulles garuma virkni (“”), funkcija atgriež visu “izteiksmes” virkni.
  • Ierobežojums: Šis ir fakultatīvs arguments. Šeit jūs norādāt kopējo apakšvirkņu skaitu, kuras vēlaties atgriezt. Piemēram, ja vēlaties atgriezt tikai pirmās trīs apakšvirknes no argumenta “Izteiksme”, tas būtu 3. Ja nenorādāt šo argumentu, noklusējuma vērtība ir -1, kas atgriež visas apakšvirknes.
  • Salīdzināt: Šis ir fakultatīvs arguments. Šeit jūs norādāt salīdzinājuma veidu, kuru vēlaties, lai funkcija SPLIT veiktu, novērtējot apakšvirknes. Ir pieejamas šādas iespējas:
    • Kad salīdzināt ir 0: Šis ir binārs salīdzinājums. Tas nozīmē, ka, ja jūsu norobežotājs ir teksta virkne (teiksim, ABC), tad tas būs reģistrjutīgs. “ABC” nebūtu vienāds ar “abc”.
    • Kad salīdzināt ir 1: Šis ir teksta salīdzinājums. Tas nozīmē, ka, ja jūsu norobežotājs ir teksta virkne (teiksim, ABC), tad pat tad, ja virknē “Izteiksme” ir “abc”, tas tiks uzskatīts par norobežotāju.

Tagad, kad esam apskatījuši SPLIT funkcijas pamatus, apskatīsim dažus praktiskus piemērus.

1. piemērs - sadaliet vārdus teikumā

Pieņemsim, ka man ir teksts - “Ātrā brūnā lapsa lec pāri slinkajam sunim”.

Es varu izmantot funkciju SPLIT, lai katru šī teikuma vārdu iekļautu kā atsevišķu masīva vienumu.

Tālāk norādītais kods būtu šāds:

Sub SplitWords () Dim TextStrng kā virkne Dim Rezultāts () Kā String TextStrng = "Ātrā brūnā lapsa lec pāri slinkajam sunim" Rezultāts () = Split (TextStrng) End Sub

Lai gan kods nedod neko noderīgu, tas palīdzēs jums saprast, ko dara sadalītā funkcija VBA.

Sadalīšanas funkcija sadala teksta virkni un piešķir katru vārdu masīvam Rezultāti.

Tātad šajā gadījumā:

  • Rezultātā (0) tiek saglabāta vērtība “The”
  • Rezultātā (1) tiek saglabāta vērtība “Ātri”
  • Rezultātā (2) tiek saglabāta vērtība “Brūns” utt.

Šajā piemērā mēs esam norādījuši tikai pirmo argumentu - tas ir sadalāmais teksts. Tā kā neviens norobežotājs nav norādīts, tam kā noklusējuma atdalītājam ir jāizmanto atstarpes raksturs.

Svarīga piezīme:

  1. Funkcija VBA SPLIT atgriež masīvu, kas sākas no 0 bāzes.
  2. Kad funkcijas SPLIT rezultāts ir piešķirts masīvam, šis masīvs ir jādeklarē kā virknes datu tips. Ja deklarēsit to kā datu varianta variantu, tiks parādīta tipa neatbilstības kļūda). Iepriekš minētajā piemērā ņemiet vērā, ka esmu deklarējis rezultātu () kā virknes datu tipu.

2. piemērs - saskaitiet teikumā esošo vārdu skaitu

Jūs varat izmantot funkciju SPLIT, lai iegūtu kopējo vārdu skaitu teikumā. Šeit triks ir saskaitīt masīva elementu skaitu, kas tiek iegūts, sadalot tekstu.

Zemāk esošais kods parādītu ziņojumu lodziņu ar vārdu skaitu:

Apakš WordCount () Dim TextStrng kā virkne Dim WordCount kā vesels skaitlis Dim Rezultāts () Kā virkne TextStrng = "Ātrā brūnā lapsa lec pāri slinkajam sunim" Rezultāts = Split (TextStrng) WordCount = UBound (Result ()) + 1 MsgBox Vārdu skaits ir "& WordCount beigu apakšnodaļa

Šajā gadījumā funkcija UBound norāda masīva augšējo robežu (t.i., masīva maksimālo elementu skaitu). Tā kā masīva bāze ir 0, tiek pievienots 1, lai iegūtu kopējo vārdu skaitu.

Varat izmantot līdzīgu kodu, lai VBA izveidotu pielāgotu funkciju, kas izmantos tekstu kā ievadi un atgriezīs vārdu skaitu.

Zemāk esošais kods izveidos šo funkciju:

Funkcija WordCount (CellRef As Range) Dim TextStrng kā String Dim Result () Kā String Result = Split (WorksheetFunction.Trim (CellRef.Text), "") WordCount = UBound (Result ()) + 1 Beigu funkcija

Kad esat izveidojis, varat izmantot WordCount funkciju tāpat kā jebkuru citu parasto funkciju.

Šī funkcija apstrādā arī sākuma, beigu un dubultās atstarpes starp vārdiem. Tas ir kļuvis iespējams, izmantojot TRIM funkciju VBA kodā.

Ja vēlaties uzzināt vairāk par to, kā šī formula darbojas, lai saskaitītu vārdu skaitu teikumā, vai vēlaties uzzināt par formulu, kas nav VBA, lai iegūtu vārdu skaitu, skatiet šo apmācību.

3. piemērs. Atdalītāja izmantošana, izņemot atstarpes rakstzīmi

Iepriekšējos divos piemēros mēs esam izmantojuši tikai vienu argumentu funkcijā SPLIT, bet pārējie bija noklusējuma argumenti.

Ja izmantojat kādu citu norobežotāju, tas jānorāda formulā SPLIT.

Zemāk redzamajā kodā funkcija SPLIT atgriež masīvu, pamatojoties uz komatu kā atdalītāju, un pēc tam parāda ziņojumu ar katru vārdu atsevišķā rindā.

Sub CommaSeparator () Dim TextStrng kā virkne Dim Rezultāts () Kā virkne Dim DisplayText As String TextStrng = "The, Quick, Brown, Fox, Jump, Over, The, Lazy, Dog" Result = Split (TextStrng, ",") Attiecībā uz i = LBound (rezultāts ()) līdz UBound (rezultāts ()) DisplayText = DisplayText & Results (i) & vbNewLine Next i MsgBox DisplayText End Sub

Iepriekš minētajā kodā es izmantoju cilni Nākotnei, lai izietu cauri katram rezultāta masīva elementam, piešķirot to mainīgajam “DisplayText”.

4. piemērs - sadaliet adresi trīs daļās

Izmantojot funkciju SPLIT, varat norādīt, cik daudz sadalījumu vēlaties iegūt. Piemēram, ja es neko nenorādīšu, virknes sadalīšanai tiktu izmantots katrs norobežotāja gadījums.

Bet, ja kā ierobežojumu norādīšu 3, tad virkne tiks sadalīta tikai trīs daļās.

Piemēram, ja man ir šāda adrese:

2703 Winifred Way, Indianapolis, Indiana, 46204

Es varu izmantot funkciju Split VBA, lai sadalītu šo adresi trīs daļās.

Tas sadala pirmos divus, pamatojoties uz komatu atdalītāju, un atlikusī daļa kļūst par masīva trešo elementu.

Zemāk esošais kods ziņu lodziņā parādītu adresi trīs dažādās rindās:

Sub CommaSeparator () Dim TextStrng kā virkne Dim Rezultāts () Kā virkne Dim DisplayText As String TextStrng = "2703 Winifred Way, Indianapolis, Indiana, 46204" Result = Split (TextStrng, ",", 3) For i = LBound (Result ( )) Uz UBound (Result ()) DisplayText = DisplayText & Result (i) & vbNewLine Next i MsgBox DisplayText End Sub

Viens no praktiskiem izmantošanas veidiem varētu būt, ja vēlaties sadalīt vienas rindas adresi formātā, kas parādīts ziņojumu lodziņā. Pēc tam varat izveidot pielāgotu funkciju, kas atgriež adresi, kas sadalīta trīs daļās (ar katru daļu jaunā rindā).

Šāds kods to darītu:

Funkcija ThreePartAddress (cellRef As Range) Dim TextStrng kā String Dim Result () Kā String Dim DisplayText As String Result = Split (cellRef, ",", 3) For i = LBound (Result ()) To UBound (Result ()) DisplayText = DisplayText & Trim (Rezultāts (i)) & vbNewLine Next i ThreePartAddress = Mid (DisplayText, 1, Len (DisplayText) - 1) Beigu funkcija

Kad esat ievadījis šo kodu modulī, varat izmantot funkciju (ThreePartAddress) darbgrāmatā tāpat kā jebkuru citu Excel funkciju.

Šai funkcijai ir viens arguments - šūnas atsauce, kurai ir adrese.

Ņemiet vērā: lai iegūtā adrese tiktu parādīta trīs dažādās rindās, šūnām jāpiemēro ietīšanas teksta formāts (tas atrodas cilnes Sākums grupā Izlīdzināšana). Ja formāts “Aptīt tekstu” nav iespējots, visa adrese būs redzama kā viena rinda.

5. piemērs - iegūstiet pilsētas nosaukumu no adreses

Izmantojot funkciju Sadalīt VBA, varat norādīt, kādu iegūtā masīva daļu vēlaties izmantot.

Piemēram, pieņemsim, ka es sadalīšu šo adresi, pamatojoties uz komatu kā norobežotāju:

2703 Winifred Way, Indianapolis, Indiana, 46204

Iegūtais masīvs izskatīsies šādi:

{"2703 Winifred Way", "Indianapolis", "Indiana", "46204"}

Tā kā šis ir masīvs, es varu izvēlēties parādīt vai atgriezt konkrētu šī masīva daļu.

Zemāk ir pielāgotas funkcijas kods, kurā varat norādīt skaitli, un tas atgriezīs šo elementu no masīva. Piemēram, ja es vēlos valsts nosaukumu, es varu norādīt 3 (jo tas ir trešais masīva elements).

Funkcija ReturnNthElement (CellRef kā diapazons, ElementNumber kā vesels skaitlis) Dim Result () Kā virknes rezultāts = Split (CellRef, ",") ReturnNthElement = Result (ElementNumber - 1) Beigu funkcija

Iepriekšminētajai funkcijai ir divi argumenti - šūnas atsauce ar adresi un elementa numurs, kuru vēlaties atgriezt. Funkcija Sadalīt sadala adreses elementus un piešķir to mainīgajam rezultātam.

Tad tas atgriež elementa numuru, kuru norādījāt kā otro argumentu. Ņemiet vērā, ka, tā kā bāze ir 0, ElementNumber-1 tiek izmantots, lai atgrieztu pareizo adreses daļu.

Šī pielāgotā formula ir vispiemērotākā, ja jums ir konsekvents formāts visā adresē, t.i., pilsēta vienmēr tiek minēta pēc diviem komatiem. Ja dati nav konsekventi, jūs nesaņemsit vēlamo rezultātu.

Ja vēlaties pilsētas nosaukumu, kā otro argumentu varat izmantot 2. Ja izmantojat skaitli, kas ir lielāks par kopējo elementu skaitu, tas atgriezīs #VALUE! kļūda.

Jūs varat vēl vairāk vienkāršot kodu, kā parādīts zemāk:

Funkcija ReturnNthElement (CellRef kā diapazons, ElementNumber kā vesels skaitlis) ReturnNthElement = Split (CellRef, ",") (ElementNumber - 1) Beigu funkcija

Iepriekš minētajā kodā tā vietā, lai izmantotu mainīgo Result, tas atgriež tikai norādīto elementa numuru.

Tātad, ja jums ir Split (“Labrīt”) (0), tas atgriezīs tikai pirmo elementu, kas ir “Labi”.

Tāpat iepriekš minētajā kodā tas atgriež tikai norādīto elementa numuru.

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave