Regex ដើម្បីស្រង់ខ្សែអក្សរក្នុង Excel (មួយ ឬទាំងអស់ត្រូវគ្នា)

  • ចែករំលែកនេះ។
Michael Brown

តារាង​មាតិកា

នៅក្នុងមេរៀននេះ អ្នកនឹងរៀនពីរបៀបប្រើកន្សោមធម្មតានៅក្នុង Excel ដើម្បីស្វែងរក និងស្រង់ខ្សែអក្សររងដែលត្រូវគ្នានឹងលំនាំដែលបានផ្តល់ឱ្យ។

Microsoft Excel ផ្តល់នូវមុខងារមួយចំនួនដើម្បីស្រង់អត្ថបទ ពីកោសិកា។ មុខងារទាំងនោះអាចទប់ទល់នឹងបញ្ហាប្រឈមក្នុងការទាញយកខ្សែអក្សរភាគច្រើននៅក្នុងសន្លឹកកិច្ចការរបស់អ្នក។ ភាគច្រើន ប៉ុន្តែមិនមែនទាំងអស់ទេ។ នៅពេលដែលមុខងារអត្ថបទជំពប់ដួល កន្សោមធម្មតាមកជួយសង្គ្រោះ។ រង់ចាំ… Excel មិនមានមុខងារ RegEx ទេ! ពិត​ហើយ គ្មាន​មុខងារ​ដែល​មាន​ស្រាប់។ ប៉ុន្តែគ្មានអ្វីដែលអាចរារាំងអ្នកពីការប្រើប្រាស់ផ្ទាល់ខ្លួនរបស់អ្នកទេ :)

    មុខងារ Excel VBA Regex ដើម្បីស្រង់ខ្សែអក្សរ

    ដើម្បីបន្ថែមមុខងារ Regex Extract ផ្ទាល់ខ្លួនទៅ Excel របស់អ្នក បិទភ្ជាប់កូដខាងក្រោមនៅក្នុងកម្មវិធីនិពន្ធ VBA ។ ដើម្បីបើកកន្សោមធម្មតានៅក្នុង VBA យើងកំពុងប្រើវត្ថុ Microsoft RegExp ដែលភ្ជាប់មកជាមួយ។

    មុខងារសាធារណៈ RegExpExtract(អត្ថបទជា String លំនាំជា String ជំរើស instance_num ជាចំនួនគត់ = 0 ស្រេចចិត្ត match_case As Boolean = True ) Dim text_matches() As String Dim matches_index As Integer On Error GoTo ErrHandl RegExpExtract = "" Set regex = CreateObject ( "VBScript.RegExp" ) regex.pattern = pattern regex.Global = True regex.MultiLine = True If True = match_case បន្ទាប់មក regex. ignorecase = False Else regex.ignorecase = True End If Set matches = regex.Execute(text) ប្រសិនបើ 0 < matches.Count Then If (0 = instance_num) Then ReDim text_matches(matches.Count - 1, 0) សម្រាប់ matches_index = 0 ទៅVBA RegExp ខ្ញុំលើកទឹកចិត្តអ្នកឱ្យអានផ្នែកបន្ទាប់ដែលពិភាក្សាអំពីមុខងារ .NET Regex ដែលមានអនុភាពច្រើន។

    មុខងារ Regex ដែលមានមូលដ្ឋានលើ .NET ផ្ទាល់ខ្លួន ដើម្បីស្រង់អត្ថបទក្នុង Excel

    មិនដូចមុខងារ VBA RegExp ដែល អាចត្រូវបានសរសេរដោយអ្នកប្រើប្រាស់ Excel ណាក៏ដោយ .NET RegEx គឺជាអាណាចក្ររបស់អ្នកអភិវឌ្ឍន៍។ Microsoft .NET Framework គាំទ្រវាក្យសម្ព័ន្ធកន្សោមធម្មតាដែលមានលក្ខណៈពេញលេញដែលត្រូវគ្នាជាមួយ Perl 5។ អត្ថបទនេះនឹងមិនបង្រៀនអ្នកពីរបៀបសរសេរមុខងារបែបនេះទេ (ខ្ញុំមិនមែនជាអ្នកសរសេរកម្មវិធីទេ ហើយមិនមានគំនិតតិចតួចបំផុតអំពីរបៀបធ្វើវា :)

    មុខងារដ៏មានអានុភាពចំនួនបួនដែលត្រូវបានដំណើរការដោយម៉ាស៊ីន .NET RegEx ស្តង់ដារត្រូវបានសរសេររួចហើយដោយអ្នកអភិវឌ្ឍន៍របស់យើង ហើយរួមបញ្ចូលនៅក្នុង Ultimate Suite។ ខាងក្រោមនេះ យើងនឹងបង្ហាញពីការប្រើប្រាស់ជាក់ស្តែងមួយចំនួននៃមុខងារដែលត្រូវបានរចនាឡើងជាពិសេសសម្រាប់ការស្រង់អត្ថបទក្នុង Excel។

    គន្លឹះ។ សម្រាប់ព័ត៌មានអំពីវាក្យសម្ព័ន្ធ .NET Regex សូមយោងទៅ .NET Regular Expression Language ។

    របៀប​ដក​ឃ្លា​ចេញ​ក្នុង Excel ដោយ​ប្រើ​កន្សោម​ធម្មតា

    សន្មត់​ថា​អ្នក​បាន​ដំឡើង​កំណែ Ultimate Suite ចុងក្រោយ​បង្អស់ ការ​ស្រង់​អត្ថបទ​ដោយ​ប្រើ​កន្សោម​ធម្មតា​នឹង​ធ្លាក់​ចុះ​ដល់​ជំហាន​ពីរ​នេះ៖

    1. នៅលើផ្ទាំង Ablebits Data ក្នុងក្រុម Text ចុច Regex Tools
    2. នៅលើបន្ទះ ឧបករណ៍ Regex សូមជ្រើសរើសទិន្នន័យប្រភព បញ្ចូលលំនាំ Regex របស់អ្នក ហើយជ្រើសរើសជម្រើស Extract ។ ដើម្បី​ទទួល​បាន​លទ្ធផល​ជា​មុខងារ​ផ្ទាល់​ខ្លួន មិន​មែន​ជា​តម្លៃ​ទេ សូម​ជ្រើសរើស Insert as a formula checkប្រអប់។ នៅពេលរួចរាល់ សូមចុចប៊ូតុង Extract

    លទ្ធផលនឹងបង្ហាញក្នុងជួរឈរថ្មីនៅខាងស្តាំទិន្នន័យដើមរបស់អ្នក៖

    វាក្យសម្ព័ន្ធ AblebitsRegexExtract

    មុខងារផ្ទាល់ខ្លួនរបស់យើងមានវាក្យសម្ព័ន្ធដូចខាងក្រោម៖

    AblebitsRegexExtract(reference, regular_expression)

    Where:

    • Reference (required) - សេចក្តីយោងទៅកាន់ក្រឡាដែលមានខ្សែអក្សរប្រភព។
    • Regular_expression (ទាមទារ) - លំនាំ regex ដែលត្រូវនឹង។

    ចំណាំសំខាន់! មុខងារនេះដំណើរការតែលើម៉ាស៊ីនដែលដំឡើង Ultimate Suite for Excel ប៉ុណ្ណោះ។

    កំណត់ចំណាំការប្រើប្រាស់

    ដើម្បីធ្វើឱ្យខ្សែកោងការរៀនរបស់អ្នកកាន់តែរលូន និងបទពិសោធន៍របស់អ្នកកាន់តែរីករាយ សូមយកចិត្តទុកដាក់លើចំណុចទាំងនេះ៖

    1. ដើម្បីបង្កើតរូបមន្ត អ្នកអាចប្រើ ឧបករណ៍ Regex របស់យើង ឬប្រអប់ បញ្ចូលមុខងារ របស់ Excel ឬវាយឈ្មោះមុខងារពេញលេញក្នុងក្រឡាមួយ។ នៅពេលដែលរូបមន្តត្រូវបានបញ្ចូល អ្នកអាចគ្រប់គ្រងវាបាន (កែសម្រួល ចម្លង ឬផ្លាស់ទី) ដូចរូបមន្តដើមណាមួយ។
    2. លំនាំដែលអ្នកបញ្ចូលនៅលើបន្ទះ ឧបករណ៍ Regex ទៅអាគុយម៉ង់ទី 2 ។ វាក៏អាចធ្វើទៅបានដើម្បីរក្សាកន្សោមធម្មតានៅក្នុងក្រឡាដាច់ដោយឡែកមួយ។ ក្នុងករណីនេះ គ្រាន់តែប្រើឯកសារយោងក្រឡាសម្រាប់អាគុយម៉ង់ទី 2។
    3. មុខងារដកការផ្គូផ្គង ដែលបានរកឃើញដំបូង
    4. តាមលំនាំដើម មុខងារគឺ ករណី -sensitive ។ សម្រាប់ការផ្គូផ្គងអក្សរតូចធំ ប្រើលំនាំ (?i)។
    5. ប្រសិនបើការផ្គូផ្គងមិនត្រូវបានរកឃើញទេ កំហុស #N/A គឺត្រឡប់មកវិញ។

    Regex ដើម្បីស្រង់ខ្សែអក្សររវាងតួអក្សរពីរ

    ដើម្បីទទួលបានអត្ថបទរវាងតួអក្សរពីរ អ្នកអាចប្រើទាំងក្រុមចាប់យក ឬមើលជុំវិញ។

    តោះ និយាយថាអ្នកកំពុងស្វែងរកការដកស្រង់អត្ថបទរវាងតង្កៀប។ ការចាប់យកក្រុមគឺជាវិធីងាយស្រួលបំផុត។

    លំនាំ 1 : \[(.*?)\]

    ជាមួយនឹងការមើលទៅក្រោយវិជ្ជមាន និងមើលទៅខាងមុខ លទ្ធផលនឹងពិតប្រាកដ ដូចគ្នា។

    លំនាំ 2 : (?<=\[) (.*?)(?=\])

    សូមយកចិត្តទុកដាក់ថាក្រុមថតរបស់យើង (.*?) អនុវត្ត ការស្វែងរកខ្ជិល សម្រាប់អត្ថបទរវាងតង្កៀបពីរ - ពីដំបូង [ទៅទីមួយ]។ ក្រុមចាប់យកដោយគ្មានសញ្ញាសួរ (.*) នឹងធ្វើការ ការស្វែងរកដោយលោភលន់ ហើយចាប់យកអ្វីគ្រប់យ៉ាងពីដំបូង [ ដល់ចុងក្រោយ ]។

    ជាមួយនឹងលំនាំនៅក្នុង A2 រូបមន្តនឹងទៅជា ដូចតទៅ៖

    =AblebitsRegexExtract(A5, $A$2)

    របៀបដើម្បីទទួលបានការប្រកួតទាំងអស់

    ដូចដែលបានរៀបរាប់រួចមកហើយ មុខងារ AblebitsRegexExtract អាចទាញយកការប្រកួតតែមួយប៉ុណ្ណោះ។ ដើម្បីទទួលបានការប្រកួតទាំងអស់ អ្នកអាចប្រើមុខងារ VBA ដែលយើងបានពិភាក្សាពីមុន។ ទោះយ៉ាងណាក៏ដោយ មានការព្រមានមួយ - VBA RegExp មិនគាំទ្រការចាប់យកក្រុមទេ ដូច្នេះលំនាំខាងលើនឹងបង្ហាញតួអក្សរ "ព្រំដែន" មកវិញផងដែរ តង្កៀបនៅក្នុងករណីរបស់យើង។

    =TEXTJOIN(" ", TRUE, RegExpExtract(A5, $A$2))

    ដើម្បីកម្ចាត់ នៃតង្កៀប ជំនួសពួកវាដោយខ្សែអក្សរទទេ ("") ដោយប្រើរូបមន្តនេះ៖

    =SUBSTITUTE(SUBSTITUTE(TEXTJOIN(", ", TRUE, RegExpExtract(A5, $A$2)), "]", ""),"[","")

    សម្រាប់ការអានកាន់តែប្រសើរ យើងកំពុងប្រើសញ្ញាក្បៀសសម្រាប់កំណត់ព្រំដែន។

    Regex ដើម្បីស្រង់អត្ថបទរវាងខ្សែអក្សរពីរ

    វិធីសាស្រ្តដែលយើងបានដំណើរការបកប្រែវាតាមព្យញ្ជនៈ)។

  • (?:[A-Za-z\d\-\.]{2,255}\.)? - ក្រុមដែលមិនចាប់យកដើម្បីកំណត់អត្តសញ្ញាណដែនកម្រិតទីបី កម្រិតទីបួន។ នៅក្នុងលំនាំទីមួយ វាត្រូវបានដាក់ក្នុងក្រុមចាប់យកធំជាងមុន ដើម្បីទទួលបានដែនរងបែបនេះទាំងអស់ដែលរួមបញ្ចូលក្នុងការទាញយក។ ដែនរងមួយអាចមានប្រវែងពី 2 ទៅ 255 តួ ដូច្នេះហើយជាចំនួន {2,255} ។
  • ([A-Za-z\d\-]{1,63}\.[A-Za-z] {2,24}) - ចាប់យកក្រុមដើម្បីទាញយកដែនកម្រិតទីពីរ ( ablebits ) និងដែនកម្រិតកំពូល ( com ) ។ ប្រវែងអតិបរមានៃដែនកម្រិតទីពីរគឺ 63 តួអក្សរ។ ដែនកម្រិតកំពូលដែលវែងបំផុតនាពេលបច្ចុប្បន្នមាន 24 តួអក្សរ។
  • អាស្រ័យលើកន្សោមធម្មតាដែលត្រូវបានបញ្ចូលក្នុង A2 រូបមន្តខាងក្រោមនឹងបង្កើតលទ្ធផលខុសៗគ្នា៖

    =AblebitsRegexExtract(A5, $A$2)

    Regex ដើម្បីស្រង់ចេញ ឈ្មោះដែនពេញ ជាមួយនឹងដែនរងទាំងអស់៖

    Regex ដើម្បីស្រង់ចេញ កម្រិតទីពីរ ដែន ដោយគ្មានដែនរង៖

    នោះជារបៀបស្រង់ផ្នែកនៃអត្ថបទក្នុង Excel ដោយប្រើកន្សោមធម្មតា។ ខ្ញុំសូមអរគុណចំពោះការអាន ហើយទន្ទឹងរង់ចាំជួបអ្នកនៅលើប្លក់របស់យើងនៅសប្តាហ៍ក្រោយ!

    ការទាញយកដែលមាន

    Excel Regex Extract example (.xlsm file)

    Ultimate Suite កំណែសាកល្បង (ឯកសារ .exe)

    \b(0?[0-9]matches.Count - 1 text_matches(matches_index, 0) = matches.Item(matches_index) Next matches_index RegExpExtract = text_matches Else RegExpExtract = matches.Item(instance_num - 1) End If End If Exit Function ErrHandl: RegExpExtract = ErrVuex(CVErrx)

    ប្រសិនបើអ្នកមានបទពិសោធន៍តិចតួចជាមួយ VBA ការណែនាំអ្នកប្រើប្រាស់ជាជំហានៗអាចមានប្រយោជន៍៖ របៀបបញ្ចូលកូដ VBA ក្នុង Excel។

    ចំណាំ។ ដើម្បីឱ្យមុខងារដំណើរការ ត្រូវប្រាកដថារក្សាទុកឯកសាររបស់អ្នកជា សៀវភៅការងារដែលបានបើកម៉ាក្រូ (.xlsm)។

    វាក្យសម្ព័ន្ធ RegExpExtract

    មុខងារ RegExpExtract ស្វែងរកខ្សែអក្សរបញ្ចូលសម្រាប់តម្លៃដែលត្រូវគ្នានឹងកន្សោមធម្មតា ហើយស្រង់ចេញពីការផ្គូផ្គងមួយ ឬទាំងអស់។

    មុខងារមានវាក្យសម្ព័ន្ធដូចខាងក្រោម :

    RegExpExtract(text, pattern, [instance_num], [match_case])

    Where:

    • Text (required) - ខ្សែអក្សរអត្ថបទដែលត្រូវស្វែងរក។
    • លំនាំ (ទាមទារ) - កន្សោមធម្មតាដែលត្រូវគ្នា។ នៅពេលដែលបានផ្គត់ផ្គង់ដោយផ្ទាល់ក្នុងរូបមន្ត គំរូគួរត្រូវបានរុំព័ទ្ធដោយសញ្ញាសម្រង់ទ្វេ។
    • Instance_num (ជាជម្រើស) - លេខសៀរៀលដែលបង្ហាញថាវត្ថុណាមួយដែលត្រូវស្រង់ចេញ។ ប្រសិនបើលុបចោល ត្រឡប់ការផ្គូផ្គងដែលបានរកឃើញទាំងអស់ (លំនាំដើម)។
    • Match_case (ជាជម្រើស) - កំណត់ថាតើត្រូវគ្នា ឬមិនអើពើករណីអត្ថបទ។ ប្រសិនបើពិត ឬលុបចោល (លំនាំដើម) ការផ្គូផ្គងអក្សរតូចធំត្រូវបានអនុវត្ត។ ប្រសិនបើ FALSE - មិនប្រកាន់អក្សរតូចធំ។

    មុខងារនេះដំណើរការនៅគ្រប់កំណែទាំងអស់នៃ Excel 365, Excel 2021, Excel2019, Excel 2016, Excel 2013 និង Excel 2010។

    4 អ្វីដែលអ្នកគួរដឹងអំពី RegExpExtract

    ដើម្បីប្រើប្រាស់មុខងារក្នុង Excel របស់អ្នកប្រកបដោយប្រសិទ្ធភាព មានចំណុចសំខាន់មួយចំនួនដែលត្រូវកត់សម្គាល់៖

    1. តាមលំនាំដើម មុខងារត្រឡប់ ការផ្គូផ្គងដែលបានរកឃើញទាំងអស់ ទៅក្នុងក្រឡាជិតខាង ដូចបានបង្ហាញក្នុងឧទាហរណ៍នេះ។ ដើម្បីទទួលបានការកើតឡើងជាក់លាក់ សូមផ្តល់លេខដែលត្រូវគ្នាទៅនឹងអាគុយម៉ង់ instance_num
    2. តាមលំនាំដើម មុខងារគឺ ប្រកាន់អក្សរតូចធំ ។ សម្រាប់​ការ​ផ្គូផ្គង​ដែល​មិន​ប្រកាន់​អក្សរតូចធំ សូម​កំណត់​អាគុយម៉ង់ match_case ទៅ FALSE។ ដោយសារតែការកំណត់ VBA នោះ សំណង់ដែលប្រកាន់អក្សរតូចធំ (?i) នឹងមិនដំណើរការទេ។
    3. ប្រសិនបើ លំនាំត្រឹមត្រូវមិនត្រូវបានរកឃើញ នោះមុខងារនឹងមិនត្រឡប់អ្វីទាំងអស់ (ខ្សែអក្សរទទេ)<។ 13>
    4. ប្រសិនបើ លំនាំមិនត្រឹមត្រូវ នោះ #VALUE! កំហុសកើតឡើង។

    មុនពេលអ្នកចាប់ផ្តើមប្រើមុខងារផ្ទាល់ខ្លួននេះនៅក្នុងសន្លឹកកិច្ចការរបស់អ្នក អ្នកត្រូវយល់ពីអ្វីដែលវាមានសមត្ថភាពមែនទេ? ឧទាហរណ៍ខាងក្រោមគ្របដណ្តប់ករណីប្រើប្រាស់ទូទៅមួយចំនួន ហើយពន្យល់ពីមូលហេតុដែលឥរិយាបថអាចខុសគ្នានៅក្នុង Dynamic Array Excel (Microsoft 365 និង Excel 2021) និង Excel ប្រពៃណី (ឆ្នាំ 2019 និងកំណែចាស់ជាងនេះ)។

    ចំណាំ។ ចេញឧទាហរណ៍ regex ត្រូវបានសរសេរសម្រាប់សំណុំទិន្នន័យសាមញ្ញ។ យើងមិនអាចធានាថាពួកគេនឹងដំណើរការដោយគ្មានកំហុសនៅក្នុងសន្លឹកកិច្ចការពិតប្រាកដរបស់អ្នក។ អ្នកដែលមានបទពិសោធន៍ជាមួយ regex នឹងយល់ស្របថាការសរសេរកន្សោមធម្មតាគឺជាផ្លូវដែលគ្មានទីបញ្ចប់ទៅកាន់ភាពល្អឥតខ្ចោះ - ស្ទើរតែតែងតែមានវិធីដើម្បីធ្វើឱ្យវាកាន់តែឆើតឆាយ ឬមានសមត្ថភាពគ្រប់គ្រងជួរទិន្នន័យបញ្ចូលកាន់តែទូលំទូលាយ។

    Regex ដើម្បីស្រង់លេខចេញពីខ្សែអក្សរ

    ដោយធ្វើតាមមូលដ្ឋានអតិបរមានៃការបង្រៀន "ពីសាមញ្ញទៅស្មុគស្មាញ" យើងនឹងចាប់ផ្តើមជាមួយករណីសាមញ្ញបំផុត៖ ការស្រង់លេខចេញពីខ្សែអក្សរ។

    The រឿងដំបូងសម្រាប់អ្នកក្នុងការសម្រេចចិត្តគឺលេខមួយណាដែលត្រូវទៅយក៖ ដំបូង ចុងក្រោយ ការកើតឡើងជាក់លាក់ ឬលេខទាំងអស់។

    ដកលេខដំបូង

    នេះគឺសាមញ្ញដូច regex អាចទទួលបាន។ ដោយគិតថា \d មានន័យថាខ្ទង់ណាមួយពី 0 ទៅ 9 ហើយ + មានន័យថាមួយ ឬច្រើនដង កន្សោមធម្មតារបស់យើងយកទម្រង់នេះ៖

    លំនាំ : \d+

    កំណត់ instance_num ទៅ 1 ហើយអ្នកនឹងទទួលបានលទ្ធផលដែលចង់បាន៖

    =RegExpExtract(A5, "\d+", 1)

    កន្លែងដែល A5 ជាខ្សែអក្សរដើម។

    ដើម្បីភាពងាយស្រួល អ្នកអាចបញ្ចូល លំនាំនៅក្នុងក្រឡាដែលបានកំណត់ជាមុន ($A$2) ហើយចាក់សោអាសយដ្ឋានរបស់វាដោយសញ្ញា $:

    =RegExpExtract(A5, $A$2, 1)

    ទទួលបានលេខចុងក្រោយ

    ដើម្បីស្រង់លេខចុងក្រោយនៅក្នុងខ្សែអក្សរ នេះជាគំរូដែលត្រូវប្រើ៖

    លំនាំ : (\d+)(?!.*\d)

    បានបកប្រែទៅជាភាសាមនុស្ស វានិយាយថា៖ ស្វែងរកលេខដែលមិនធ្វើតាម (កន្លែងណាក៏ដោយ មិនមែនភ្លាមៗទេ) ដោយលេខផ្សេងទៀត។ ដើម្បីបង្ហាញវា យើងកំពុងប្រើការមើលអវិជ្ជមាន (?!.*\d) ដែលមានន័យថា នៅខាងស្តាំនៃលំនាំមិនគួរមានខ្ទង់ផ្សេងទៀត (\d) ដោយមិនគិតពីចំនួនតួអក្សរផ្សេងទៀតនៅពីមុខវា។

    =RegExpExtract(A5, "(\d+)(?!.*\d)")

    គន្លឹះ៖

    • ដើម្បីទទួលបាន ការកើតឡើងជាក់លាក់ សូមប្រើ \d+ សម្រាប់ លំនាំ និងសៀរៀលសមស្របលេខសម្រាប់ instance_num
    • រូបមន្តដើម្បីស្រង់ចេញ លេខទាំងអស់ ត្រូវបានពិភាក្សានៅក្នុងឧទាហរណ៍បន្ទាប់។

    Regex ដើម្បីស្រង់ចេញរាល់ការផ្គូផ្គង

    រុញឧទាហរណ៍របស់យើងបន្តិចទៀត ឧបមាថាអ្នកចង់យកលេខទាំងអស់ពីខ្សែអក្សរ មិនមែនតែមួយទេ។

    ដូចដែលអ្នកបានចងចាំ ចំនួននៃការផ្គូផ្គងដែលបានស្រង់ចេញត្រូវបានគ្រប់គ្រងដោយជម្រើស instance_num អាគុយម៉ង់។ លំនាំដើមគឺត្រូវគ្នាទាំងអស់ ដូច្នេះអ្នកគ្រាន់តែលុបចោលប៉ារ៉ាម៉ែត្រនេះ៖

    =RegExpExtract(A2, "\d+")

    រូបមន្តដំណើរការយ៉ាងស្រស់ស្អាតសម្រាប់ក្រឡាតែមួយ ប៉ុន្តែឥរិយាបថខុសគ្នានៅក្នុង Dynamic Array Excel និងកំណែមិនថាមវន្ត។

    Excel 365 និង Excel 2021

    ដោយសារតែការគាំទ្រសម្រាប់អារេថាមវន្ត រូបមន្តធម្មតានឹងហូរចូលទៅក្នុងក្រឡាជាច្រើនដោយស្វ័យប្រវត្តិតាមតម្រូវការ ដើម្បីបង្ហាញលទ្ធផលដែលបានគណនាទាំងអស់។ នៅក្នុងលក្ខខណ្ឌនៃ Excel នេះត្រូវបានគេហៅថា spilled range:

    Excel 2019 និងទាបជាង

    នៅក្នុង Excel ជាមុនថាមវន្ត រូបមន្តខាងលើនឹងត្រលប់មកវិញតែមួយ។ ដើម្បីទទួលបានការផ្គូផ្គងច្រើន អ្នកត្រូវធ្វើឱ្យវាក្លាយជារូបមន្តអារេ។ សម្រាប់ការនេះ ជ្រើសរើសជួរក្រឡាមួយ វាយរូបមន្ត ហើយចុច Ctrl + Shift + Enter ដើម្បីបញ្ចប់វា។

    ការធ្លាក់ចុះនៃវិធីសាស្រ្តនេះគឺបណ្តុំនៃកំហុស #N/A ដែលលេចឡើងនៅក្នុង "កោសិកាបន្ថែម" . គួរឱ្យសោកស្ដាយ គ្មានអ្វីអាចធ្វើបានអំពីវាទេ (ទាំង IFERROR ឬ IFNA មិនអាចជួសជុលវាបានទេ) ។

    ស្រង់ការផ្គូផ្គងទាំងអស់ក្នុងក្រឡាមួយ

    នៅពេលដំណើរការជួរទិន្នន័យ វិធីសាស្ត្រខាងលើច្បាស់ជាមិនដំណើរការទេ។ ក្នុងករណីនេះដំណោះស្រាយដ៏ល្អនឹងត្រឡប់ការប្រកួតទាំងអស់ក្នុងក្រឡាតែមួយ។ ដើម្បីសម្រេចបាន សូមបម្រើលទ្ធផលនៃ RegExpExtract ទៅកាន់មុខងារ TEXTJOIN ហើយបំបែកពួកវាដោយសញ្ញាកំណត់ណាមួយដែលអ្នកចូលចិត្ត ពោលពាក្យក្បៀស និងដកឃ្លា៖

    =TEXTJOIN(", ", TRUE, RegExpExtract(A5, "\d+"))

    ចំណាំ។ ដោយសារតែមុខងារ TEXTJOIN មាននៅក្នុង Excel សម្រាប់ Microsoft 365, Excel 2021 និង Excel 2019 ប៉ុណ្ណោះ រូបមន្តនឹងមិនដំណើរការក្នុងកំណែចាស់នោះទេ។

    Regex ដើម្បីស្រង់អត្ថបទចេញពីខ្សែអក្សរ

    ការដកស្រង់អត្ថបទពី ខ្សែអក្សរអក្សរក្រមលេខគឺជាកិច្ចការដ៏លំបាកមួយនៅក្នុង Excel ។ ជាមួយនឹង regex វាកាន់តែងាយស្រួលដូចចំណិត។ គ្រាន់តែប្រើថ្នាក់អវិជ្ជមានដើម្បីផ្គូផ្គងអ្វីគ្រប់យ៉ាងដែលមិនមែនជាខ្ទង់។

    លំនាំ : [^\d]+

    ដើម្បីទទួលបានខ្សែអក្សររងក្នុងក្រឡានីមួយៗ (ជួរកំពប់) រូបមន្តគឺ៖

    =RegExpExtract(A5, "[^\d]+")

    ដើម្បីបញ្ចេញការផ្គូផ្គងទាំងអស់ទៅក្នុងក្រឡាតែមួយ ដាក់មុខងារ RegExpExtract នៅក្នុង TEXTJOIN ដូចនេះ៖

    =TEXTJOIN("", TRUE, RegExpExtract(A5, "[^\d]+"))

    Regex ទៅ ស្រង់អាសយដ្ឋានអ៊ីមែលចេញពីខ្សែអក្សរ

    ដើម្បីដកអាសយដ្ឋានអ៊ីមែលចេញពីខ្សែអក្សរដែលមានព័ត៌មានផ្សេងៗគ្នាជាច្រើន សូមសរសេរកន្សោមធម្មតាដែលចម្លងរចនាសម្ព័ន្ធអាសយដ្ឋានអ៊ីមែល។

    លំនាំ : [\w\.\-]+@[A-Za-z0-9\.\-]+\.[A-Za-z]{2,24}

    ការបំបែក regex នេះ នេះជាអ្វីដែលយើងទទួលបាន៖

    • [\w\.\-]+ គឺជាឈ្មោះអ្នកប្រើប្រាស់ដែលអាចរួមបញ្ចូលតួអក្សរលេខ 1 ឬច្រើន សញ្ញាចុច សញ្ញាចុច និងសហសញ្ញា។
    • @ និមិត្តសញ្ញា
    • [A-Za-z0-9\.\-]+ គឺជាឈ្មោះដែនដែលមាន៖ អក្សរធំ និងអក្សរតូច ខ្ទង់ សហសញ្ញា និងចំនុច (ក្នុងករណីនៃដែនរង) ។ សញ្ញា​គូស​ក្រោម​មិន​ត្រូវ​បាន​អនុញ្ញាត​នៅ​ទីនេះ​ទេ ដូច្នេះ​សំណុំ​តួអក្សរ 3 ផ្សេង​គ្នា (ដូចជា A-Z a-z និង 0-9) ត្រូវ​បាន​ប្រើ​ជំនួស​ឱ្យ \w ដែល​ត្រូវ​នឹង​អក្សរ ខ្ទង់ ឬ​សញ្ញា​គូស​ក្រោម។
    • \.[A-Za-z ]{2,24} គឺជាដែនកម្រិតកំពូល។ មានចំនុចដែលអមដោយអក្សរធំ និងអក្សរតូច។ ដែនកម្រិតកំពូលភាគច្រើនមានប្រវែង 3 អក្សរ (ឧ. .com .org, .edu ។ល។) ប៉ុន្តែតាមទ្រឹស្តី វាអាចមានពី 2 ទៅ 24 អក្សរ (TLD ដែលបានចុះឈ្មោះវែងបំផុត)។

    សន្មត់ថាខ្សែអក្សរស្ថិតនៅក្នុង A5 និងលំនាំក្នុង A2 រូបមន្តដើម្បីស្រង់អាសយដ្ឋានអ៊ីមែលគឺ៖

    =RegExpExtract(A5, $A$2)

    Regex ដើម្បីស្រង់ដែនចេញពីអ៊ីមែល

    នៅពេលដែលវា មក​ដល់​ការ​ស្រង់​ដែន​អ៊ីមែល គំនិត​ដំបូង​ដែល​គិត​មក​ដល់​គឺ​ការ​ប្រើ​ក្រុម​ចាប់​យក​ដើម្បី​ស្វែងរក​អត្ថបទ​ដែល​ធ្វើតាម​តួអក្សរ @ ភ្លាមៗ។

    លំនាំ : @([A-Za-z0 -9\.\-]+\.[A-Za-z]{2,24})

    បម្រើវាទៅមុខងារ RegExp របស់យើង៖

    =RegExpExtract(A5, "@([A-Za-z0-9\.\-]+\.[A-Za-z]{2,24})")

    ហើយ អ្នកនឹងទទួលបានលទ្ធផលនេះ៖

    ជាមួយនឹងកន្សោមធម្មតាបែបបុរាណ អ្វីទាំងអស់ដែលនៅក្រៅក្រុមចាប់យកមិនត្រូវបានរួមបញ្ចូលនៅក្នុងការស្រង់ចេញទេ។ គ្មាននរណាម្នាក់ដឹងថាហេតុអ្វីបានជា VBA RegEx ធ្វើការខុសគ្នា និងចាប់យក "@" ផងដែរ។ ដើម្បីកម្ចាត់វា អ្នកអាចដកតួអក្សរទីមួយចេញពីលទ្ធផលដោយជំនួសវាដោយខ្សែទទេ។

    =REPLACE(RegExpExtract(A5, "@([a-z\d][a-z\d\-\.]*\.[a-z]{2,})", 1, FALSE), 1, 1, "")

    កន្សោមធម្មតាដើម្បីស្រង់លេខទូរស័ព្ទ

    លេខទូរស័ព្ទ អាចត្រូវបានសរសេរតាមវិធីផ្សេងៗគ្នាជាច្រើន ដែលជាមូលហេតុដែលវាមិនអាចទៅរួចទេក្នុងការមករកដំណោះស្រាយដែលធ្វើការក្រោមទាំងអស់។(\d{4}ពី string

    កន្សោមធម្មតាសម្រាប់ការស្រង់ចេញកាលបរិច្ឆេទអាស្រ័យលើទម្រង់ដែលកាលបរិច្ឆេទបង្ហាញក្នុងខ្សែអក្សរ។ ឧទាហរណ៍៖

    ដើម្បីស្រង់កាលបរិច្ឆេទដូចជា 1/1/21 ឬ 01/01/2021, regex គឺ៖ \d{1,2}\/\d{1,2}\/(\d {4}កាលៈទេសៈ។ ទោះយ៉ាងណាក៏ដោយ អ្នកអាចសរសេរទម្រង់ទាំងអស់ដែលបានប្រើនៅក្នុងសំណុំទិន្នន័យរបស់អ្នក ហើយព្យាយាមផ្គូផ្គងពួកវា។

    សម្រាប់ឧទាហរណ៍នេះ យើងនឹងបង្កើត regex ដែលនឹងស្រង់ចេញលេខទូរស័ព្ទក្នុងទម្រង់ណាមួយទាំងនេះ៖

    (123) 345-6789

    (123) 345 6789

    (123)3456789

    123- 345-6789

    123.345.6789

    123 345 6789

    1233456789

    លំនាំ ៖ \(?\d{3}[-\. \)]*\d{3}[-\. ]?\d{4}\b

    • ផ្នែកទីមួយ \(?\d{3} ផ្គូផ្គងលេខសូន្យ ឬវង់ក្រចកបើកមួយតាមដោយបីខ្ទង់ d{3}។
    • ផ្នែក [-\. \)]* មានន័យថាតួអក្សរណាមួយនៅក្នុងតង្កៀបការ៉េដែលលេចឡើង 0 ដង ឬច្រើនជាងនេះ៖ សហសញ្ញា លេខ ចន្លោះ ឬវង់ក្រចកបិទ។
    • បន្ទាប់ យើងមានបីខ្ទង់ម្តងទៀត d{3} បន្តដោយ សហសញ្ញា រយៈពេល ឬចន្លោះណាមួយ [-\ . ]? លេចឡើង 0 ឬ 1 ដង។
    • បន្ទាប់ពីនោះ មានក្រុមបួនខ្ទង់ \d{4}។
    • ទីបំផុត មានពាក្យមួយឃ្លា \b កំណត់ថាលេខទូរស័ព្ទដែលយើងជា ការស្វែងរកមិនអាចជាផ្នែកមួយនៃលេខធំជាងនោះទេ។

    រូបមន្តពេញលេញមានរូបរាងនេះ៖

    =RegExpExtract(A5, "\(?\d{3}[-\. \)]*\d{3}[-\. ]?\d{4}\b")

    សូមដឹងថា regex ខាងលើអាចត្រឡប់ពីរបី លទ្ធផលវិជ្ជមានមិនពិត ដូចជា 123) 456 7899 ឬ (123 456 7899)។ កំណែខាងក្រោមដោះស្រាយបញ្ហាទាំងនេះ។ ទោះយ៉ាងណាក៏ដោយ វាក្យសម្ព័ន្ធនេះដំណើរការតែនៅក្នុងមុខងារ VBA RegExp ប៉ុណ្ណោះ មិនមែននៅក្នុងកន្សោមធម្មតាបុរាណទេ។

    លំនាំ : (\(\d{3}\)ចេញសម្រាប់ការទាញអត្ថបទរវាងតួអក្សរពីរក៏នឹងដំណើរការសម្រាប់ការស្រង់អត្ថបទរវាងខ្សែអក្សរពីរផងដែរ។

    ឧទាហរណ៍ ដើម្បីទទួលបានអ្វីគ្រប់យ៉ាងរវាង "test 1" និង "test 2" សូមប្រើកន្សោមធម្មតាខាងក្រោម។

    Pattern : test 1.*?)test 2

    រូបមន្តពេញលេញគឺ៖

    =AblebitsRegexExtract(A5, "test 1(.*?)test 2")

    Regex ដើម្បីស្រង់ដែនចេញពី URL

    ទោះបីជាមានកន្សោមធម្មតាក៏ដោយ ការស្រង់ឈ្មោះដែនចេញពី URL មិនមែនជាកិច្ចការតូចតាចទេ។ ធាតុសំខាន់ដែលធ្វើល្បិចគឺក្រុមមិនចាប់យក។ អាស្រ័យលើគោលដៅចុងក្រោយរបស់អ្នក សូមជ្រើសរើស regexes ខាងក្រោមមួយ។

    ដើម្បីទទួលបាន ឈ្មោះពេញ រួមទាំងដែនរង

    លំនាំ : (?: https?\:

    ម៉ៃឃើល ប្រោន ជា​អ្នក​ចូល​ចិត្ត​ផ្នែក​បច្ចេកវិទ្យា​ដែល​មាន​ចំណង់​ចំណូល​ចិត្ត​ក្នុង​ការ​សម្រួល​ដំណើរការ​ស្មុគស្មាញ​ដោយ​ប្រើ​ឧបករណ៍​កម្មវិធី។ ជាមួយនឹងបទពិសោធន៍ជាងមួយទស្សវត្សនៅក្នុងឧស្សាហកម្មបច្ចេកវិទ្យា គាត់បានពង្រឹងជំនាញរបស់គាត់នៅក្នុង Microsoft Excel និង Outlook ក៏ដូចជា Google Sheets និង Docs ។ ប្លក់របស់ម៉ៃឃើលគឺឧទ្ទិសដល់ការចែករំលែកចំណេះដឹង និងជំនាញរបស់គាត់ជាមួយអ្នកដទៃ ដោយផ្តល់នូវគន្លឹះ និងមេរៀនដែលងាយស្រួលធ្វើតាមសម្រាប់ការកែលម្អផលិតភាព និងប្រសិទ្ធភាព។ មិនថាអ្នកជាអ្នកជំនាញ ឬអ្នកចាប់ផ្តើមដំបូងទេ ប្លក់របស់ Michael ផ្តល់នូវការយល់ដឹងដ៏មានតម្លៃ និងដំបូន្មានជាក់ស្តែងសម្រាប់ការទទួលបានអត្ថប្រយោជន៍ច្រើនបំផុតពីឧបករណ៍កម្មវិធីសំខាន់ៗទាំងនេះ។