البرمجة

تحويل بيانات مختلطة إلى أعمدة منفصلة في Excel VBA

لحل هذه المشكلة في Excel VBA، يمكنك استخدام الكود التالي:

vba
Sub ShiftColumns() Dim ws As Worksheet Dim lastRow As Long Dim i As Long ' تحديد ورقة العمل Set ws = ThisWorkbook.Sheets("Sheet1") ' اسم ورقة العمل ' العثور على آخر صف غير فارغ في العمود A lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' تحديد العمود الذي يحتوي على البيانات المختلطة For i = 1 To lastRow If ws.Cells(i, 1).Font.Bold = True Then ' تحديد الصفوف التي تحتوي على العناوين بالخط العريض If InStr(1, ws.Cells(i, 1), "Category") > 0 Then ' تحديد الصفوف التي تحتوي على الكلمة "Category" ws.Cells(i, 2).EntireRow.Insert Shift:=xlDown ' إدراج صف جديد تحت العنوان ws.Cells(i, 2).Value = "cf" ' كتابة العنوان "cf" في العمود الثاني ws.Cells(i + 1, 1).Resize(, 2).Cut Destination:=ws.Cells(i, 2) ' قص البيانات التي تلي العنوان ولصقها في الصف الجديد ws.Cells(i + 1, 1).Resize(, 2).Delete Shift:=xlUp ' حذف الصف الأصلي End If If InStr(1, ws.Cells(i, 1), "Sf") > 0 Then ' تحديد الصفوف التي تحتوي على الكلمة "Sf" ws.Cells(i, 2).EntireRow.Insert Shift:=xlDown ' إدراج صف جديد تحت العنوان ws.Cells(i, 2).Value = "Sf" ' كتابة العنوان "Sf" في العمود الثاني ws.Cells(i + 1, 1).Resize(, 2).Cut Destination:=ws.Cells(i, 2) ' قص البيانات التي تلي العنوان ولصقها في الصف الجديد ws.Cells(i + 1, 1).Resize(, 2).Delete Shift:=xlUp ' حذف الصف الأصلي End If End If Next i ' حذف الصفوف الفارغة في العمود B lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row For i = lastRow To 1 Step -1 If ws.Cells(i, 2).Value = "" Then ws.Cells(i, 2).EntireRow.Delete End If Next i End Sub

يمكنك تعديل اسم ورقة العمل وأسماء الأعمدة عند الحاجة. يتم تحديد الصفوف التي تحتوي على العناوين بالخط العريض والتي تحتوي على الكلمات “Category” و “Sf” باستخدام الشرط If InStr(1, ws.Cells(i, 1), "Category") > 0 و If InStr(1, ws.Cells(i, 1), "Sf") > 0 على التوالي.

يرجى استبدال “Sheet1” بالاسم الصحيح لورقة العمل التي ترغب في تطبيق الكود عليها.

المزيد من المعلومات

لحل هذه المشكلة في Excel VBA، يمكنك استخدام الكود التالي:

vba
Sub ShiftColumns() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim insertRow As Long ' تحديد ورقة العمل Set ws = ThisWorkbook.Sheets("Sheet1") ' اسم ورقة العمل ' العثور على آخر صف غير فارغ في العمود A lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' تحديد العمود الذي يحتوي على البيانات المختلطة For i = 1 To lastRow If ws.Cells(i, 1).Font.Bold = True Then ' تحديد الصفوف التي تحتوي على العناوين بالخط العريض If InStr(1, ws.Cells(i, 1), "Category") > 0 Then ' تحديد الصفوف التي تحتوي على الكلمة "Category" insertRow = ws.Cells(i, 1).End(xlDown).Row ' حساب الصف الذي سيتم إدراج البيانات فيه ws.Cells(insertRow + 1, 2).EntireRow.Insert Shift:=xlDown ' إدراج صف جديد تحت العنوان ws.Cells(insertRow + 1, 2).Value = "cf" ' كتابة العنوان "cf" في العمود الثاني ws.Cells(i + 1, 1).Resize(lastRow - i, 2).Cut Destination:=ws.Cells(insertRow + 1, 2) ' قص البيانات التي تلي العنوان ولصقها في الصف الجديد ws.Cells(i + 1, 1).Resize(lastRow - i, 2).Delete Shift:=xlUp ' حذف الصفوف الأصلية lastRow = lastRow - (lastRow - i) ' تحديث عدد الصفوف المتبقية End If If InStr(1, ws.Cells(i, 1), "Sf") > 0 Then ' تحديد الصفوف التي تحتوي على الكلمة "Sf" insertRow = ws.Cells(i, 1).End(xlDown).Row ' حساب الصف الذي سيتم إدراج البيانات فيه ws.Cells(insertRow + 1, 2).EntireRow.Insert Shift:=xlDown ' إدراج صف جديد تحت العنوان ws.Cells(insertRow + 1, 2).Value = "Sf" ' كتابة العنوان "Sf" في العمود الثاني ws.Cells(i + 1, 1).Resize(lastRow - i, 2).Cut Destination:=ws.Cells(insertRow + 1, 2) ' قص البيانات التي تلي العنوان ولصقها في الصف الجديد ws.Cells(i + 1, 1).Resize(lastRow - i, 2).Delete Shift:=xlUp ' حذف الصفوف الأصلية lastRow = lastRow - (lastRow - i) ' تحديث عدد الصفوف المتبقية End If End If Next i ' حذف الصفوف الفارغة في العمود B lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row For i = lastRow To 1 Step -1 If ws.Cells(i, 2).Value = "" Then ws.Cells(i, 2).EntireRow.Delete End If Next i End Sub

هذا الكود يعتمد على افتراض أن الأعمدة المختلطة (مثل “cf” و “Sf”) تحتوي على نفس العدد من الصفوف. إذا كان العدد يختلف، يجب تعديل الكود لتناسب البيانات الفعلية.

لحل هذه المشكلة في Excel VBA، يمكنك استخدام الكود التالي:

vba
Sub ShiftColumns() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim insertRow As Long ' تحديد ورقة العمل Set ws = ThisWorkbook.Sheets("Sheet1") ' اسم ورقة العمل ' العثور على آخر صف غير فارغ في العمود A lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' تحديد العمود الذي يحتوي على البيانات المختلطة For i = 1 To lastRow If ws.Cells(i, 1).Font.Bold = True Then ' تحديد الصفوف التي تحتوي على العناوين بالخط العريض If InStr(1, ws.Cells(i, 1), "Category") > 0 Then ' تحديد الصفوف التي تحتوي على الكلمة "Category" insertRow = ws.Cells(i, 1).End(xlDown).Row ' حساب الصف الذي سيتم إدراج البيانات فيه ws.Cells(insertRow + 1, 2).EntireRow.Insert Shift:=xlDown ' إدراج صف جديد تحت العنوان ws.Cells(insertRow + 1, 2).Value = "cf" ' كتابة العنوان "cf" في العمود الثاني ws.Cells(i + 1, 1).Resize(lastRow - i, 2).Cut Destination:=ws.Cells(insertRow + 1, 2) ' قص البيانات التي تلي العنوان ولصقها في الصف الجديد ws.Cells(i + 1, 1).Resize(lastRow - i, 2).Delete Shift:=xlUp ' حذف الصفوف الأصلية lastRow = lastRow - (lastRow - i) ' تحديث عدد الصفوف المتبقية End If If InStr(1, ws.Cells(i, 1), "Sf") > 0 Then ' تحديد الصفوف التي تحتوي على الكلمة "Sf" insertRow = ws.Cells(i, 1).End(xlDown).Row ' حساب الصف الذي سيتم إدراج البيانات فيه ws.Cells(insertRow + 1, 2).EntireRow.Insert Shift:=xlDown ' إدراج صف جديد تحت العنوان ws.Cells(insertRow + 1, 2).Value = "Sf" ' كتابة العنوان "Sf" في العمود الثاني ws.Cells(i + 1, 1).Resize(lastRow - i, 2).Cut Destination:=ws.Cells(insertRow + 1, 2) ' قص البيانات التي تلي العنوان ولصقها في الصف الجديد ws.Cells(i + 1, 1).Resize(lastRow - i, 2).Delete Shift:=xlUp ' حذف الصفوف الأصلية lastRow = lastRow - (lastRow - i) ' تحديث عدد الصفوف المتبقية End If End If Next i ' حذف الصفوف الفارغة في العمود B lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row For i = lastRow To 1 Step -1 If ws.Cells(i, 2).Value = "" Then ws.Cells(i, 2).EntireRow.Delete End If Next i End Sub

هذا الكود يعتمد على افتراض أن الأعمدة المختلطة (مثل “cf” و “Sf”) تحتوي على نفس العدد من الصفوف. إذا كان العدد يختلف، يجب تعديل الكود لتناسب البيانات الفعلية.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر