तो मेरे पास टैगऑप्शन नामक एक ऐरे है - इसमें एक विकृत अगर कथन के अनुसार संख्यात्मक मान होते हैं। मूल्यों को बाहर निकालने के लिए मैं नहीं चाहता था कि मैंने अवांछित मानों को 0 का स्थान धारक मान दिया। अब मैं इस मान को फ़िल्टर करने का प्रयास कर रहा हूं लेकिन ऑनलाइन कुछ भी नहीं ढूंढ सकता जो सहायक हो।

पूरे फ़ंक्शन को संदर्भ के लिए पेस्ट करेगा लेकिन मेरी सरणी से प्लेसहोल्डर शून्य को फ़िल्टर करने में अधिक रुचि रखता है।

क्षमा करें अगर यह नौसिखिया है लेकिन मैं इसके लिए बहुत नया हूं:

Private Sub CommandButton4_Click()
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("TEST")
lrow = sh.Cells(Rows.count, 1).End(xlUp).Row
Dim splitstring As String
Dim holder As String
Dim myarray() As String
Dim strArrayNumber() As Integer
Dim strArrayTag() As String
Dim TagOptions() As Integer
Dim TagOptions2() As Integer
ReDim strArrayNumber(1 To lrow) As Integer
ReDim strArrayTag(1 To lrow) As String


'Initial for loop splitting tags and removing any tags with text (MV-4005A)
'Transfering those remaining tag numbers into array if they match equip selected

For a = 1 To lrow

If sh.Cells(a, 1).Value <> vbNullString Then
splitstring = sh.Cells(a, 1).Value
myarray = Split(splitstring, "-")
strArrayTag(a) = myarray(0)
End If

If IsNumeric(myarray(1)) = False Then

myarray(1) = 0

End If

If strArrayTag(a) = TagNumber1.Value Then 'Only stored if has selected Equipment tag
strArrayNumber(a) = myarray(1)
End If

Next a

'Sort Created Array

Quicksort strArrayNumber, LBound(strArrayNumber), UBound(strArrayNumber)

ReDim TagOptions(1000 To 2000) As Integer

Dim j As Integer
For j = 1000 To 2000

    For b = 1 To UBound(strArrayNumber)

        If strArrayNumber(b) = j Then

            TagOptions(j) = 0
            Exit For

           Else

            TagOptions(j) = j

        End If
    
    Next b

    sh.Cells(j, 8) = TagOptions(j)
Next j

Quicksort TagOptions, LBound(TagOptions), UBound(TagOptions)

For f = LBound(TagOptions) To UBound(TagOptions)

sh.Cells(f, 9) = TagOptions(f)

Next f

**TagOptions2 = Filter(TagOptions, "0", False, vbDatabaseCompare)**

Me.ComboBox1.List = TagOptions


End Sub

किसी भी मदद के लिए अग्रिम धन्यवाद।

1
Jack Denton 13 अक्टूबर 2020, 14:17

1 उत्तर

सबसे बढ़िया उत्तर

tl;dr पूरा कोड, बस ध्यान दें कि VBA का Filter() फ़ंक्शन "फ्लैट" 1-मंद सरणी पर लागू होता है, केवल आंशिक वर्ण खोज "0" को निष्पादित करता है जैसे तार में भी "10" या "205", निश्चित रूप से वह नहीं है जो आप करना चाहते हैं :-;

बीटीडब्ल्यू, यदि आपकी प्रारंभिक सरणी 2-मंद सरणी है, तो SO पर कई उत्तर हैं कि कैसे 2-मंद सरणी से डेटा को स्लाइस करें और उन्हें प्रारंभिक बिंदु के रूप में आवश्यक 1-मंद सरणी में स्थानांतरित करें या डबल ट्रांसफर करें।

असली मूल प्रश्न को हल करना कि शून्य अंकों को कैसे फ़िल्टर किया जाए

1-मंद सरणी में शून्य को फ़िल्टर करने में सफल होने के लिए, वर्कशीट फ़ंक्शन FilterXML (छंद 2013+ के बाद से उपलब्ध) के माध्यम से बस निम्न फ़ंक्शन का उपयोग करें:

     tagOptions = WorksheetFunction.FilterXML("<t><s>" & _
                  Join(tagOptions, "</s><s>") & "</s></t>", _
                  "//s[not(.='0')]")

परिणामस्वरूप 1-आधारित 2-मंद सरणी होती है।

यदि आप इसके बजाय परिणामी 1-मंद सरणी प्राप्त करना पसंद करते हैं, तो बस इसे tagOptions = Application.Transpose(tagOptions) या tagOptions = WorkSheetFunction.Transpose(tagOptions) के माध्यम से स्थानांतरित करें।

आप Extract substrings ... from FilterXML पर एक उत्कृष्ट अवलोकन पा सकते हैं।

0
T.M. 17 अक्टूबर 2020, 22:33