एक्सेल Vba (ऑनक्लिक बटन)


1

मेरे पास यह वर्कशीट है जिसमें "कोड, ऑपरेशन, शीर्षक, तिथि, नाम, विवरण, स्थिति" कॉलम शामिल हैं। प्रारूप सभी सामान्य रूप से हैं।

code:4566, 4899, 4987, 4988, 4989  
operation:X,Y,Z,X,Y  
title:XX,YY,ZZ,RR,XXY  
date: (the date column is not blank)  
name:Adam,Edward,Adam,Kris,Chris  
description: (some rows has data for this column, some are blank)  
status: active, inactive, closed

मैं उन पंक्तियों को कॉपी करने की कोशिश कर रहा हूं, जिनमें उनके 'नाम' कॉलम में "एडम" या "एडवर्ड" और 'सक्रिय' के साथ 'स्टेटस' कॉलम है, जिसमें "कोड", शीर्षक, तिथि, नाम, विवरण, स्थिति "कॉलम" शामिल हैं। (मुझे नई शीट में 'ऑपरेशन' कॉलम नहीं चाहिए)

इस बिंदु पर, मुझे कोई आपत्ति नहीं है यदि पंक्तियों में मेरे कुछ विवरण कोशिकाएं खाली हैं। मैं अभी भी परिणामों में यह चाहता हूं।

अंत तक रिटर्न वैल्यू केवल 2 पंक्तियाँ होंगी: 4566 और 4987
मैं इसे मैन्युअल रूप से कर सकता था। लेकिन मैं कोशिश करना चाहता हूं कि क्या यह vba द्वारा एक क्लिक (स्वचालन प्रक्रिया) के साथ किया जा सकता है

धन्यवाद।

P / S: मेरे पास अब जो कुछ भी है, उसे शामिल न करने के लिए माफी माँगता हूँ

Options Explicit

Sub Button1_Click()

Dim myRow As Long 'for finding last row  
Dim xlast As Integer 'x is the last row  
Dim sht As Worksheet 'original sheet  
Dim newsht As Worksheet 'sheet with new data  

Set sht = ThisWorkbook.Worksheets("Sheet1")  
Set newsht = ThisWorkbook.Worksheets("Sheet2")

myCol = code  
xlast = sht.Cells(Rows.Count, myCol).End(xlUp).Row  
'go through my code column for non-blank

For x = 1 To xlast 'from 1st row till last row  
(tab)    If (sheet.name.Cells() = "Adam" OR "Edward") And (sheet.status.Cells() = "active")  
(tab)    Then newsht.Rows.Value(code,title,date,name,description,status) = sheet.Rows().Value(code,title,date,name,description,status)  
    End If  
Next

End Sub

आपको अपना काम दिखाना होगा और कोई आपकी मदद करेगा। यह एक स्क्रिप्ट लेखन सेवा मुफ्त नहीं है। जिस तरह से आपका प्रश्न पढ़ा जाता है, वह एक कार्य क्रम है।
ejbytes

1
अब आपका कोड क्या कर रहा है? आपका सटीक मुद्दा क्या है?
Máté Juhász

शामिल कोड के साथ बहुत बेहतर सवाल - यह हमें यह देखने में मदद करता है कि आप कहां जाने की कोशिश कर रहे हैं
Sir Adelaide

जवाबों:


0

आपके उदाहरण कोड के साथ कुछ समस्याएं हैं:

sheet.name.Cells () = "एडम" या "एडवर्ड"

  • आपको सेल () के बजाय एक बार में एक सेल की जाँच करने की आवश्यकता है
  • सेल के मूल्य को संदर्भित करने के लिए, आपको सेल वैल्यू प्रॉपर्टी को संदर्भित करने की आवश्यकता है, अर्थात शीट. अरेंज ()। वैल्यू = एडम "।
  • प्रत्येक तुलना (एडम या एडवर्ड) को अलग से मूल्यांकन करने की आवश्यकता होती है, अर्थात श्रेणी ()। मान = "एडम" या रेंज ()। मूल्य = "एडवर्ड।

newsht.Rows.Value (कोड, शीर्षक, दिनांक, नाम, विवरण, स्थिति)

  • मान इस तरह नामित पर्वतमाला नहीं लेता है
  • यह कोड पुनरावृत्ति का उपयोग नहीं करता है मैं कहने के लिए कौन सी लाइन को कॉपी करें शीट 2 में डेटा

नीचे दिए गए कोड का प्रयास करें। आप चाहें तो इसे एक बटन पर असाइन कर सकते हैं। आपको रेंज बदलने की आवश्यकता होगी Dat तथा newdat अपनी चादर को सूट करने के लिए। आपके कोड से मुख्य परिवर्तन यह है कि ओफ़्सेट डेटा की प्रत्येक पंक्ति की जांच करने के लिए विभिन्न पंक्तियों और स्तंभों (डेटा ब्लॉक के ऊपरी बाएं कोने से ऑफसेट) के माध्यम से पुनरावृति करने के लिए उपयोग किया जाता है। प्रत्येक चेक या कॉपी को स्पष्ट रूप से कोडित किया जाता है।

Sub macro2()

Set sht = ThisWorkbook.Worksheets("Sheet1")
Set newsht = ThisWorkbook.Worksheets("Sheet2")
'Set dat = sht.Range("p9")
Set dat = sht.Range("code").Cells(1, 1)
Set newdat = newsht.Range("c2")

'initialise counters
i = 1
j = 1

'set headings on sheet 2
newdat.Offset(0, 0).Value = dat.Offset(0, 0).Value 'copy code
newdat.Offset(0, 1).Value = dat.Offset(0, 2).Value 'copy title
newdat.Offset(0, 2).Value = dat.Offset(0, 3).Value 'copy date
newdat.Offset(0, 3).Value = dat.Offset(0, 4).Value 'copy name
newdat.Offset(0, 4).Value = dat.Offset(0, 5).Value 'copy descr
newdat.Offset(0, 5).Value = dat.Offset(0, 6).Value 'copy status



Do While dat.Offset(i, 0).Value <> "" 'loop till code data goes blank
  If ((dat.Offset(i, 4).Value = "Adam" Or dat.Offset(i, 4).Value = "Edward") And dat.Offset(i, 6).Value = "active") Then 'check conditions
    newdat.Offset(j, 0).Value = dat.Offset(i, 0).Value 'copy code
    newdat.Offset(j, 1).Value = dat.Offset(i, 2).Value 'copy title
    newdat.Offset(j, 2).Value = dat.Offset(i, 3).Value 'copy date
    newdat.Offset(j, 3).Value = dat.Offset(i, 4).Value 'copy name
    newdat.Offset(j, 4).Value = dat.Offset(i, 5).Value 'copy descr
    newdat.Offset(j, 5).Value = dat.Offset(i, 6).Value 'copy status
    j = j + 1
  End If

  i = i + 1
Loop


End Sub

हाय सर एडिलेड, मेरी गलती को इंगित करने के लिए धन्यवाद और मुझे ठीक करने का तरीका दिखा। मेरा यहाँ एक प्रश्न है, आपकी कोड लाइन, 'सेट डेट = sht.Range ("p9") में, आप पंक्ति = 9, कॉलम = p के इस सेल का चयन कर रहे हैं, क्या मुझे पता है कि इसका क्या उपयोग हो सकता है? क्षमा करें, अगर मुझे गलत विचार मिला, तो क्या यह डेटा के लिए सीमा निर्धारित करने के लिए है, लेकिन क्या होगा यदि आईडैक रेंज?
ExcelNovice

यह शीट 1 पर डेटा ब्लॉक की ऊपरी बाईं सेल है। मेरे उदाहरण में मैंने खुद के लिए बनाया था, हेडिंग "कोड" P9 में था, "ऑपरेशन" Q9 में था, "4566" P10 में था, अगर आप डॉन '। टी किसी कारण के लिए सेल को जानते हैं और नामित सीमा को संदर्भित करने की आवश्यकता है, सेट डेट = sht.Range ("कोड") को बदलने की कोशिश करें। सेल (1, 1)
Sir Adelaide

एक बार फिर आपका धन्यवाद! लेकिन अगर मुझे लगता है कि मुझे नहीं पता है कि कौन से कॉलम में शीट 1-ओरिजिनल डेटा (नाम / स्टेटस / ..) में कौन सा डेटा होगा, लेकिन मुझे शीट 2 में पता है: मेरा 1 कॉलम कोड होगा, फिर शीर्षक, दिनांक, नाम, desc , स्थिति। इसलिए मैं उपरोक्त विधि के लिए नहीं जा सकता, मुझे क्या करना चाहिए अगर शीट्स (sht) .Cells (0, i) .Value = "नाम" तो newdat.Offset (0, 0) .Value = नाम संपादन नहीं करने के लिए माफी माँगता हूँ। मेरे मूल पद से क्योंकि "आपके नेटवर्क से उत्पन्न होने वाले स्पैम और दुरुपयोग की मात्रा के कारण इस समय आपकी पोस्ट सबमिट नहीं की जा सकती है। हम किसी भी असुविधा के लिए क्षमा चाहते हैं।"
ExcelNovice
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.