तो मैंने एक ऐरे फॉर्मूला लिखा जो मेरे एक्सेल पर ठीक काम करता है, लेकिन इसे वीबीए में परिवर्तित करते समय मुझे एक त्रुटि मिल रही है: रेंज क्लास की फॉर्मूलाएरे संपत्ति सेट करने में असमर्थ। मुझे यकीन नहीं है कि मुझे यह मुद्दा क्यों मिल रहा है। कृपया यहां कोड देखें:

Selection.FormulaArray = _
    "=IF(IF(AND(OR(RC[-14]<>R[-1]C[-14],RC[-15]<>R[-1]C[-15]),Pay_Periods!R2C10<>0),MAX(IF(Pay_Periods!R2C3:R250C3>=Pay_Periods!R1C10+(14*Pay_Periods!R3C10),IF(Pay_Periods!R2C2:R250C2<=Pay_Periods!R1C10+(14*Pay_Periods!R3C10),Pay_Periods!R2C3:R250C3))),MAX(IF((Pay_Periods!R2C3:R250C3>=Sheet1!RC[-10])*(IF(AND(Sheet1!RC[-14]=Sheet1!R[-1]C[-14],Sheet1!R[-1]C[-10]<Sheet1!RC[" & _
    "-10]+14),Pay_Periods!R2C3:R250C3<(RC[-10]+14),IF(AND(RC[-14]=R[-1]C[-14],RC[-15]=R[-1]C[-15]),Pay_Periods!R2C3:R250C3<R[-1]C[-10],1))),Pay_Periods!R2C3:R250C3,"""")))=0,"""",IF(AND(OR(RC[-14]<>R[-1]C[-14],RC[-15]<>R[-1]C[-15]),Pay_Periods!R2C10<>0),MAX(IF(Pay_Periods!R2C3:R250C3>=Pay_Periods!R1C10+(14*Pay_Periods!R3C10),IF(Pay_Periods!R2C2:R250C2<=Pay_Periods!R1C10+" & _
    "(14*Pay_Periods!R3C10),Pay_Periods!R2C3:R250C3))),MAX(IF((Pay_Periods!R2C3:R250C3>=Sheet1!RC[-10])*(IF(AND(Sheet1!RC[-14]=Sheet1!R[-1]C[-14],Sheet1!RC[-15]=Sheet1!R[-1]C[-15],Sheet1!R[-1]C[-10]<Sheet1!RC[-10]+14),Pay_Periods!R2C3:R250C3<(RC[-10]+14),IF(AND(RC[-14]=R[-1]C[-14],RC[-15]=R[-1]C[-15]),Pay_Periods!R2C3:R250C3<R[-1]C[-10],1))),Pay_Periods!R2C3:R250C3,"""")" & _
    ")))" & _
    ""

वैसे मैंने इसे ठीक उसी तरह कॉपी किया है कि कैसे मैक्रो ने इसे रिकॉर्ड किया ताकि आप कुछ रिक्त स्थान देख सकें। मुझे लगता है कि यह बहुत लंबा हो सकता है, लेकिन यह अजीब लगता है कि इसे सेल में लिखना ठीक हो जाता है, लेकिन वीबीए फॉर्म में नहीं। अगर कोई मदद कर सकता है तो इसकी बहुत सराहना की जाएगी! मैं इस सूत्र को कोड द्वारा स्वयं डालने का प्रयास कर रहा हूं और पेस्ट मानों की प्रतिलिपि बना रहा हूं ताकि एक्सेल को जानकारी में लोड करना न पड़े।

यहां बताया गया है कि सूत्र सामान्य रूप से कैसा दिखता है:

=IF(IF(AND(OR(C2<>C1,B2<>B1),Pay_Periods!$J$2<>0),MAX(IF(Pay_Periods!$C$2:$C$250>=Pay_Periods!$J$1+(14*Pay_Periods!$J$3),IF(Pay_Periods!$B$2:$B$250<=Pay_Periods!$J$1+(14*Pay_Periods!$J$3),Pay_Periods!$C$2:$C$250))),MAX(IF((Pay_Periods!$C$2:$C$250>=Sheet1!G2)*(IF(AND(Sheet1!C2=Sheet1!C1,Sheet1!G1<Sheet1!G2+14),Pay_Periods!$C$2:$C$250<(G2+14),IF(AND(C2=C1,B2=B1),Pay_Periods!$C$2:$C$250<G1,1))),Pay_Periods!$C$2:$C$250,"")))=0,"",IF(AND(OR(C2<>C1,B2<>B1),Pay_Periods!$J$2<>0),MAX(IF(Pay_Periods!$C$2:$C$250>=Pay_Periods!$J$1+(14*Pay_Periods!$J$3),IF(Pay_Periods!$B$2:$B$250<=Pay_Periods!$J$1+(14*Pay_Periods!$J$3),Pay_Periods!$C$2:$C$250))),MAX(IF((Pay_Periods!$C$2:$C$250>=Sheet1!G2)*(IF(AND(Sheet1!C2=Sheet1!C1,Sheet1!B2=Sheet1!B1,Sheet1!G1<Sheet1!G2+14),Pay_Periods!$C$2:$C$250<(G2+14),IF(AND(C2=C1,B2=B1),Pay_Periods!$C$2:$C$250<G1,1))),Pay_Periods!$C$2:$C$250,""))))

फिर ctrl+shift+स्वाभाविक रूप से दर्ज करें

1
Serg 21 नवम्बर 2018, 18:07

1 उत्तर

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

मैंने आगे बढ़कर केवल आपके लिए एक कस्टम समाधान बनाया। यहां, आप देखेंगे कि मैंने आपके सूत्र को छोटे भागों में तोड़ दिया और उन्हें वापस एक साथ स्थानापन्न कर दिया (ठीक उसी तरह जैसे बीजगणित कक्षा में अच्छे पुराने दिनों में)।

यह भी ध्यान दें, कि मैं Selection ऑब्जेक्ट का उपयोग नहीं करता जैसा कि आप अपने प्रश्न में करते हैं। मैं .Select, Selection. या .Activate आदि का उपयोग करने के बजाय सीधे रेंज के साथ काम करने की सलाह देता हूं। तो नीचे मेरे उदाहरण में मुझे लगता है कि आपके पास "चयनित" श्रेणी पहली वर्कशीट पर ए 1 है।

strFormula = "=IF(IF(AND(OR(C2<>C1,B2<>B1),Pay_Periods!$J$2<>0),MAX(W_W),MAX(X_X))=0,""""," & _
             "IF(AND(OR(C2<>C1,B2<>B1),Pay_Periods!$J$2<>0),MAX(Y_Y),MAX(Z_Z)))"
strFormulaW_W = "IF(Pay_Periods!$C$2:$C$250>=Pay_Periods!$J$1+(14*Pay_Periods!$J$3)," & _
                "IF(Pay_Periods!$B$2:$B$250<=Pay_Periods!$J$1+(14*Pay_Periods!$J$3),Pay_Periods!$C$2:$C$250))"
strFormulaX_X = "IF((Pay_Periods!$C$2:$C$250>=Sheet1!G2)*(IF(AND(Sheet1!C2=Sheet1!C1,Sheet1!G1<Sheet1!G2+14)," & _
                "Pay_Periods!$C$2:$C$250<(G2+14),IF(AND(C2=C1,B2=B1),Pay_Periods!$C$2:$C$250<G1,1))),Pay_Periods!$C$2:$C$250,"""")"
strFormulaY_Y = "IF(Pay_Periods!$C$2:$C$250>=Pay_Periods!$J$1+(14*Pay_Periods!$J$3),IF(Pay_Periods!$B$2:$B$250<=" & _
                "Pay_Periods!$J$1+(14*Pay_Periods!$J$3),Pay_Periods!$C$2:$C$250))"
strFormulaZ_Z = "IF((Pay_Periods!$C$2:$C$250>=Sheet1!G2)*(IF(AND(Sheet1!C2=Sheet1!C1,Sheet1!B2=Sheet1!B1," & _
                "Sheet1!G1<Sheet1!G2+14),Pay_Periods!$C$2:$C$250<(G2+14),IF(AND(C2=C1,B2=B1),Pay_Periods!$C$2:$C$250<G1,1))),Pay_Periods!$C$2:$C$250,"""")"

With ThisWorkbook.Worksheets(1).Range("A1")
    .FormulaArray = strFormula
    .Replace "W_W", strFormulaW_W
    .Replace "X_X", strFormulaX_X
    .Replace "Y_Y", strFormulaY_Y
    .Replace "Z_Z", strFormulaZ_Z
End With
1
ArcherBird 21 नवम्बर 2018, 16:03