MS Access 03 - تطبيع البيانات من جدول بيانات Excel
-
18-09-2019 - |
سؤال
لدي سؤال حول طريقة لكسر شيء منفصل. أحصل على جدول بيانات Excel هذا يوفر لي البيانات التي أحتاج إلى القيام بتقرير واحد. لها بسيطة جدا ومباشرة إلى الأمام، ومع ذلك، هناك جزء معين من ذلك يعطيني بعض الحزن.
في جدول بيانات Excel، يوجد عمود يسرد "الأطراف المعنية" في عمود واحد. وعادة ما يبلغ حوالي 12 أسماء أشخاص مفصولة بفواصل، ولكن لديها أيضا Orgid بين قوسين وراء ذلك:
جو سميث (Div32)، جون دو (DIV12)، روجر أندروز (Div14، Div67، DIV01)، إلخ
وأحتاج إلى كسر هذه الأعمدة الفردية حتى ستكون الحقول الفردية بمجرد استيرادها إلى الوصول إليها. أنا أعرف كيفية "النص إلى الأعمدة" في Excel، ولكن هذا يحصل على ثمل عندما jon doe
(Div13، Div54، إلخ)، لديه أكثر من قسم واحد.
لست متأكدا من كيفية القيام بذلك في الوصول ولكن أحب أن أعرف.
حصل أي شخص إما على صيغة Excel أو طريقة الوصول لهذا من فضلك؟
المحلول
أفترض أنك تقوم باستيراد هذا في قاعدة البيانات الخاصة بك. إذا لم يكن الأمر كذلك، فمن المحتمل أن تكون أسهل إذا قمت بذلك، حتى لو كان مؤقتا؛ وإعادة بعد كل مرة عليك تشغيل التقرير
أنت ذاهب إلى إنهاء وجود ثلاث طاولات لتمثيل هذا الموقف
- theparty (شخص)
- المنظمة
- 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 مرة أخرى لاستبدال جميع تكرارات "*" بواسطة "،"