ВБА Сплит функција - Поделите низ текста у низ

Коришћење ВБА Сплит функције

ВБА Сплит функција вам омогућава да одвојите компоненте компоненте унутар стандардног текстуалног низа где свака компонента користи одређени знак разграничења, нпр. зарез или двотачка. Лакше је користити него писати код за тражење граничника у низу, а затим издвајање вредности.

Може се користити ако читате у реду из вредности раздвојене зарезима (ЦСВ датотека) или имате поштанску адресу која је у једном реду, али желите да је видите као више редова.

Синтакса је:

1 Подељени израз, граничник [опционално], ограничење [опционално], поређење [опционално]

ВБА Сплит функција има четири параметра:

  • Израз - Низ текста који желите да поделите на различите делове.
  • Делимитер (опционо)- низ или знак за штампање - Одређује знак разграничења који ће се користити за раздвајање. Ако није наведен знак разграничења, користи се подразумевани размак.
  • Лимит (опционо) - број - Дефинише колико ће подјела бити направљено. Ако је празно, сви расположиви подјели бит ће направљени унутар низа. Ако је постављено на 1, неће се направити подела. У основи, омогућава вам да одвојите одређени број вредности почевши од почетка низа, нпр. где је жица веома дуга и потребна су вам само прва три дела.
  • Упоредити (опционо) - Ако је ваш граничник текстуални знак, он се користи за пребацивање да ли разграничење разликује велика или мала слова. Вредности су вбБинариЦомпаре (разликују велика и мала слова) и вбТектЦомпаре (не разликују велика и мала слова).

Функција сплит увек враћа низ.

Једноставан пример функције Сплит

123456789101112 Суб СплитЕкампле ()'Дефинишите променљивеДим МиАрраи () Ас Стринг, МиСтринг Ас Стринг, И Ас Вариант'Узорак низа са граничницима размакаМиСтринг = "Један два три четири"'Помоћу функције Сплит подијелите саставне дијелове низаМиАрраи = Сплит (МиСтринг)'понављајте низ креиран да прикаже сваку вредностЗа свакога у МиАрраи -уМсгБок ИЗатим самЕнд Суб

У овом примеру није наведен разделник јер све речи имају размак између њих, па се може користити подразумевани разграничитељ (размак).

Низ нема димензија и постављен је као низ. Променљива И, која се користи у петљи Фор … Нект, мора бити димензионисана као варијанта.

Када се овај код покрене, он ће приказати четири оквира за поруке, по један за сваки од подељених делова, нпр. Један два три. Четири.

Имајте на уму да ако постоји двоструки размак између речи у низу, то ће се оценити као подела, иако нема ништа у себи. Ово можда није резултат који желите да видите.

Овај проблем можете решити тако што ћете помоћу функције Заменити заменити све двоструке размаке једним размаком:

1 МиСтринг = Замени (МиСтринг, "", "")

Задњи или водећи простор такође може изазвати проблеме стварањем празног дела. Често их је веома тешко видети. Ове додатне просторе можете уклонити помоћу функције Трим:

1 МиСтринг = Трим (МиСтринг)

Коришћење функције Сплит са знаком разграничења

Можемо да користимо граничник тачке и зареза (;). Ово се често налази у низовима адреса е -поште за раздвајање адреса. Можда сте примили поруку е -поште која се дели са великим бројем колега и желите да видите листу на свом радном листу коме је упућена. Можете лако копирати адресе е -поште из поља „Прима“ или „Копирај“ у свој код.

123456789101112131415 Суб СплитБиСемицолонЕкампле ()'Дефинишите променљивеДим МиАрраи () Ас Стринг, МиСтринг Ас Стринг, И Ас Вариант, Н Ас Интегер„Узорак низа са граничницима у зарезуМиСтринг = "јохн@мицо.цом; јане@мицо.цом; билл@мицо.цом; јамес@мицо.цом"'Помоћу функције Сплит подијелите саставне дијелове низаМиАрраи = Сплит (МиСтринг, ";")'Очистите радни листАцтивеСхеет.УседРанге.Цлеар'понављајте низЗа Н = 0 до УБоунд (МиАрраи)'Ставите сваку адресу е -поште у прву колону радног листаОпсег ("А" & Н + 1). Вредност = МиАрраи (Н)Следећи Н.Енд Суб

Имајте на уму да се петља Фор… Нект користи за понављање кроз низ. Први елемент у низу увек почиње од нуле, а функција Горња граница се користи за добијање максималног броја елемената.

Након покретања овог кода, ваш радни лист ће изгледати овако:

Коришћење граничног параметра у подељеној функцији

Гранични параметар дозвољава да се одређени број подела изврши од почетка низа. Нажалост, не можете обезбедити почетну позицију или низ подела које треба урадити, тако да је то прилично основно. Можете да направите сопствени ВБА код да бисте креирали функцију за то, а то ће бити објашњено касније у овом чланку.

123456789101112131415 Суб СплитВитхЛимитЕкампле ()'Креирајте променљивеДим МиАрраи () Ас Стринг, МиСтринг Ас Стринг, И Ас Вариант, Н Ас Интегер'Узорак низа са граничницима зарезаМиСтринг = "Један, два, три, четири, пет, шест"'Помоћу функције Сплит подијелите саставне дијелове низаМиАрраи = Сплит (МиСтринг, ",", 4)'Очистите радни листАцтивеСхеет.УседРанге.Цлеар'Понављајте низЗа Н = 0 до УБоунд (МиАрраи)'Ставите сваки расцеп у прву колону радног листаОпсег ("А" & Н + 1). Вредност = МиАрраи (Н)Следећи Н.Енд Суб

Након што покренете овај код, ваш радни лист ће изгледати овако:

Само прве три подељене вредности су приказане одвојено. Касније три вредности приказане су као један дугачак низ и не деле се.

Ако изаберете граничну вредност која је већа од броја граничника унутар низа, то неће произвести грешку. Низ ће бити подељен на све његове саставне делове као да није наведена гранична вредност.

Коришћење параметра за упоређивање у подељеној функцији

Параметар Цомпаре одређује да ли разграничење разликује велика или мала слова. Ово се не примењује ако су граничници зарези, тачке са зарезом или двотачке.

Напомена: Уместо тога, увек можете поставити Оптион Цомпаре Тект <> на врх вашег модула како бисте уклонили велика и мала слова за цео модул.

123456789101112131415 Суб СплитБиЦомпареЕкампле ()'Креирајте променљивеДим МиАрраи () Ас Стринг, МиСтринг Ас Стринг, И Ас Вариант, Н Ас Интегер'Узорак низа са Кс граничницимаМиСтринг = "ОнеКСТвоКСТхреекФоурКСФивекСик"'Помоћу функције Сплит подијелите саставне дијелове низаМиАрраи = Сплит (МиСтринг, "Кс",, вбБинариЦомпаре)'Очистите радни листАцтивеСхеет.УседРанге.Цлеар'понављајте низЗа Н = 0 до УБоунд (МиАрраи)'Ставите сваки расцеп у прву колону радног листаОпсег ("А" & Н + 1). Вредност = МиАрраи (Н)Следећи Н.Енд Суб

У овом примеру, низ који треба поделити користи знак „Кс“ као граничник. Међутим, у овом низу постоји мешавина великих и малих слова „Кс“. Параметар Цомпаре у функцији Сплит користи велика слова „Кс“.

Ако је параметар за упоређивање постављен на вбБинариЦомпаре, мали „к“ знакови ће се занемарити и ваш радни лист ће изгледати овако:

Ако је параметар за упоређивање постављен на вбТектЦомпаре, тада ће се мали слова „к“ користити у подјели и ваш радни лист ће изгледати овако:

Имајте на уму да је вредност у ћелији А6 скраћена јер садржи мала слова „к“. Будући да подјела не разликује велика и мала слова, сваки граничник који чини дио подниза узроковат ће подјелу.

Ово је важна ствар коју треба имати на уму када користите граничник текста и вбТектЦомпаре. Лако можете завршити са погрешним резултатом.

Коришћење знакова који се не могу штампати као знак разграничења

Као граничник можете користити знакове који се не могу штампати, као што је повратак карике (прелом реда).

Овде користимо вбЦр да наведемо повратак карике <>

123456789101112131415 Суб СплитБиНонПринтаблеЕкампле ()'Креирајте променљивеДим МиАрраи () Ас Стринг, МиСтринг Ас Стринг, И Ас Вариант, Н Ас Интегер„Узорак низа са граничницима за враћање носачаМиСтринг = "Један" & вбЦр & "Два" & вбЦр & "Три" & вбЦр & "Четири" & вбЦр & "Пет" & вбЦр & "Шест"'Помоћу функције Сплит подијелите саставне дијелове низаМиАрраи = Сплит (МиСтринг, вбЦр,, вбТектЦомпаре)'Очистите радни листАцтивеСхеет.УседРанге.Цлеар'Понављајте низЗа Н = 0 до УБоунд (МиАрраи)'Ставите сваки расцеп у прву колону радног листаОпсег ("А" & Н + 1). Вредност = МиАрраи (Н)Следећи Н.Енд Суб

У овом примеру, низ је изграђен користећи вбЦр (знак за враћање носача) као граничник.

Када се овај код покрене, ваш радни лист ће изгледати овако:

Коришћење функције придруживања за преокретање раздвајања

Функција Придруживање ће се поново придружити свим елементима низа, али помоћу наведеног граничника. Ако није наведен знак разграничења, користиће се размак.

123456789101112131415 Суб ЈоинЕкампле ()'Креирајте променљивеДим МиАрраи () Ас Стринг, МиСтринг Ас Стринг, И Ас Вариант, Н Ас ИнтегерДим Таргет Ас Стринг'Узорак низа са граничницима зарезаМиСтринг = "Један, два, три, четири, пет, шест"'Поставите МиСтринг у ћелију А1Опсег ("А1"). Вредност = МиСтринг'Помоћу функције Сплит подијелите саставне дијелове низаМиАрраи = Сплит (МиСтринг, ",")'Користите функцију придруживања за поновно креирање оригиналног низа помоћу граничника са зарезомТаргет = Јоин (МиАрраи, ”;”)'Ставите резултат у ћелију А2Опсег („А2“). Вредност = ЦиљЕнд Суб

Овај код раздваја низ са граничницима зареза у низ и поново га спаја помоћу граничника са зарезом.

Након покретања овог кода, ваш радни лист ће изгледати овако:

Ћелија А1 има оригинални низ са граничницима зареза, а ћелија А2 има нови спојени низ са граничницима у зарезу.

Коришћење функције Сплит за бројање речи

Имајући на уму да променљива стринга у Екцелу ВБА може бити дугачка до 2 Гб, функцију раздвајања можете користити за бројање речи у делу текста. Очигледно, Мицрософт Ворд то ради аутоматски, али ово би могло бити корисно за једноставну текстуалну датотеку или текст копиран из друге апликације.

1234567891011121314 ПодбројОд примери речи ()'Креирајте променљивеДим МиАрраи () Ас Стринг, МиСтринг Ас Стринг'Узорак низа са граничницима размакаМиСтринг = "Један два три четири пет шест"'Уклоните све двоструке размакеМиСтринг = Замени (МиСтринг, "", "")'Уклоните све водеће или задње размакеМиСтринг = Трим (МиСтринг)'Помоћу функције Сплит подијелите саставне дијелове низаМиАрраи = Сплит (МиСтринг)'Прикажите број речи помоћу функције УБоундМсгБок "Број речи" & УБоунд (МиАрраи) + 1Енд Суб

Једна од опасности овог кода за бројање речи је та што ће га избацити двоструки размаци и водећи и крајњи размаци. Ако су присутне, рачунаће се као додатне речи, а број речи ће завршити као нетачан.

Код користи функције Замена и Скраћивање да уклони ове додатне размаке.

Коначна линија кода приказује број речи пронађених коришћењем функције УБоунд да би се добио максимални број елемената низа, а затим повећао за 1. То је зато што први елемент низа почиње на нули.

Раздвајање адресе у ћелије радног листа

Е -маил адресе су често дуги низови текста са граничницима зареза. Можда бисте желели да сваки део адресе поделите у засебну ћелију.

123456789101112131415 Пример под -адресе ()'Креирајте променљивеДим МиАрраи () као низ, МиСтринг као низ, Н као цео број'Подесите стринг са адресом корпорације МицрософтМиСтринг = "Мицрософт Цорпоратион, Оне Мицрософт Ваи, Редмонд, ВА 98052-6399 УСА"'Помоћу функције сплит поделите низ помоћу граничника зарезаМиАрраи = Сплит (МиСтринг, ",")'Очистите радни листАцтивеСхеет.УседРанге.Цлеар'понављајте низЗа Н = 0 до УБоунд (МиАрраи)'Ставите сваки расцеп у прву колону радног листаОпсег ("А" & Н + 1). Вредност = МиАрраи (Н)Следећи Н.Енд Суб

Покретање овог кода ће користити граничник зареза за стављање сваког реда адресе у засебну ћелију:

Ако желите само да вратите поштански број (последњи елемент низа), могли бисте да користите код:

123456789101112 Под адресаЗипЦодеЕкампле ()'Креирајте променљивеДим МиАрраи () Ас Стринг, МиСтринг Ас Стринг, Н Ас Интегер, Темп Ас Стринг'Подесите стринг са адресом корпорације МицрософтМиСтринг = "Мицрософт Цорпоратион, Оне Мицрософт Ваи, Редмонд, ВА 98052-6399 УСА"'Помоћу функције сплит поделите низ помоћу граничника зарезаМиАрраи = Сплит (МиСтринг, ",")'Очистите радни листАцтивеСхеет.УседРанге.Цлеар'Ставите поштански број у ћелију А1Опсег ("А1"). Вредност = МиАрраи (УБоунд (МиАрраи))Енд Суб

Ово ће користити само последњи елемент у низу, који се налази помоћу функције УБоунд.

С друге стране, можда бисте желели да видите све редове у једној ћелији како би се могли одштампати на налепници адресе:

1234567891011121314151617 Пример под -адресе ()'Креирајте променљивеДим МиАрраи () Ас Стринг, МиСтринг Ас Стринг, Н Ас Интегер, Темп Ас Стринг„Подесите стринг са адресом корпорације МицрософтМиСтринг = "Мицрософт Цорпоратион, Оне Мицрософт Ваи, Редмонд, ВА 98052-6399 УСА"'Помоћу функције сплит поделите низ помоћу граничника зарезаМиАрраи = Сплит (МиСтринг, ",")'Очистите радни листАцтивеСхеет.УседРанге.Цлеар'понављајте низЗа Н = 0 до УБоунд (МиАрраи)'поставите сваки елемент низа и знак за унос реда у низТемп = Темп & МиАрраи (Н) & вбЛфСледећи Н.'Ставите стринг на радни листОпсег ("А1") = ТемпЕнд Суб

Овај пример функционише на исти начин као и претходни, само што ствара привремени низ свих елемената низа, али убацујући знак уноса реда након сваког елемента.

Радни лист ће изгледати овако након покретања кода:

Поделите низ у ћелије радног листа

Низ Сплит можете копирати у ћелије радног листа <> само једном наредбом:

12345678910 Суб ЦопиТоРанге ()'Креирајте променљивеДим МиАрраи () Ас Стринг, МиСтринг Ас Стринг'Узорак низа са граничницима размакаМиСтринг = "Један, два, три, четири, пет, шест"'Помоћу функције Сплит подијелите саставне дијелове низаМиАрраи = Сплит (МиСтринг, ",")'Копирајте низ у радни листОпсег ("А1: А" & УБоунд (МиАрраи) + 1) .Валуе = Радни лист Функција. Транспозиција (МиАрраи)Енд Суб

Када се овај код покрене, ваш радни лист ће изгледати овако:

Креирање нове функције за омогућавање цепања са дате тачке

Параметар Лимит у функцији Сплит дозвољава само да наведете горњу границу на којој желите да се раздвајање заустави. Увек почиње од почетка низа.

Било би веома корисно имати сличну функцију у којој можете навести почетну тачку поделе унутар низа и број подјела које желите да видите од те тачке па надаље. Такође ће извући само поделе које сте навели у низу, уместо да има огромну вредност низа као последњи елемент у низу.

Лако можете сами изградити функцију (која се назива СплитСлицер) у ВБА да бисте то учинили:

123456789101112131415161718192021222324 Функција СплитСлицер (Таргет Ас Стринг, Дел Ас Стринг, Старт Ас Интегер, Н Ас Интегер)'Направи променљиву пољаДим МиАрраи () Ас Стринг'Снимите раздвајање помоћу променљиве старт помоћу знака разграничењаМиАрраи = Сплит (Таргет, Дел, Старт)„Проверите да ли је стартни параметар већи од броја подела - то може изазвати проблемеАко је Старт> УБоунд (МиАрраи) + 1 Затим„Прикажите грешку и изађите из функцијеМсгБок "Параметар почетка је већи од броја расположивих подела"СплитСлицер = МиАрраиИзлазна функцијаКрај Ако'Ставите последњи елемент низа у низЦиљ = МиАрраи (УБоунд (МиАрраи))'Поделите низ користећи Н као границуМиАрраи = Сплит (Таргет, Дел, Н)„Проверите да ли је горња граница већа од нуле јер код уклања последњи елементАко је УБоунд (МиАрраи)> 0 Тада'Користите РеДим за уклањање завршног елемента низаРеДим Пресерве МиАрраи (УБоунд (МиАрраи) - 1)Крај Ако'Врати нови низСплитСлицер = МиАрраиЗавршна функција

Ова функција је изграђена са четири параметра:

  • Таргет - стринг - ово је улазни низ који желите да поделите
  • Дел - стринг или знак за штампање - ово је знак разграничења који користите нпр. зарез, двотачка
  • Почетак - број - ово је почетак поделе за вашу кришку
  • Н - број - ово је број подела које желите да урадите у оквиру исечка

Ниједан од ових параметара није опциони или има подразумеване вредности, али то можете унети у код функције ако га желите додатно проширити.

Функција користи функцију Сплит за креирање низа користећи параметар Старт као лимит. То значи да ће елементи низа држати поделе до почетног параметра, али ће остатак низа бити последњи елемент и неће се делити.

Последњи елемент у низу се враћа назад у низ помоћу функције УБоунд да би се утврдило који је ово елемент.

Низ се затим поново дели у низ, користећи Н као граничну променљиву. То значи да ће се подјели извршити за низ до позиције Н, након чега ће остатак низа формирати посљедњи елемент у низу.

Наредба РеДим користи се за уклањање последњег елемента јер желимо само одређене елементе који су остављени у низу. Имајте на уму да се користи параметар Пресерве, иначе ће сви подаци у низу бити изгубљени.

Нови низ се затим враћа у код из ког је позван.

Имајте на уму да је код „заштићен од грешака“. Корисници ће често радити чудне ствари о којима нисте размишљали. На пример, ако покушају да користе функцију са параметром Старт или Н већим од доступног броја подела у низу, то ће вероватно изазвати грешку функције.

Код је укључен за проверу почетне вредности, као и за проверу да ли постоји елемент који се може уклонити када се наредба РеДим користи у низу.

Ево кода за тестирање функције:

123456789101112 Под ТестСплитСлицер ()'Креирајте променљивеДим МиАрраи () Ас Стринг, МиСтринг Ас Стринг'Дефинирајте узорак низа са граничницима зарезаМиСтринг = "Један, два, три, четири, пет, шест, седам, осам, девет, десет"'Помоћу функције Сплитслицер дефинирајте нови низМиАрраи = СплитСлицер (МиСтринг, ",", 4, 3)'Обришите активни листАцтивеСхеет.УседРанге.Цлеар'Копирајте низ у радни листОпсег ("А1: А" & УБоунд (МиАрраи) + 1) .Валуе = Радни лист Функција. Транспозиција (МиАрраи)Енд Суб

Покрените овај код и ваш радни лист ће изгледати овако:

Ви ће помоћи развој сајта, дељење страницу са пријатељима

wave wave wave wave wave