एक्सेल एक कस्टम vba फ़ंक्शन बनाते हैं?


1

किसी ने मुझे निम्नलिखित निष्पादित करने के लिए एक vba समारोह बनाने में मदद कर सकते हैं?

में पत्रक 1 मेरे पास 3 कॉलम हैं A(product) तथा B(price) जिसके साथ आबाद हैं 3000 आइटम और तीसरा कॉलम C(quantity) जो आबाद नहीं है अभी व।

मैं कुछ उत्पादों में मात्रा जोड़ना चाहता हूं, जो उत्पाद को खोजने के द्वारा किया जाएगा और इसी सेल सी में राशि दर्ज करेंगे।

फिर Sheet2 या यहां तक ​​कि निर्दिष्ट अलग-अलग कार्यपुस्तिका में केवल उन सभी उत्पादों और कीमतों और मात्रा को जोड़ा गया है जिनके पास मात्रा है।

उदाहरण के लिए, मेरे पास है पत्रक 1 :

sheet1

मैं चाहता हूं कि शीट 2 या एक निर्दिष्ट शीट / वर्कबुक स्वचालित रूप से उत्पादों और उनके मिलान की कीमतों और मात्राओं पर निर्भर हो, जिसमें इस तरह की मात्रा हो:

enter image description here

मैं एक एक्सेल फ़ंक्शन बनाने में कामयाब रहा हूं, लेकिन उत्पादों की सूची साप्ताहिक बदल रही है और हर बार मुझे फॉर्मूला को कॉपी / पेस्ट करना है और स्रोत फ़ाइल को अनुकूलित करना है और पूरी तरह से परेशानी है।

मैंने जो सूत्र बनाया है, वह यहां है:

=IFERROR(INDEX('Products'!$A$5:$C$2655,SMALL(IF((0<'Products'!$C$5:$C$2655),MATCH(ROW('Products'!$B$5:$B$2655),ROW('Products'!$B$5:$B$2655))),ROW(A11)),COLUMN(A11))," ")

1
यहां आपको जो पहला उत्तर मिलेगा, वह "यह एक पटकथा लेखन सेवा नहीं है"। आपको वे प्रमाण देने होंगे जो आपने VB कोड लिखने के कौशल से सीखे हैं और फिर अपनी परियोजना की त्रुटियों पर मदद माँगते हैं। मैक्रो रिकॉर्ड करके शुरू करें, फिर उस मैक्रो को मैन्युअल रूप से हेरफेर करें यदि आप सुनिश्चित नहीं हैं कि कहां से शुरू करें। रिकॉर्ड के माध्यम से मैक्रोज़ बनाना, वाक्यविन्यास सीखने का एक अच्छा तरीका है।
ejbytes

मैं एक्सेल में अधिक ज्ञान प्राप्त करने और सीखने के लिए तैयार हूँ और अगर इसमें VB कोड सीखना ठीक होगा लेकिन आपकी टिप्पणी का अंतिम वाक्य मेरे लिए शुद्ध अलौकिक है। क्या मुझे एक विशिष्ट सॉफ्टवेयर डाउनलोड करना है?
dan

1
आपको इसके लिए विशिष्ट सॉफ़्टवेयर की आवश्यकता नहीं है, बस "एक्सेल में रिकॉर्ड मैक्रो" के लिए Google और बड़ी मात्रा में जानकारी मिलेगी।
Máté Juhász

आप "डेवलपर" टैब को प्रकट करना चाहते हैं यदि यह पहले से ही नहीं है। एक्सेल (2007, 2010, 2016) के किस संस्करण के आधार पर "डेवलपर टैब एक्सेल 'वर्ष' खोजें। वहां से आपको इस टैब में एक "रिकॉर्ड मैक्रो" मिलेगा। यह रिकॉर्ड कर रहा है कि आपके कार्य क्या हैं, लेकिन समय के संबंध में नहीं। इसी तरह मैंने छोटे चरणों में वीबी सीखी। VB वर्बोज़ एक्सेल प्रोजेक्ट बनाने में बहुत उपयोगी हो जाता है। "यूज रिलेटिव रिफरेंस" भी है, जो कि सेल के सापेक्ष "एक्टिव" या "सिलेक्टेड" है। इसके साथ खेलें, जानें कि चीजें क्या करती हैं और उनका क्या मतलब है।
ejbytes

कोड देखने के लिए "व्यू मैक्रोज़" या Alt + F11 देखें। एक्सेल रिकॉर्ड में VB कोड, शीट्स और मॉड्यूल दो स्थान हैं। वीबी को जानने के दौरान आप शब्दों और वाक्य रचना से अधिक परिचित होंगे। मैक्रोज़ "अवलोकन और परिणाम द्वारा सीखने" या एक त्रुटि का परीक्षण करने की कुंजी है। एक प्रोग्रामर के रूप में मैं अब एक्सेल में जा सकता हूं और इसमें से एड़ी को प्रोग्राम कर सकता हूं, लेकिन फिर भी "सिंटैक्स" सीख रहा हूं। सिंटैक्स और प्रोग्रामिंग दोनों अलग-अलग हैं, लेकिन आवश्यक उपकरण हैं और किसी भी प्रोग्रामिंग प्रोजेक्ट को बनाने में विभिन्न प्रोग्रामिंग वातावरण के लिए हाथ से चलते हैं।
ejbytes

जवाबों:


1

यह VBA कोड काम करेगा:

Public Sub quantityProducts()
    '**********************
    ' variables
    sourceSheet = "Sheet1" 'name of the source sheet
    destSheet = "Sheet2" 'name of the destination sheet
    titleRow = 1 ' Number of Title Row
    firstRowSource = 2 ' First row of source data
    firstRowDest = 2 'First row of data in destination sheet
    copyTitleRow = True 'Should be title row be copied? True / False
    columnToCheck = 3 'Column that defines if the row must be copied
    '**********************
    Dim wkb As Workbook
    Dim wks, wks1 As Worksheet
    Set wkb = ThisWorkbook
    Set wks = wkb.Worksheets(sourceSheet)
    Set wks1 = wkb.Worksheets(destSheet)
    wks1.Rows.Clear ' Clear the contents of destination sheet
    If copyTitleRow = True Then 'If title row must be copied
        wks.Rows(titleRow).Copy Destination:=wks1.Rows(titleRow)
    End If
    totalrows = wks.Cells(Rows.Count, 1).End(xlUp).Row ' total rows in source
    destRow = firstRowDest
    For i = firstRowSource To totalrows ' iterate through rows
        If wks.Cells(i, columnToCheck) <> "" Then ' If cell in column to check isn't empty
            wks.Rows(i).Copy Destination:=wks1.Rows(destRow) ' Copy from source to destination
            destRow = destRow + 1 ' Increase value of destination row
        End If
    Next i
    a = MsgBox("Finished. Copied " & destRow - firstRowDest & " rows", vbOKOnly)
End Sub

वीबीए / मैक्रोज़ खोलें एएलटी + F11 , के अंतर्गत ThisWorkbook एक नया मॉड्यूल डालें और दाईं ओर कोड पेस्ट करें।

जाँच करें कि चर को दिए गए मान आपकी चादरों से मेल खाते हैं और हरे त्रिकोण को क्लिक करते हुए निष्पादित करते हैं।

मैं आपको यह समझने के लिए कोड पर टिप्पणी देता हूं कि यह कैसे काम करता है।

आप इसे पहली पंक्ति पर क्लिक करके भी चरण दर चरण चला सकते हैं और फिर प्रत्येक चरण को दबाए रख सकते हैं F8

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.