التفوق - إنشاء ماكرو للبحث والنسخ

القضية

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

مثال:

 27-سبتمبر 27-سبتمبر 27-سبتمبر 28-سبتمبر 28-سبتمبر 01-أكتوبر 01-أكتوبر 

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

 Sub SearchForString () باهتة LSearchRow باسم عدد صحيح Dim LCopyToRow كعدد صحيح عند الخطأ GoTo Err_Execute 'بدء البحث في الصف 6 LSearchRow = 6' بدء نسخ البيانات إلى الصف 110 في Sheet2 (متغير عداد الصف) LCopyToRow = 110 While Len (Range ("A" & CStr (LSearchRow)). القيمة)> 0 'إذا كانت القيمة في العمود A = "27 سبتمبر" ، انسخ الصف بأكمله إلى الورقة 2 إذا كان النطاق ("A" & CStr (LSearchRow)). القيمة = "27 = سبتمبر" ثم "حدد صفًا في الورقة 1 لنسخ الصفوف (CStr (LSearchRow) &": "& CStr (LSearchRow)). حدد Selection.Copy" لصق الصف في Sheet2 في صفوف الصف التالي ("Sheet2"). حدد الصفوف (CStr (LCopyToRow) & ":" & CStr (LCopyToRow)). حدد ActiveSheet.Paste "تحريك العداد إلى الصف التالي LCopyToRow = LCopyToRow + 1" ارجع إلى Sheet1 لمتابعة البحث في الأوراق ("Sheet1"). حدد End If LSearchRow + LendRow + 1 Wend "الموضع على الخلية A109 Application.CutCopyMode = نطاق خطأ (" A109 "). حدد MsgBox" تم نسخ جميع البيانات المطابقة. " إنهاء Sub Err_Execute: MsgBox "حدث خطأ." نهاية الفرعية 

حل

أعطي اثنين من وحدات الماكرو "اختبار" و "تراجع"

نموذج ورقة مثل هذا (sheet1) - ليس من الضروري الفرز

تاريخ البيانات 1 البيانات 2

3/1/2010 37 1

3/2/2010 65 96

3/3/2010 48 46

3/2/2010 78 54

3/5/2010 3 38

3/2/2010 83 58

3/3/2010 45 78

حاول الماكرو "اختبار" وانظر sheet2

إذا كنت تريد إعادة الاختبار

1. تشغيل "التراجع"

ثم

2. سلسلة "اختبار"

وحدات الماكرو هي

 اختبار فرعي () Dim r As Range ، r1 As Range ، r2 As Range Dim c2 As Range ، cfind As Range أوراق العمل ("sheet1"). قم بتنشيط Set r = Range (Range ("A1") ، Range ("A1") .End (xlDown)) تعيين r1 = Range ("a1"). End (xlDown) .Offset (5، 0) r.AdvancedFilter action: = xlFilterCopy، copytorange: = r1، unique: = True Set r2 = Range (r1) .Offset (1، 0)، r1.End (xlDown)) لكل c2 في r2 إذا كان WorksheetFunction.CountIf (r، c2)> 1 ثم مع النطاق ("A1"). الحقل CurrentRegion .AutoFilter: = 1 ، Criteria1: = c2.Value .Cells.SpecialCells (xlCellTypeVisible). أوراق عمل النسخ ("sheet2"). الخلايا (Rows.Count ، "A"). End (xlUp) .Offset (1، 0) .PasteSpecial End With End If ActiveSheet. AutoFilterMode = False Next c2 أوراق العمل ("sheet2"). قم بتنشيط Do Set cfind = ActiveSheet.Cells.Find (what: = "date" ، lookat: = xlWhole ، بعد: = Range ("A2")) إذا لم يكن cfind Nothing Then قم بإنهاء cfind.EntireRow.Delete Loop أوراق العمل ("sheet1"). Range ("A1"). أوراق عمل EntireRow.Copy ("sheet2"). Range ("A1"). PasteSpecial Application.CutCopyMode = False End Sub تراجع ) أوراق العمل ("sheet2"). الخلايا. مسح نهاية الفرعية 

ملحوظة

بفضل venkat1926 لهذه النصيحة في المنتدى.

المقال السابق المقالة القادمة

نصائح الأعلى