it-swarm.dev

حذف الصف بأكمله إذا كانت الخلية تحتوي على السلسلة X

أنا جديد على VBA وأحاول الوصول إلى طريقة لحذف جميع الصفوف (وإزاحة الخلايا للأعلى ، إن أمكن) حيث تحتوي خلية عمود موقع الويب على Word none. يحتوي الجدول على 5000+ سجل وهذا سيوفر لي قدرا كبيرا من الوقت.

أنا أقدر أي اقتراحات. شكرا كثيرا مسبقا!

35
AnchovyLegend

هذه ليست مهمة VBA - هذه المهمة المحددة تكون أسهل مع تصفية تلقائية.

1. إدراج مرشح تلقائي (في Excel 2010 ، انقر فوق home-> (تحرير) فرز وتصفية -> تصفية)
(2). تصفية في عمود "مواقع الويب"
(3). بمناسبة "لا شيء" وحذفها
(4). مرشح واضح

71
MBK

حسنًا ، أعرف ذلك بالنسبة لـ VBA ولكن إذا كنت بحاجة إلى القيام بذلك لحذف جملة واحدة ، فيمكنك استخدام وظيفة Excel التالية: http://blog.contextures.com/archives/2010/06/21/fast الطريق إلى إيجاد وحذف Excel الصفوف / نأمل أن يساعد هذا أي شخص

مثال يبحث عن السلسلة "ورقة":

  1. في مربع الحوار Find and Replace ، اكتب "paper" في مربع Find What.
  2. انقر فوق "بحث عن الكل" لرؤية قائمة الخلايا التي تحتوي على "ورق"
  3. حدد عنصرًا في القائمة ، واضغط على Ctrl + A ، لتحديد القائمة بأكملها ، ولتحديد كل الخلايا "الورقية" في ورقة العمل.
  4. ضمن علامة التبويب الصفحة الرئيسية للشريط ، انقر فوق حذف ، ثم انقر فوق حذف صفوف الورقة.
17
Barry Carter

في "علامة تبويب المطور" ، انتقل إلى "Visual Basic" وقم بإنشاء وحدة نمطية. نسخ لصق ما يلي. تذكر تغيير الرمز ، حسب ما تريد. ثم قم بتشغيل الوحدة النمطية.

  Sub sbDelete_Rows_IF_Cell_Contains_String_Text_Value()
    Dim lRow As Long
    Dim iCntr As Long
    lRow = 390
    For iCntr = lRow To 1 Step -1
        If Cells(iCntr, 5).Value = "none" Then
            Rows(iCntr).Delete
        End If
    Next
    End Sub

lRow: ضع عدد الصفوف التي يحتوي عليها الملف الحالي.

الرقم "5" في "If" مخصص للعمود الخامس (E)

8
Apolo Radomer

أود أن أضيف إلى إجابة MBK @. على الرغم من أنني وجدت إجابة @ MBK مفيدة جدًا في حل مشكلة مشابهة ، فمن الأفضل أن تتضمنMBK لقطة شاشة لكيفية تصفية عمود معين . enter image description here

6
palmbardier

تمت الإشارة إلى ذلك في تعليق آخر ، ولكن يمكنك تجربة شيء مثل هذا.

Sub FilterAndDelete()

Application.DisplayAlerts = False 

     With Sheet1 'Change this to your sheet name

         .AutoFilterMode = False   
         .Range("A3:K3").AutoFilter
         .Range("A3:K3").AutoFilter Field:=5, Criteria1:="none"
         .UsedRange.Offset(1, 0).Resize(ActiveSheet.UsedRange.Rows.Count - 1).Rows.Delete 

     End With

Application.DisplayAlerts = True

End Sub

لم أختبر هذا وهو من الذاكرة ، لذلك قد يتطلب الأمر بعض التغيير والتبديل ولكن يجب أن يتم إنجاز المهمة دون تكرار آلاف الصفوف. ستحتاج إلى إزالة 11 تموز (يوليو) حتى يكون UsedRange صحيحًا أو قم بتغيير الإزاحة إلى صفين بدلاً من 1 في .Offset(1,0).

عمومًا ، قبل أن أفعل .Delete سأقوم بتشغيل الماكرو مع .Select بدلاً من حذف بهذه الطريقة يمكنني التأكد من حذف النطاق الصحيح ، وقد يكون من المفيد القيام بذلك للتأكد من يتم حذف النطاق المناسب.

1
Soulfire

جرب هذا ...

Dim r as Range
Dim x as Integer

For x = 5000 to 4 step -1 '---> or change as you want //Thanx 4 KazJaw

  set r = range("E" & format(x))
  if ucase(r.Value) = "NONE" then
    Rows(x).EntireRow.Delete
  end if 

Next
0
matzone