سؤال

لدي سؤال حول طريقة لكسر شيء منفصل. أحصل على جدول بيانات Excel هذا يوفر لي البيانات التي أحتاج إلى القيام بتقرير واحد. لها بسيطة جدا ومباشرة إلى الأمام، ومع ذلك، هناك جزء معين من ذلك يعطيني بعض الحزن.

في جدول بيانات Excel، يوجد عمود يسرد "الأطراف المعنية" في عمود واحد. وعادة ما يبلغ حوالي 12 أسماء أشخاص مفصولة بفواصل، ولكن لديها أيضا Orgid بين قوسين وراء ذلك:

جو سميث (Div32)، جون دو (DIV12)، روجر أندروز (Div14، Div67، DIV01)، إلخ

وأحتاج إلى كسر هذه الأعمدة الفردية حتى ستكون الحقول الفردية بمجرد استيرادها إلى الوصول إليها. أنا أعرف كيفية "النص إلى الأعمدة" في Excel، ولكن هذا يحصل على ثمل عندما jon doe (Div13، Div54، إلخ)، لديه أكثر من قسم واحد.

لست متأكدا من كيفية القيام بذلك في الوصول ولكن أحب أن أعرف.

حصل أي شخص إما على صيغة Excel أو طريقة الوصول لهذا من فضلك؟

هل كانت مفيدة؟

المحلول

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

أنت ذاهب إلى إنهاء وجود ثلاث طاولات لتمثيل هذا الموقف

  1. theparty (شخص)
  2. المنظمة
  3. thepartyorg.

theparty مع وجود عمود معرف

سيكون theorganisation هو عمود الهوية الخاصة به

سيكون thepartyorder هو عمود الهوية الخاص به، واحد بالنسبة ل theparty، وواحد ل theorganisation

كلما أردت أن تمثل حفلة كأحد أفراد وتنظيم، عليك التأكد من أن الحزب موجود / تم إنشاؤه؛ توجد / يتم إنشاء المنظمة، والجهاز الدائري إنشاء إدخال في جدول thepartyorg والنقاط في كليهما.

نظرا لأن معلومات الاتصال هذه تخزن للتو كنص ضمن عمود واحد، فمن المحتمل أن تقرأ كل شيء أسهل أولا في جدول التدريج ثم تحليل هذا العمود في VBA

نصائح أخرى

إليك حل:

لقد كتبت دالة تحل محل جميع تكرارات سلسلة Strfind بواسطة StrRaclace، ولكن فقط إذا حدثت Strfind داخل الأقواس. حتى تتمكن من استبدال جميع الأحرف "،" من قبل شيء آخر (على سبيل المثال "*")، ثم قم بتشغيل نص Excel إلى أعمدة، ثم استبدل "*" ب ""، "مرة أخرى.

Function replace_paren(strSource As String, strFind As String, strReplace As String) As String
    ' Within strString, replaces any occurrence of strFind with strReplace *IF* strFind occurs within parentheses '

    Dim intOpenParenIndex As Integer
    Dim intCloseParenIndex As Integer

    Do
        intOpenParenIndex = InStr(intCloseParenIndex + 1, strSource, "(")
        intCloseParenIndex = InStr(intOpenParenIndex + 1, strSource, ")")
        If intOpenParenIndex = 0 Then
            Exit Do
        End If

        Mid(strSource, intOpenParenIndex, intCloseParenIndex - intOpenParenIndex) = Replace(Mid(strSource, intOpenParenIndex, intCloseParenIndex - intOpenParenIndex), strFind, strReplace)
    Loop

    replace_paren = strSource

End Function

وبالتالي فإن الخطوات هي:

1) انسخ هذا الماكرو إلى وحدة نمطية في مصنف Excel الخاص بك

2) دعنا نقول سلسلةك في العمود A. في العمود B، قم بإعداد الوظيفة لاستبدال الفواصل مثل هذا

= استبدال_paren (A1، "،"، "*")

3) ملء الصيغة أسفل العمود

4) نسخ ولصق العمود كقيم

5) استخدم نص Excel إلى أعمدة لتحليل العمود باستخدام ""، "كمسؤول

6) استخدم Replace_Paren مرة أخرى لاستبدال جميع تكرارات "*" بواسطة "،"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top