Sumali sa VBA | Hakbang-hakbang na Mga Halimbawa ng Excel VBA Sumali sa Pag-andar

Katulad ng kung ano ang mayroon kami sa worksheet bilang Concatenate function at ang & command na ginagamit upang sumali sa dalawa o higit sa dalawang mga string na magkasama, sa VBA ginagamit namin ang Sumali sa utos upang gawin ito, sa Sumali sa VBA kinukuha namin ang data sa isang array at katulad ng concatenation ay gumagamit kami ng isang delimiter upang sumali sa kanila.

Ang Excel VBA JOIN Function

Tulad ng ipinahihiwatig mismo ng pangalan, ang Pag-andar ng VBA JOIN ay ginagamit upang sumali nang sama-sama ng isang hanay ng mga substrings na may tinukoy na delimiter. Kung hindi namin tinukoy ang anumang delimiter, kinakailangan ng 'puwang' bilang isang default na character ng delimiter. Gumagawa ito ng parehong gawain tulad ng pag-andar ng Concatenate sa Excel maliban kung kailangan naming tukuyin ang karakter ng delimiter nang isang beses lamang samantalang, sa pag-andar na Concatenate, kailangan naming tukuyin ang character na delimiter tuwing nasa pagitan ng bawat dalawang mga string.

Ang syntax ng pagpapaandar ay

Tulad ng nakikita natin, ang pagpapaandar ay tumatagal ng dalawang mga argumento at nagbabalik ng isang string. Ang mga argumento ay:

  1. Pinagmulan: Kailangan naming tukuyin o magbigay ng sanggunian sa isang hanay ng mga substring na sasali.
  2. Delimiter: Ang delimiter ay ginagamit upang paghiwalayin ang bawat isa sa mga substring kapag lumilikha ng resulta ng string. Dahil ito ay isang opsyonal na argumento, kung aalisin natin ito, ang delimiter ay itinakdang isang puwang "".

Ang pagpapaandar ng VBA SPLIT ay isang eksaktong kabaligtaran na pagpapaandar ng pagpapaandar ng VBA JOIN.

Mga halimbawa ng VBA Join Function

Nasa ibaba ang mga halimbawa ng pag-andar sa pagsali sa Excel VBA.

Maaari mong i-download ang Template ng VBA Sumali sa Function Excel dito - VBA Sumali sa Function Excel Template

Sumali sa VBA - Halimbawa # 1

Ipagpalagay, nais naming sumali sa unang (Ramesh), gitna (Kumar), at apelyido (Mishra).

Ang mga hakbang ay:

  • Una, kailangan naming buksan ang visual basic editor. Maaari naming gawin ang pareho sa pamamagitan ng pag-click sa 'Visual Basic' na utos sa pangkat na 'Code' sa ilalim ng excel ng tab na 'Developer' o maaari naming gamitin ang excel shortcut key Alt + F11.

  • Ipasok ang module sa pamamagitan ng pag-right click sa isang "sheet 1" at pagpili ng 'Ipasok' na utos mula sa menu ng konteksto at pagkatapos ay piliin ang 'Modyul' na isisingit.

  • Lumikha ng isang subroutine na pinangalanang 'JoiningName'.

Code:

 Sub JoiningName () End Sub 

  • Gamitin ang function na SUMALI tulad ng sumusunod

Code:

 Sub JoiningName () Saklaw ("D2"). Halaga = Sumali (Array ("Ramesh", "Kumar", "Mishra")) End Sub 

Maaari naming makita na ginamit namin ang pagpapaandar ng ARRAY upang magbigay ng SourceArray sa function na SUMALI at nilaktawan upang tukuyin ang karakter ng delimiter kaya't ang 'puwang' ay magiging default na character. Ang naprosesong halaga ng function na SUMALI ay isusulat sa cell D2 kapag naisagawa namin ang code na ito gamit ang F5 key o manu-mano.

Sumali sa VBA - Halimbawa # 2

Ipagpalagay, nais naming lumikha ng iba't ibang mga excel file na may pangalan ng item na naglalaman lamang ng mga benta para sa item na iyon.

  • Buksan ang Visual Basic Editor gamit ang key shortcut na Alt + F11.
  • Mag-right click sa sheet na 'Sheet1 ′ (Halimbawa 2)' upang buksan ang menu ng konteksto at mag-click sa 'Ipasok' upang magsingit ng isang 'Module' ng VBA sa proyekto ng VBA.

  • Tukuyin ang isang subroutine na pinangalanang 'LumikhaItemSoldFiles'.

Code:

 Sub CreateItemSoldFiles () Tapusin ang Sub 

  • Kailangan naming magtakda ng isang sanggunian sa 'Microsoft Scripting Runtime' na aklatan ng object gamit ang menu ng Mga Tool -> Mga Sanggunian ... utos, dahil gagamit kami ng ilang code (mga bagay), na hindi gagana kung hindi namin isasama ang library ng object na ito.

  • Ngayon ay idedeklara namin ang lahat ng mga variable.

Code:

 Dim FSO Bilang Bagong Scripting.FileSystemObject

Ang variable ng FSO sa itaas ay nagbibigay ng pag-access sa VBA FileSystemObject. Pagkatapos ng pagbuklod, maaari kaming gumamit ng mga pagpapaandar tulad ng BuildPath, CopyFile, CreateTextFile, atbp.

  • Lumilikha ang susunod na pahayag ng isang bagay na TextStream. Sa pamamagitan ng object ng TextStream, makakabasa tayo mula sa o idugtong sa orihinal na file.

Code:

 Dim FSO Bilang Bagong Scripting.FileSystemObject Dim ts Bilang Scripting.TxtStream

  • Idedeklara namin ang higit pang mga variable. Ang 'r' ay para sa paghawak ng mga hilera sa saklaw, ang 'fs' ay para sa pagtatago ng huling sumali na string, 'cols' para sa pagtatago ng mga bilang ng mga haligi sa saklaw, 'FolPath' para sa pagtatago ng landas ng folder upang mai-save namin ang mga file sa folder at 'Items_Sold' para sa pagtatago ng iba't ibang mga pangalan ng item upang lumikha ng isang file kasama ang mga pangalang ito.

Code:

 Dim r Bilang Saklaw na Dim fs Bilang String Dim cols Bilang Integer Dim FolPath Bilang String Dim ItemSmold Bilang String 

  • Upang mabilang ang kabuuang bilang ng mga haligi sa saklaw, tutukuyin namin ang sumusunod na pahayag.

Code:

cols = Saklaw ("A1"). CurrentRegion.Columns.Count

Ang pahayag na ito ay pipiliin muna ang kasalukuyang rehiyon para sa cell A1 at pagkatapos ay bibilangin ang kabuuang bilang ng mga haligi sa kasalukuyang rehiyon.

  • Isusulat namin ang mga sumusunod na pahayag para sa pagtatalaga ng variable na 'FolPath' isang landas gamit ang pagpapaandar ng VBA ENVIRON at Concatenation Operator.

Code:

FolPath = En environment ("UserProfile") & "\ Desktop \ Items_Sold" Kung Hindi FSO.FolderExists (FolPath) Kung gayon FSO.CreateFolder FolPath

Ang pangalawang pahayag ay lilikha ng folder kung ang folder ay hindi umiiral sa parehong lokasyon.

  • Ang code na ito ay magtatalaga ng mga halaga ng haligi ng B isa-isa sa 'Items_Sold' Ginamit namin ang 'OFFSET function' upang makuha ang sanggunian ng cell sa B haligi dahil ang kasalukuyang napiling cell ay nasa haligi A

Code:

Items_Sold = r.Offset (0, 1). Halaga

  • Ang sumusunod na may hangganan na pahayag ay magbubukas ng mga file na may mga pangalan na nakaimbak sa variable na 'Items_Sold' nang paisa-isa sa appending mode (ang mga bagong halaga ay ididugtong sa wakas).

Code:

 Itakda ang ts = FSO.OpenTextFile (FolPath & "\" & Items_Sold & ".xls", ForAppending, True)

Gumamit kami ng Concatenate operator na may mga variable na 'FolPath' at 'Items_Sold' at mga static na halaga ("\" at ".xls") upang lumikha ng mga pangalan ng file para sa mga excel file.

  • Kailangan nating tandaan na ang pag-andar ng VBA JOIN ay tumatagal ng isang isang-dimensional na array bilang SourceArray Upang mai-convert ang mga hilera sa isang isang-dimensional na array, kailangan naming gumamit ng Application. Mag-transpose ng paraan ng dalawang beses.

Code:

fs = Sumali (Application.Transpose (Application.Transpose (r.Resize (1, cols) .Value)), vbTab)

Ginamit namin ang resize na pamamaraan ng saklaw na bagay upang baguhin ang laki ang saklaw sa lapad ng isang bilang ng mga haligi sa saklaw.

Bilang delimiter, gumamit kami ng 'vbTab' keyword upang ang mga halaga ay mapunan sa iba't ibang mga cell.

  • Tulad ng naimbak namin ang naprosesong halaga ng JOIN function sa variable na 'fs', isusulat namin ang mga halaga ng fs sa mga bagong linya ng VBA na lumikha ng mga excel file para sa bawat hilera sa aming orihinal na file mula sa row number 2 hanggang sa huling hilera (sa aming kaso ito ay ika-350 na hilera).

  • Bago tapusin ang loop, isasara namin ang file na binuksan. Ang code ay ipapakita sa screenshot.

Sinulat na namin ang buong code ngayon.

Code:

 Sub CreateItemSoldFiles () Dim FSO Bilang Bagong Scripting.FileSystemObject Dim ts Bilang Scripting.TxtStream Dim r Bilang Saklaw na Dim fs Bilang String Dim cols Bilang Integer Dim FolPath Bilang String Dim Items_Sold As String cols = Range ("A1"). CurrentRegion.Columns. Bilangin ang FolPath = En environment ("UserProfile") & "\ Desktop \ Mga Item_Sold" Kung Hindi FSO.FolderExists (FolPath) Pagkatapos FSO.CreateFolder FolPath Para sa bawat r Sa Saklaw ("A2", Saklaw ("A1"). Wakas (xlDown) ) Items_Sold = r.Offset (0, 1) .I-set ang Halaga ts = FSO.OpenTextFile (FolPath & "\" & Items_Sold & ".xls", ForAppending, True) fs = Sumali (Application.Transpose (Application.Transpose (r .Baguhin ang laki (1, cols). Halaga)), vbTab) ts.WriteLine fs ts. Isara ang Susunod r End Sub 

Ngayon upang maipatupad ang code, pipindutin namin ang F5 pagkatapos, maaari naming makita na ang isang folder na pinangalanang 'Items_Sold' ay nilikha sa tulong ng VBA code sa desktop.

Sa folder, mayroong 7 natatanging mga file na nilikha kasama ang mga pangalan ng item at maaari naming malaman ang mga detalye tungkol sa partikular na item na iyon sa mga file.

Laptop.xls

Mga Bagay na Dapat Tandaan Tungkol sa VBA JOIN Function

  • Ang Pinagmulan dapat isang isang-dimensional na array. Hindi kami maaaring tumukoy sa isang indibidwal na cell, dahil lilikha ito ng maraming mga multi-dimensional na array.
  • Kung tinukoy namin ang isang zero-length string ("") bilang isang delimiter, ang lahat ng mga item sa array ay pinagsama-sama nang walang mga delimiter.