का उपयोग करके दो चादरों की तुलना करें मेरे पास डेटा की मात्रा के कारण मेरा कोड बहुत धीमा है (प्रत्येक शीट के लिए 10+ मिनट)। मेरा मानना है कि सरणी का उपयोग करके इसे गति देने का एक तरीका हो सकता है, लेकिन मुझे यकीन नहीं है कि इसके बारे में कैसे जाना है। मैं स्थिति को विस्तार से समझाने की कोशिश करूंगा।सरणी
मेरे पास चालान # एस, भाग # एस और बिक्री की कीमतों (अन्य जानकारी के साथ) के साथ दो कार्यपत्रक हैं जिन्हें मैं अंतर खोजने के लिए तुलना करने की कोशिश कर रहा हूं। मैंने इनवॉइस # और दोनों चादरों पर भाग # के संयोजन का उपयोग करके डेटा की प्रत्येक पंक्ति के लिए एक अद्वितीय संख्या बनाई है। मैंने उस संख्या से मैन्युअल रूप से दोनों चादरों को भी क्रमबद्ध किया है। मैं यह जानना चाहता हूं कि इनमें से कौन सा अद्वितीय # एस शीट 1 पर है और शीट 2 पर नहीं है और इसके विपरीत। (इसका एक और हिस्सा उन लोगों की जांच करना होगा जो मैच करते हैं और देखते हैं कि बिक्री मूल्य अलग है या नहीं, लेकिन मुझे लगता है कि मैं इसे आसानी से समझ सकता हूं।) लक्ष्य यह देखना है कि चालक द्वारा आंशिक रूप से या पूरी तरह से चालान को किस तरह याद किया गया था और मेरी कंपनी।
मेरे पास एक शीट में डेटा की लगभग 10k पंक्तियां और दूसरे में 11k है। नीचे कोड है जो मैंने www.vb-helper.com/howto_excel_compare_lists.html पर जो पाया है उससे संशोधित का उपयोग करके और इस साइट पर समान प्रश्नों के उत्तर देखने से मैं currenlty हूँ। चादरों के उलट के साथ लगभग समान दूसरा उप है। मुझे नहीं पता कि सिर्फ एक ही लिखना संभव है जो दोनों तरीकों से करता है।
Private Sub cmdCompare2to1_Click()
Dim first_index As Integer
Dim last_index As Integer
Dim sheet1 As Worksheet
Dim sheet2 As Worksheet
Dim r1 As Integer
Dim r2 As Integer
Dim found As Boolean
Set sheet1 = Worksheets(1)
Set sheet2 = Worksheets(2)
Application.ScreenUpdating = False
first_index = 1
last_index = sheet1.Range("a" & Rows.Count).End(xlUp).Row
' For each entry in the second worksheet, see if it's
' in the first.
For r2 = first_index To last_index
found = False
' See if the r1-th entry on sheet 2 is in the sheet
' 1 list.
For r1 = first_index To last_index
If sheet1.Cells(r1, 16) = sheet2.Cells(r2, 9) Then
' We found a match.
found = True
Exit For
End If
Next r1
' See if we found it.
If Not found Then
' Flag this cell.
sheet2.Cells(r2, 9).Interior.ColorIndex = 35
End If
Next r2
Application.ScreenUpdating = True
End Sub
यह डेटा के छोटे सेट के लिए ठीक काम करता है, लेकिन मैं इसे पंक्तियों के माध्यम से जाना बनाने हूँ की बड़ी संख्या के साथ, यह सिर्फ हमेशा के लिए ले जाता है और लेखाकार से कोई भी इसका इस्तेमाल करना चाहते हैं। आदर्श रूप से, केवल अंतर को हरा करने की बजाय, यह उन्हें एक अलग शीट पर कॉपी करेगा, यानी: शीट 3 में शीट 2 पर शीट 2 पर सब कुछ नहीं होगा, लेकिन मैं इस बिंदु पर जो प्राप्त कर सकता हूं उसे ले जाऊंगा।
समाधान के लिए चारों ओर देखने के बाद, ऐसा लगता है कि इंटरनेट पर हर कोई इस बात से सहमत है कि इसे तेज करने के लिए सरणी के उपयोग की आवश्यकता है। हालांकि, मैं यह नहीं समझ सकता कि मेरे वर्तमान कोड को उस प्यारी सलाह को कैसे लागू किया जाए। मुझे एहसास है कि एक अच्छी संभावना है कि इस कोड को स्क्रैप करना और शुरू करना होगा, लेकिन फिर मैं पूछता हूं कि कैसे?
जब से तुम एक मानदंडों के आधार पर मानों की तुलना कर रहे हैं, मुझे लगता है कि आप काम करने के लिए सशर्त स्वरूपण का उपयोग कर सकते हैं। –