មាតិកា
ខ្ញុំបានសរសេររួចហើយអំពីរបៀបដែលអ្នកអាចបិទភ្ជាប់អត្ថបទពីក្រឡាជាច្រើនទៅជាតែមួយ ហើយញែកខ្សែអក្សរវែងទៅជាសមាសធាតុ។ ឥឡូវនេះ សូមក្រឡេកមើលការបិទ ប៉ុន្តែកិច្ចការស្មុគ្រស្មាញជាងនេះបន្តិច - របៀបបិទភ្ជាប់អត្ថបទពីក្រឡាជាច្រើន នៅពេលដែលលក្ខខណ្ឌជាក់លាក់ណាមួយត្រូវបានបំពេញ។
ចូរនិយាយថា យើងមានមូលដ្ឋានទិន្នន័យរបស់អតិថិជន ដែលឈ្មោះក្រុមហ៊ុនមួយអាចឆ្លើយតបទៅនឹងអ៊ីមែលផ្សេងៗគ្នាជាច្រើនរបស់បុគ្គលិករបស់ខ្លួន។ ភារកិច្ចរបស់យើងគឺប្រមូលអាសយដ្ឋានទាំងអស់តាមឈ្មោះក្រុមហ៊ុន ហើយភ្ជាប់ពួកវា (បំបែកដោយសញ្ញាក្បៀស ឬសញ្ញាក្បៀស) ដើម្បីធ្វើឧទាហរណ៍ បញ្ជីសំបុត្ររួមសម្រាប់អតិថិជន ពោលគឺទទួលបានលទ្ធផលអ្វីមួយដូចជា៖
ម៉្យាងទៀតយើងត្រូវការឧបករណ៍ដែលនឹងភ្ជាប់ (ភ្ជាប់) អត្ថបទយោងទៅតាមលក្ខខណ្ឌ - analogue នៃមុខងារ SUMMESLI (SUMIF)ប៉ុន្តែសម្រាប់អត្ថបទ។
វិធីសាស្រ្ត 0. រូបមន្ត
មិនឆើតឆាយណាស់ប៉ុន្តែវិធីងាយស្រួលបំផុត។ អ្នកអាចសរសេររូបមន្តសាមញ្ញដែលនឹងពិនិត្យមើលថាតើក្រុមហ៊ុននៅជួរបន្ទាប់ខុសពីលេខមុនឬអត់។ ប្រសិនបើវាមិនខុសគ្នាទេ សូមបិទអាសយដ្ឋានបន្ទាប់ដែលបំបែកដោយសញ្ញាក្បៀស។ ប្រសិនបើវាខុសគ្នា នោះយើង "កំណត់ឡើងវិញ" ការប្រមូលផ្តុំដោយចាប់ផ្តើមម្តងទៀត៖
គុណវិបត្តិនៃវិធីសាស្រ្តនេះគឺជាក់ស្តែង: ពីកោសិកាទាំងអស់នៃជួរឈរបន្ថែមដែលទទួលបានយើងត្រូវការតែចុងក្រោយសម្រាប់ក្រុមហ៊ុននីមួយៗ (ពណ៌លឿង) ។ ប្រសិនបើបញ្ជីមានទំហំធំ នោះដើម្បីជ្រើសរើសពួកវាយ៉ាងរហ័ស អ្នកនឹងត្រូវបន្ថែមជួរឈរមួយទៀតដោយប្រើមុខងារ DLSTR (អិន)ពិនិត្យប្រវែងខ្សែដែលប្រមូលបាន៖
ឥឡូវនេះ អ្នកអាចត្រងចេញ ហើយចម្លងអាសយដ្ឋានចាំបាច់សម្រាប់ប្រើប្រាស់បន្ថែមទៀត។
វិធីសាស្រ្ត 1. Macrofunction នៃ gluing ដោយលក្ខខណ្ឌមួយ។
ប្រសិនបើបញ្ជីដើមមិនត្រូវបានតម្រៀបតាមក្រុមហ៊ុនទេ នោះរូបមន្តសាមញ្ញខាងលើមិនដំណើរការទេ ប៉ុន្តែអ្នកអាចទទួលបានយ៉ាងងាយស្រួលជាមួយនឹងមុខងារផ្ទាល់ខ្លួនតូចមួយនៅក្នុង VBA ។ បើកកម្មវិធីនិពន្ធ Visual Basic ដោយចុចផ្លូវកាត់ក្តារចុច ជំនួស (Alt) + F11 ឬដោយប្រើប៊ូតុង Visual Basic ផ្ទាំង អ្នកអភិវឌ្ឍ (អ្នកអភិវឌ្ឍន៍). នៅក្នុងបង្អួចដែលបើក សូមបញ្ចូលម៉ូឌុលទទេថ្មីតាមរយៈម៉ឺនុយ បញ្ចូល - ម៉ូឌុល ហើយចម្លងអត្ថបទនៃមុខងាររបស់យើងនៅទីនោះ៖
អនុគមន៍ MergeIf(TextRange As Range, SearchRange As Range, Condition As String) Dim Delimeter As String, i As Long Delimeter = ", " gluings មិនស្មើគ្នា - យើងចេញដោយមានកំហុសប្រសិនបើ SearchRange.Count <> TextRange.Count បន្ទាប់មក MergeIf = CVErr(xlErrRef) Exit Function End ប្រសិនបើ 'ឆ្លងកាត់ក្រឡាទាំងអស់ ពិនិត្យលក្ខខណ្ឌ ហើយប្រមូលអត្ថបទក្នុងអថេរ OutText For i = 1 ទៅ SearchRange ។ Cells.Count ប្រសិនបើ SearchRange.Cells(i) Like Condition Then OutText = OutText & TextRange.Cells(i) & Delimeter Next i 'បង្ហាញលទ្ធផលដោយគ្មានកំណត់ព្រំដែនចុងក្រោយ MergeIf = Left(OutText, Len(OutText) - Len(Delimeter)) End មុខងារ
ប្រសិនបើអ្នកឥឡូវនេះត្រលប់ទៅ Microsoft Excel វិញបន្ទាប់មកនៅក្នុងបញ្ជីមុខងារ (ប៊ូតុង fx នៅក្នុងរបាររូបមន្ត ឬផ្ទាំង រូបមន្ត - បញ្ចូលមុខងារ) វានឹងអាចរកឃើញមុខងាររបស់យើង។ បញ្ចូលគ្នាប្រសិនបើ នៅក្នុងប្រភេទ អ្នកប្រើប្រាស់កំណត់ (អ្នកប្រើប្រាស់កំណត់). អាគុយម៉ង់សម្រាប់មុខងារមានដូចខាងក្រោម:
វិធីសាស្រ្ត 2. ភ្ជាប់អត្ថបទដោយលក្ខខណ្ឌមិនច្បាស់លាស់
ប្រសិនបើយើងជំនួសតួអក្សរទីមួយនៅក្នុងជួរទី 13 នៃម៉ាក្រូរបស់យើង។ = ទៅប្រតិបត្តិករការប្រកួតប្រហាក់ប្រហែល ដូចបន្ទាប់មកវានឹងអាចអនុវត្តការស្អិតជាប់ដោយការផ្គូផ្គងទិន្នន័យដំបូងដែលមិនច្បាស់លាស់ជាមួយនឹងលក្ខណៈវិនិច្ឆ័យនៃការជ្រើសរើស។ ឧទាហរណ៍ ប្រសិនបើឈ្មោះក្រុមហ៊ុនអាចត្រូវបានសរសេរជាវ៉ារ្យ៉ង់ផ្សេងគ្នា នោះយើងអាចពិនិត្យ និងប្រមូលពួកវាទាំងអស់ដោយប្រើមុខងារមួយ៖
អក្សរជំនួសស្តង់ដារត្រូវបានគាំទ្រ៖
- សញ្ញាផ្កាយ (*) - បង្ហាញពីចំនួនតួអក្សរណាមួយ (រួមទាំងអវត្តមានរបស់ពួកគេ)
- សញ្ញាសួរ (?) - តំណាងឱ្យតួអក្សរតែមួយ
- សញ្ញាផោន (#) - តំណាងឱ្យខ្ទង់ណាមួយ (0-9)
តាមលំនាំដើម ប្រតិបត្តិករ Like គឺប្រកាន់អក្សរតូចធំ ពោលគឺយល់ឧទាហរណ៍ "Orion" និង "orion" ជាក្រុមហ៊ុនផ្សេងគ្នា។ ដើម្បីមិនអើពើករណី អ្នកអាចបន្ថែមបន្ទាត់នៅដើមដំបូងនៃម៉ូឌុលនៅក្នុងកម្មវិធីនិពន្ធ Visual Basic ជម្រើសប្រៀបធៀបអត្ថបទដែលនឹងប្តូរ Like ទៅជា case insensitive។
នៅក្នុងវិធីនេះ អ្នកអាចបង្កើតរបាំងស្មុគស្មាញសម្រាប់ពិនិត្យលក្ខខណ្ឌ ឧទាហរណ៍៖
- ?1##??777RUS - ការជ្រើសរើសស្លាកលេខទាំងអស់នៃតំបន់ 777 ដោយចាប់ផ្តើមពីលេខ 1
- LLC * - ក្រុមហ៊ុនទាំងអស់ដែលមានឈ្មោះចាប់ផ្តើមដោយ LLC
- ##7## - ផលិតផលទាំងអស់ដែលមានលេខកូដឌីជីថលប្រាំខ្ទង់ ដែលខ្ទង់ទីបីគឺ 7
- ???? - ឈ្មោះទាំងអស់នៃអក្សរប្រាំ។ល។
វិធីសាស្រ្ត 3. មុខងារម៉ាក្រូសម្រាប់បិទភ្ជាប់អត្ថបទក្រោមលក្ខខណ្ឌពីរ
នៅក្នុងការងារអាចមានបញ្ហានៅពេលដែលអ្នកត្រូវការភ្ជាប់អត្ថបទច្រើនជាងលក្ខខណ្ឌមួយ។ ជាឧទាហរណ៍ ចូរយើងស្រមៃថានៅក្នុងតារាងមុនរបស់យើង ជួរឈរមួយបន្ថែមទៀតជាមួយនឹងទីក្រុងត្រូវបានបន្ថែម ហើយការបិទភ្ជាប់គួរតែត្រូវបានអនុវត្តមិនត្រឹមតែសម្រាប់ក្រុមហ៊ុនដែលបានផ្តល់ឱ្យប៉ុណ្ណោះទេ ប៉ុន្តែក៏សម្រាប់ទីក្រុងដែលបានផ្តល់ឱ្យផងដែរ។ ក្នុងករណីនេះ មុខងាររបស់យើងនឹងត្រូវធ្វើទំនើបកម្មបន្តិច ដោយបន្ថែមការត្រួតពិនិត្យជួរផ្សេងទៀតទៅវា៖
អនុគមន៍ MergeIfs(TextRange As Range, SearchRange1 As Range, Condition1 As String, SearchRange2 As Range, Condition2 As String) Dim Delimeter As String, i As Long Delimeter = ", " 'តួអក្សរកំណត់ព្រំដែន (អាចជំនួសដោយដកឃ្លា ឬ ល។) e.) 'ប្រសិនបើ validation and gluing ranges are not equal to each other, exit with an error If SearchRange1.Count <> TextRange.Count ឬ SearchRange2.Count <> TextRange.Count បន្ទាប់មក MergeIfs = CVERr(xlErrRef) ចេញអនុគមន៍ បញ្ចប់ ប្រសិនបើ 'ឆ្លងកាត់ក្រឡាទាំងអស់ ពិនិត្យលក្ខខណ្ឌទាំងអស់ ហើយប្រមូលអត្ថបទទៅក្នុងអថេរ OutText For i = 1 To SearchRange1.Cells.Count ប្រសិនបើ SearchRange1.Cells(i) = Condition1 And SearchRange2.Cells(i) = Condition2 Then OutText = OutText & TextRange.Cells(i) & Delimeter End ប្រសិនបើ Next i 'បង្ហាញលទ្ធផលដោយគ្មានកំណត់ព្រំដែនចុងក្រោយ MergeIfs = Left(OutText, Len(OutText) - Len(Delimeter)) End Function
វានឹងត្រូវបានអនុវត្តក្នុងវិធីដូចគ្នានេះ - មានតែអំណះអំណាងប៉ុណ្ណោះដែលត្រូវបញ្ជាក់បន្ថែមទៀត៖
វិធីសាស្រ្ត 4. ការដាក់ជាក្រុម និងស្អិតជាប់ក្នុង Power Query
អ្នកអាចដោះស្រាយបញ្ហាដោយមិនចាំបាច់សរសេរកម្មវិធីនៅក្នុង VBA ប្រសិនបើអ្នកប្រើកម្មវិធីបន្ថែម Power Query ដោយឥតគិតថ្លៃ។ សម្រាប់ Excel 2010-2013 វាអាចត្រូវបានទាញយកនៅទីនេះ ហើយនៅក្នុង Excel 2016 វាត្រូវបានសាងសង់រួចហើយតាមលំនាំដើម។ លំដាប់នៃសកម្មភាពនឹងមានដូចខាងក្រោម៖
Power Query មិនដឹងពីរបៀបធ្វើការជាមួយតុធម្មតាទេ ដូច្នេះជំហានដំបូងគឺត្រូវបង្វែរតារាងរបស់យើងទៅជា "ឆ្លាត"។ ដើម្បីធ្វើដូចនេះជ្រើសវាហើយចុចបន្សំ បញ្ជា (Ctrl)+T ឬជ្រើសរើសពីផ្ទាំង ទំព័រដើម - ធ្វើទ្រង់ទ្រាយជាតារាង (ទំព័រដើម — ធ្វើទ្រង់ទ្រាយជាតារាង). នៅលើផ្ទាំងដែលបន្ទាប់មកលេចឡើង អ្នកសាងសង់។ (រចនា) អ្នកអាចកំណត់ឈ្មោះតារាង (ខ្ញុំបានចាកចេញពីស្តង់ដារ តារាង 1):
ឥឡូវនេះ ចូរយើងផ្ទុកតារាងរបស់យើងទៅក្នុងកម្មវិធីបន្ថែម Power Query ។ ដើម្បីធ្វើដូចនេះនៅលើផ្ទាំង ទិន្នន័យ (ប្រសិនបើអ្នកមាន Excel 2016) ឬនៅលើផ្ទាំង Power Query (ប្រសិនបើអ្នកមាន Excel 2010-2013) ចុច ពីតុ (ទិន្នន័យ - ពីតារាង):
នៅក្នុងបង្អួចកម្មវិធីនិពន្ធសំណួរដែលបើក សូមជ្រើសរើសជួរឈរដោយចុចលើបឋមកថា ក្រុមហ៊ុន ហើយចុចប៊ូតុងខាងលើ ជាក្រុម (ក្រុមដោយ). បញ្ចូលឈ្មោះជួរឈរថ្មី និងប្រភេទប្រតិបត្តិការក្នុងការដាក់ជាក្រុម – បន្ទាត់ទាំងអស់។ (ជួរទាំងអស់):
ចុចយល់ព្រមហើយយើងទទួលបានតារាងតូចមួយនៃតម្លៃដាក់ជាក្រុមសម្រាប់ក្រុមហ៊ុននីមួយៗ។ មាតិកានៃតារាងអាចមើលឃើញយ៉ាងច្បាស់ប្រសិនបើអ្នកចុចខាងឆ្វេងលើផ្ទៃខាងក្រោយពណ៌សនៃក្រឡា (មិនមែននៅលើអត្ថបទទេ!) នៅក្នុងជួរឈរលទ្ធផល៖
ឥឡូវសូមបន្ថែមជួរឈរមួយទៀត ដែលដោយប្រើមុខងារ យើងបិទមាតិកានៃជួរឈរអាសយដ្ឋានក្នុងតារាងតូចនីមួយៗ ដោយបំបែកដោយសញ្ញាក្បៀស។ ដើម្បីធ្វើដូចនេះនៅលើផ្ទាំង បន្ថែមជួរឈរ យើងចុច ជួរឈរផ្ទាល់ខ្លួន (បន្ថែមជួរឈរ - ជួរឈរផ្ទាល់ខ្លួន) ហើយនៅក្នុងបង្អួចដែលបង្ហាញ សូមបញ្ចូលឈ្មោះនៃជួរឈរថ្មី និងរូបមន្តភ្ជាប់ជាភាសា M ដែលបានបង្កើតឡើងនៅក្នុង Power Query៖
ចំណាំថាមុខងារ M ទាំងអស់គឺប្រកាន់អក្សរតូចធំ (មិនដូច Excel) ។ បន្ទាប់ពីចុចលើ OK យើងទទួលបានជួរឈរថ្មីដែលមានអាសយដ្ឋានស្អិតជាប់៖
វានៅសល់ដើម្បីដកជួរឈរដែលមិនចាំបាច់រួចហើយ អាសយដ្ឋានតារាង (ចុចខាងស្តាំលើចំណងជើង) លុបជួរឈរ) ហើយបញ្ចូលលទ្ធផលទៅក្នុងសន្លឹកដោយចុចលើផ្ទាំង ទំព័រដើម - បិទ និងទាញយក (ទំព័រដើម - បិទ និងផ្ទុក):
nuance សំខាន់៖ មិនដូចវិធីសាស្ត្រមុន (មុខងារ) តារាងពី Power Query មិនត្រូវបានអាប់ដេតដោយស្វ័យប្រវត្តិទេ។ ប្រសិនបើនៅពេលអនាគតនឹងមានការផ្លាស់ប្តូរណាមួយនៅក្នុងទិន្នន័យប្រភព នោះអ្នកនឹងត្រូវចុចកណ្ដុរខាងស្ដាំនៅកន្លែងណាមួយក្នុងតារាងលទ្ធផល ហើយជ្រើសរើសពាក្យបញ្ជា ធ្វើបច្ចុប្បន្នភាព និងរក្សាទុក (ធ្វើឱ្យស្រស់).
- របៀបបំបែកខ្សែអក្សរវែងទៅជាផ្នែក
- វិធីជាច្រើនដើម្បីបិទភ្ជាប់អត្ថបទពីក្រឡាផ្សេងៗទៅជាមួយ។
- ការប្រើសញ្ញាបញ្ជា Like ដើម្បីសាកល្បងអត្ថបទប្រឆាំងនឹងរបាំងមួយ។