لحل هذه المشكلة في Excel VBA، يمكنك استخدام الكود التالي:
vbaSub 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، يمكنك استخدام الكود التالي:
vbaSub 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، يمكنك استخدام الكود التالي:
vbaSub 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”) تحتوي على نفس العدد من الصفوف. إذا كان العدد يختلف، يجب تعديل الكود لتناسب البيانات الفعلية.