Excel प्रत्येक nth कॉलम में प्रत्येक nth पंक्ति को ट्रांसपोज़ कर रहा है


0

कुछ समय के लिए यह पता लगाने की कोशिश कर रहा था और मेरे द्वारा किए गए हर समाधान में मैं जो कोशिश कर रहा था, उसके लिए बहुत सफल नहीं रहा।

मूल रूप से मैं जो करने की कोशिश कर रहा हूं, वह प्रत्येक दूसरी पंक्ति को एक स्प्रैडशीट में ले जाना है जो 3 से 80 कॉलम हो सकती है, और जहां वे पहले थे, उन्हें नए कॉलम में स्थानांतरित कर दें, जबकि अब खाली पंक्तियों को हटा दें।

मैं इसे बनाना चाहता हूं:

Before

इस मामले में:

After

मैंने काम करने में कुछ चीजें हासिल करने में कामयाबी हासिल की है, जैसे कि हर दूसरी पंक्ति को कॉपी करना, और कॉलम सम्मिलित करना, लेकिन लगता है कि जो हिस्सा मुझे लुप्त हो रहा है वह रंगीन कॉलम को भी कॉपी कर रहा है। और जैसा कि मैंने उल्लेख किया है, स्प्रेडशीट के किसी भी आकार से इसे स्केल करना भी ऐसा भाग है जो मुझे सबसे अधिक मिलता है।

कोई अच्छा विचार?


1
आप एक प्रदर्शन नहीं कर रहे हैं। आप डेटा को पिछली पंक्ति में ले जा रहे हैं। यदि आप अपने कोड का एक उदाहरण प्रदान कर सकते हैं, तो हम आपके द्वारा किए जाने वाले परिवर्तनों पर संकेत प्रदान कर सकते हैं।
OldUgly

जवाबों:


0

रंगों (और अन्य फ़ॉन्ट विशेषताओं) को प्राप्त करने का सबसे आसान तरीका ए है Copy प्रक्रिया। यदि यह बहुत धीमा है, तो हम अन्य विकल्पों की जांच कर सकते हैं।

मै सुझाव दूंगा

  • मूल डेटा को नए वर्कशीट में कॉपी करें (ताकि अपने मूल डेटा को संरक्षित करें)
  • अंतिम निश्चित कॉलम निर्धारित करें - आपके नमूने में यह लेबल वाला कॉलम है कमजोर पड़ने:
  • अंतिम निश्चित कॉलम +1 के बाद, अंतिम वास्तविक कॉलम में हर दूसरे कॉलम में एक नया कॉलम डालें
  • प्रत्येक डेटा की दूसरी पंक्ति में और दाईं ओर एक सेल में (अब खाली कॉलम में) जानकारी कॉपी करें।
  • कॉलम A में रिक्त सभी पंक्तियों को हटा दें

Option Explicit
Sub Interleave2()
    Dim wsSrc As Worksheet, wsRes As Worksheet
    Dim rSrc As Range, rRes As Range
    Dim LastRow As Long, LastCol As Long
    Dim LastFixedColumn As Long
    Dim I As Long, J As Long, K As Long, L As Long

Set wsSrc = Worksheets("sheet1")
Set wsRes = Worksheets("sheet2")

With wsSrc
    LastRow = .Cells.Find(what:="*", after:=.Cells(1, 1), _
             LookIn:=xlFormulas, searchorder:=xlByRows, _
             searchdirection:=xlPrevious).Row

    LastCol = .Cells.Find(what:="*", after:=.Cells(1, 1), _
             LookIn:=xlFormulas, searchorder:=xlByColumns, _
             searchdirection:=xlPrevious).Column

    Set rSrc = .Range(.Cells(1, 1), .Cells(LastRow, LastCol))
End With

LastFixedColumn = rSrc.Find(what:="Dilution:", after:=rSrc.Cells(1)).Column

Application.ScreenUpdating = False

wsRes.Cells.Clear
rSrc.Copy wsRes.Cells(1, 1)

For I = LastCol To LastFixedColumn + 2 Step -1
    Cells(1, I).EntireColumn.Insert shift:=xlToRight
Next I

With wsRes
    LastRow = .Cells.Find(what:="*", after:=.Cells(1, 1), _
             LookIn:=xlFormulas, searchorder:=xlByRows, _
             searchdirection:=xlPrevious).Row

    LastCol = .Cells.Find(what:="*", after:=.Cells(1, 1), _
             LookIn:=xlFormulas, searchorder:=xlByColumns, _
             searchdirection:=xlPrevious).Column

    Set rRes = .Range(.Cells(1, 1), .Cells(LastRow, LastCol))
End With

For I = 3 To rRes.Rows.Count Step 2
    For J = LastFixedColumn + 1 To rRes.Columns.Count Step 2
        rRes(I, J).Copy rRes(I - 1, J + 1)
    Next J
Next I

With rRes
    .Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
    With .EntireColumn
        .ColumnWidth = 255
        .AutoFit
    End With
    .EntireRow.AutoFit
End With

Application.ScreenUpdating = True
End Sub


यह चाल है! उस पहली टिप्पणी के बाद मैंने इस दिशा में जाना शुरू किया, इसलिए यह देखना अच्छा है कि मैं सही वर्कफ़्लो का पता लगाने में बेहतर हो रहा हूं।
Christopher A.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.