मैं वीबीए पर एक मैक्रो बनाना चाहता हूं जो तालिका में संरचना बदलने पर प्रारूप को स्वचालित रूप से संशोधित करता है।

तो, इस उदाहरण को देख रहे हैं।

कल्पना कीजिए कि हमारे पास निम्न फ़ाइल है:

I1

और अब हम परिवार वृक्ष संरचना को निम्नलिखित में संशोधित करते हैं:

enter image description here

जैसा कि आप देख सकते हैं कि दाईं ओर की तालिका पेड़ की संरचना के अनुकूल नहीं है (ग्रे सेल माता-पिता के लिए होनी चाहिए और साथ ही तालिका में अंत में अधिक पंक्तियों की आवश्यकता होती है)।

मुझे इस बारे में कोई जानकारी नहीं है कि इसे कैसे शुरू किया जाए। क्या आप कृपया मुझे एक संकेत दे सकते हैं?

अंतिम परिणाम (मैक्रो चलाने के बाद) यह होना चाहिए:

enter image description here

-2
MTT 23 अगस्त 2018, 12:58
2
वीबीए का उपयोग करने की कोई आवश्यकता नहीं है, यदि मूल कॉलम खाली नहीं है तो साधारण सशर्त स्वरूपण जांच पर्याप्त होनी चाहिए।
 – 
BrakNicku
23 अगस्त 2018, 13:02

2 जवाब

मान लें कि आपका डेटा पंक्तियों और स्तंभों में है जैसा कि नीचे चित्र में दिखाया गया है, आप वांछित परिणाम प्राप्त करने के लिए समीकरणों के आधार पर सशर्त स्वरूपण का उपयोग कर सकते हैं। मैं पाँच (5) नियमों के साथ आने में सक्षम था (आदेश महत्वपूर्ण है!) जो आंतरिक धराशायी-रेखाओं के साथ सीमाओं को भी बनाए रखता है।

नोट: कॉलम ए-सी में सेल के लिए, यदि आप सेल को एक स्थान से दूसरे स्थान पर खींचते हैं, तो यह सशर्त स्वरूपण को बाधित करेगा (कॉपी/पेस्ट ठीक काम करता है)।

sample table which matches data placement for sample formatting

सशर्त स्वरूपण नियम (डिफ़ॉल्ट रूप से) जोड़े जाते हैं ताकि सबसे हाल ही में जोड़ा गया सूची के शीर्ष पर हो। इस कारण से, मैं नीचे से ऊपर तक प्रत्येक नियम को पढ़ूंगा।

order of conditional formatting rules, and columns they're applied to.


इस नियम के लिए प्रयुक्त सूत्र है: =NOT(AND(ISBLANK($A1),ISBLANK($B1),ISBLANK($C1)))

स्वरूपण पूर्वावलोकन से ध्यान दें कि कक्ष के चारों ओर पूरी तरह से धराशायी रेखाएं हैं। एक सफेद पृष्ठभूमि/भरण भी है। भरण रंग महत्वपूर्ण है, क्योंकि यह पैरेंट पंक्तियों के लिए भरण स्वरूपण को "पूर्ववत" करता है यदि वे स्थानांतरित हो जाते हैं।

lowest formatting rule

धराशायी रेखाओं वाले अन्य दो नियमों के लिए मुख्य परिवर्तन यह है कि प्रत्येक नियम किस स्तंभ पर लागू होता है और किस पक्ष में डैश के बजाय एक ठोस सीमा होती है। आप दूसरी तस्वीर से देख सकते हैं कि सही सॉलिड-बॉर्डर वाला नियम सबसे दाएँ-सबसे टेबल कॉलम पर लागू होता है, और यह कि बाएँ सॉलिड-बॉर्डर वाला नियम सबसे बाएँ-सबसे टेबल कॉलम पर लागू होता है।

इन दोनों का सूत्र पूर्व नियम में प्रयुक्त समीकरण के समान है: =NOT(AND(ISBLANK($A1),ISBLANK($B1),ISBLANK($C1)))। साथ ही पहले के नियम की तरह, इन नियमों में सफेद भरण होता है।


अगले नियम के लिए (ऊपर से दूसरा), समीकरण है: =AND(NOT(AND(ISBLANK($A1),ISBLANK($B1),ISBLANK($C1))),AND(ISBLANK($A2),ISBLANK($B2),ISBLANK($C2))) और फ़ॉर्मेटिंग सेल के नीचे एक ठोस बॉर्डर है। इस नियम में कोई भी रंग नहीं है।

formatting rule for second from the top

अंतिम नियम के लिए (सबसे ऊपर वाला एक) समीकरण काफी सरल है: =NOT(ISBLANK($B1))

फ़ॉर्मेटिंग सेल के ऊपर और नीचे एक ठोस बॉर्डर है। भरण रंग वह रंग है जो आप मूल पंक्तियों के लिए चाहते हैं।

formatting rule for top condition

1
Mistella 23 अगस्त 2018, 16:41
वाह धन्यवाद, यह वास्तव में वास्तव में मददगार था! अंतिम प्रश्न, आपके द्वारा कहे गए प्रारूप वाले सभी कक्षों के बाहर एक मोटी सीमा बनाने के लिए?
 – 
MTT
23 अगस्त 2018, 19:11
क्षमा करें, मुझे यकीन नहीं है कि मैं समझ रहा हूँ कि आप क्या पूछ रहे हैं। जिस तरह से सशर्त स्वरूपण लागू किया जाता है, वह सेल दर सेल है। इसलिए किसी भी सीमा के साथ तीन अलग-अलग नियम हैं: एक बाईं ओर की सीमा के साथ, एक सीमा के साथ दाईं ओर, और दूसरा नीचे की सीमा के साथ।
 – 
Mistella
23 अगस्त 2018, 22:17

यदि आपके माता-पिता कॉलम बी में हैं, कॉलम सी में पुत्र हैं और कॉलम ई से I तक आपकी तालिका है, तो निम्न कोड तालिका पंक्तियों पर ग्रे रंग लागू करेगा और सूची बढ़ने पर बाहरी सीमा को भी हटा देगा और जोड़ देगा।

(एक अलग नोट पर, क्या इसके बजाय बेटे को बच्चा नहीं होना चाहिए?)

Sub foo()
Dim ws As Worksheet: Set ws = Sheet1
'declare and set the worksheet you are working with, amend as required
LastRow = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
'get the last row with data on column C, where the Son/Child is

For i = 3 To LastRow
'loop through row 3 to last to colour in grey the Parent rows
    If ws.Cells(i, "B").Value <> "" Then
        ws.Range("E" & i & ":I" & i).Interior.ColorIndex = 15
    Else
        ws.Range("E" & i & ":I" & i).Interior.Color = xlNone
        'if not a parent row, then remove color from row
    End If
Next i

    With ws.Range("E1:I" & LastRow)
        .Borders(xlDiagonalDown).LineStyle = xlNone
        .Borders(xlDiagonalUp).LineStyle = xlNone
        .Borders(xlEdgeLeft).LineStyle = xlNone
        .Borders(xlEdgeTop).LineStyle = xlNone
        .Borders(xlEdgeBottom).LineStyle = xlNone
        .Borders(xlEdgeRight).LineStyle = xlNone
        .Borders(xlInsideVertical).LineStyle = xlNone
        .Borders(xlInsideHorizontal).LineStyle = xlNone
        .Borders(xlDiagonalDown).LineStyle = xlNone
        .Borders(xlDiagonalUp).LineStyle = xlNone
    End With
    'above remove outside border from your table
    'below re-apply the border to your table
    With ws.Range("E1:I" & LastRow).Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With ws.Range("E1:I" & LastRow).Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With ws.Range("E1:I" & LastRow).Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With ws.Range("E1:I" & LastRow).Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    ws.Range("E1:I" & LastRow).Borders(xlInsideVertical).LineStyle = xlNone
    ws.Range("E1:I" & LastRow).Borders(xlInsideHorizontal).LineStyle = xlNone
End Sub
-1
Xabier 23 अगस्त 2018, 13:50