محاكاة وظيفة تقسيم السلسلة في صيغة Excel




فصل محتويات خلية (6)

أحاول تقسيم سلسلة في صيغة excel ، مثل ما يمكنني القيام به في العديد من لغات البرمجة ، على سبيل المثال

string words = "some text".split(' ');

المشكلة هي أنه لا يمكنني التأكد من وجود أكثر من كلمة واحدة في الخلية. إذا حاولت استخدام الدالتين FIND() أو SEARCH() ، #VALUE إذا لم تكن هناك مساحة. هل هناك طريقة سهلة لتقسيم السلسلة بحيث ترجع الكلمات الفردية (أو حتى أفضل ، بحيث تقوم بإرجاع الكلمة الأولى أو كل الكلمات الأخرى


فيما يلي إرجاع الكلمة الأولى في الخلية A1 عند فصلها بمسافة (تعمل في Excel 2003):

=LEFT(A1, SEARCH(" ",A1,1))

صيغة لإرجاع الكلمة الأولى أو كل الكلمات الأخرى .

=IF(ISERROR(FIND(" ",TRIM(A2),1)),TRIM(A2),MID(TRIM(A2),FIND(" ",TRIM(A2),1),LEN(A2)))

الأمثلة والنتائج

Text                  Description                      Results

                      Blank 
                      Space 
some                  Text no space                some
some text             Text with space                  text
 some                 Text with leading space          some
some                  Text with trailing space         some
some text some text   Text with multiple spaces        text some text

تعليقات على الفورمولا:

  • يتم استخدام وظيفة TRIM لإزالة جميع المسافات البادئة واللاحقة. كما تتم إزالة التباعد المضاعف داخل النص.
  • ثم تعثر الدالة FIND على أول مساحة
  • إذا لم تكن هناك مساحة ، فسيتم إرجاع النص المقتطع
  • خلاف ذلك يتم استخدام الدالة MID لإرجاع أي نص بعد المسافة الأولى

تميل هذه الأشياء إلى أن تكون أبسط إذا قمت بكتابتها خلية في كل مرة ، وكسر الصيغ المطولة إلى أصغر ، حيث يمكنك التحقق منها على طول الطريق. يمكنك بعد ذلك إخفاء العمليات الحسابية الوسيطة ، أو لفها كلها في صيغة واحدة.

على سبيل المثال ، أخذ صيغة جيمس:

=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)

وهو صالح فقط في Excel 2007 أو ما بعده.

تقسيمه على النحو التالي:

B3: =FIND(" ", A3)
C3: =IF(ISERROR(B3),A3,LEFT(A3,B3-1))

إنها أسهل قليلاً للعمل عليها ، قطعة في وقت واحد. بمجرد الانتهاء ، يمكنك تحويلها إلى

=IF(ISERROR(FIND(" ", A3)),A3,LEFT(A3,FIND(" ", A3)-1))

إذا كنت ترغب في ذلك.


قم بتمييز الخلية ، واستخدم Dat => Text to Columns و DELIMITER is space. ستظهر النتيجة في أكبر عدد من الأعمدة عندما يجد التقسيم المساحة.


=IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)

سيتحقق هذا أولاً ما إذا كانت الخلية تحتوي على مسافة ، إذا كانت ستعرض القيمة الأولى من المساحة ، وإلا فسوف تعرض قيمة الخلية.

تصحيح

فقط للإضافة إلى الصيغة المذكورة أعلاه ، كما هو الحال إذا لم تكن هناك قيمة في الخلية ، فإنها ستعود 0. إذا كنت تبحث عن عرض رسالة أو شيء لإخبار المستخدم أنه فارغ ، فيمكنك استخدام ما يلي:

=IF(IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3)=0, "Empty", IFERROR(LEFT(A3, FIND(" ", A3, 1)), A3))

إذا كنت بحاجة إلى تخصيص الأعمدة فقط عندما تكون الإجابة هي وظيفة "النص إلى الأعمدة" في MS Excel.

انظر مقالة مساعدة MS هنا: http://support.microsoft.com/kb/214261

HTH





excel-formula