मैं मध्यम आकार के डेटासेट के दो-तिहाई हिस्से को शीघ्रता से हटाने के बारे में अंतर्दृष्टि की तलाश में हूं। वर्तमान में, मैं टेक्स्ट फ़ाइल से स्पेस-सीमांकित डेटा एक्सेल में आयात कर रहा हूं, और मैं पंक्ति द्वारा डेटा पंक्ति को हटाने के लिए लूप का उपयोग कर रहा हूं। लूप डेटा की सबसे निचली पंक्ति से शुरू होता है और ऊपर जाने वाली पंक्तियों को हटा देता है। डेटा कालानुक्रमिक रूप से क्रमबद्ध है, और मैं केवल पहले या अंतिम दो तिहाई डेटा को काट नहीं सकता। अनिवार्य रूप से क्या हो रहा है कि डेटा का नमूना लिया जा रहा है और बहुत सारे डेटा बिंदु एक दूसरे के बहुत करीब मौजूद हैं। यह एक श्रमसाध्य धीमी प्रक्रिया है, और मैं बस एक और तरीका ढूंढ रहा हूं।
Sub Delete()
Dim n As Long
n = Application.WorksheetFunction.Count(Range("A:A"))
Application.Calculation = xlCalculationManual
Do While n > 5
n = n - 1
Rows(n).Delete
n = n - 1
Rows(n).Delete
n = n - 1
Loop
Application.Calculation = xlCalculationAutomatic
End Sub
2 जवाब
लूप के लिए उपयोग करें जो एक निश्चित संख्या से कदम उठाने की अनुमति देता है:
For i = 8 To n Step 3
एक श्रेणी चर में संग्रहीत एक असंबद्ध श्रेणी बनाने के लिए संघ का उपयोग करें।
Set rng = Union(rng, .Range(.Cells(i + 1, 1), .Cells(i + 2, 1)))
फिर एक बार में सभी को हटा दें।
rng.EntireRow.Delete
प्रोत्साहित करने की एक और अच्छी आदत हमेशा का उपयोग किसी भी श्रेणी की वस्तुओं के माता-पिता को घोषित करना है। जैसे-जैसे आपका कोड अधिक से अधिक जटिल होता जाता है, माता-पिता की घोषणा न करने से समस्याएँ हो सकती हैं।
With
ब्लॉक का उपयोग करके।
With Worksheets("Sheet1")
हम उस माता-पिता के लिंक को दर्शाने के लिए .
के साथ सभी श्रेणी वस्तुओं से पहले कर सकते हैं।
Set rng = .Range("A6:A7")
Sub Delete()
Dim n As Long
Dim i As Long
Dim rng As Range
Application.Calculation = xlCalculationManual
With Worksheets("Sheet1") 'change to your sheet
n = Application.WorksheetFunction.Count(.Range("A:A"))
Set rng = .Range("A6:A7")
For i = 8 To n Step 3
Set rng = Union(rng, .Range(.Cells(i + 1, 1), .Cells(i + 2, 1)))
Next i
End With
rng.EntireRow.Delete
Application.Calculation = xlCalculationAutomatic
End Sub
आप सरणियों का उपयोग कर सकते हैं और एक तिहाई पंक्तियों को एक नई सरणी में लिख सकते हैं। फिर मूल को साफ़ करने के बाद स्क्रीन पर प्रिंट करें।
यदि कोई है तो आप सूत्र खो देंगे। यदि आपके पास सिर्फ एक बुनियादी डेटासेट था, तो यह आपके लिए उपयुक्त हो सकता है। यह तेज़ होना चाहिए
Sub MyDelete()
Dim r As Range
Set r = Sheet1.Range("A1").CurrentRegion 'perhaps define better
Set r = r.Offset(1, 0).Resize(r.Rows.Count - 1) ' I assume row 1 is header row.
Application.ScreenUpdating = False
Dim arr As Variant
arr = r.Value
Dim newArr() As Variant
ReDim newArr(1 To UBound(arr), 1 To UBound(arr, 2))
Dim i As Long, j As Long, newCounter As Long
i = 1
newCounter = 1
Do
For j = 1 To UBound(arr, 2)
newArr(newCounter, j) = arr(i, j)
Next j
newCounter = newCounter + 1
i = i + 3
Loop While i <= UBound(arr)
r.ClearContents
Sheet1.Range("A2").Resize(newCounter - 1, UBound(arr, 2)).Value = newArr
Application.ScreenUpdating = True
End Sub
संबंधित सवाल
नए सवाल
excel
केवल एक्सेल ऑब्जेक्ट्स या फ़ाइलों, या जटिल फॉर्मूला विकास के खिलाफ प्रोग्रामिंग पर प्रश्नों के लिए। यदि आप लागू हो तो आप Excel टैग को VBA, VSTO, C #, VB.NET, PowerShell, OLE स्वचालन और अन्य प्रोग्रामिंग संबंधी टैग और प्रश्नों के साथ जोड़ सकते हैं। सुपर उपयोगकर्ता पर एकल कार्यपत्रक कार्यों के लिए एमएस एक्सेल के बारे में सामान्य सहायता उपलब्ध है।