don't use heap for elements in ScRangeList

no need to store small objects like this out of line.

Also
 - add move constructor and move assignment operator
 - drop Assign method since it now has the same
   signature as push_back

Change-Id: I9a8647d3a11f24166a83d399a358a2bce3b2cb79
Reviewed-on: https://gerrit.libreoffice.org/50899
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Eike Rathke <erack@redhat.com>
diff --git a/sc/inc/address.hxx b/sc/inc/address.hxx
index a3c7040..ddc8546 100644
--- a/sc/inc/address.hxx
+++ b/sc/inc/address.hxx
@@ -480,7 +480,7 @@ inline bool ValidAddress( const ScAddress& rAddress )
}

//  ScRange
class SAL_WARN_UNUSED ScRange
class SAL_WARN_UNUSED ScRange final
{
public:
    ScAddress aStart;
diff --git a/sc/inc/rangelst.hxx b/sc/inc/rangelst.hxx
index 4d9fe27..d78c705 100644
--- a/sc/inc/rangelst.hxx
+++ b/sc/inc/rangelst.hxx
@@ -28,20 +28,22 @@

class ScDocument;

class SC_DLLPUBLIC ScRangeList : public SvRefBase

class SAL_WARN_UNUSED SC_DLLPUBLIC ScRangeList final : public SvRefBase
{
public:
    ScRangeList();
    ScRangeList( const ScRangeList& rList );
    ScRangeList( const ScRangeList&& rList );
    ScRangeList( const ScRange& rRange );
    virtual ~ScRangeList() override;

    ScRangeList& operator=(const ScRangeList& rList);
    void Append( const ScRange& rRange );
    ScRangeList& operator=(ScRangeList&& rList);

    ScRefFlags Parse( const OUString&, const ScDocument*,
                      formula::FormulaGrammar::AddressConvention eConv = formula::FormulaGrammar::CONV_OOO,
                      SCTAB nDefaultTab = 0, sal_Unicode cDelimiter = 0 );
    ScRefFlags      Parse( const OUString&, const ScDocument*,
                           formula::FormulaGrammar::AddressConvention eConv = formula::FormulaGrammar::CONV_OOO,
                           SCTAB nDefaultTab = 0, sal_Unicode cDelimiter = 0 );

    void            Format( OUString&, ScRefFlags nFlags, ScDocument*,
                            formula::FormulaGrammar::AddressConvention eConv = formula::FormulaGrammar::CONV_OOO,
@@ -56,8 +58,8 @@ public:
                                     SCTAB nDz
                                   );

    void InsertRow( SCTAB nTab, SCCOL nColStart, SCCOL nColEnd, SCROW nRowPos, SCSIZE nSize );
    void InsertCol( SCTAB nTab, SCROW nRowStart, SCROW nRowEnd, SCCOL nColPos, SCSIZE nSize );
    void            InsertRow( SCTAB nTab, SCCOL nColStart, SCCOL nColEnd, SCROW nRowPos, SCSIZE nSize );
    void            InsertCol( SCTAB nTab, SCROW nRowStart, SCROW nRowEnd, SCCOL nColPos, SCSIZE nSize );

    /** For now this method assumes that nTab1 == nTab2
     * The algorithm will be much more complicated if nTab1 != nTab2
@@ -81,23 +83,23 @@ public:

    ScRange         Combine() const;

    bool            empty() const;
    size_t          size() const;
    ScRange*        operator[](size_t idx);
    const ScRange*  operator[](size_t idx) const;
    ScRange*        front();
    const ScRange*  front() const;
    ScRange*        back();
    const ScRange*  back() const;
    void            push_back(ScRange* p);
    bool            empty() const { return maRanges.empty(); }
    size_t          size() const { return maRanges.size(); }
    ScRange&        operator[](size_t idx) { return maRanges[idx]; }
    const ScRange&  operator[](size_t idx) const { return maRanges[idx]; }
    ScRange&        front() { return maRanges.front(); }
    const ScRange&  front() const { return maRanges.front(); }
    ScRange&        back() { return maRanges.back(); }
    const ScRange&  back() const { return maRanges.back(); }
    void            push_back(const ScRange & rRange);

    void swap( ScRangeList& r );

private:
    ::std::vector<ScRange*> maRanges;
    ::std::vector<ScRange> maRanges;
    SCROW           mnMaxRowUsed;
    typedef std::vector<ScRange*>::iterator iterator;
    typedef std::vector<ScRange*>::const_iterator const_iterator;
    typedef std::vector<ScRange>::iterator iterator;
    typedef std::vector<ScRange>::const_iterator const_iterator;
};
typedef tools::SvRef<ScRangeList> ScRangeListRef;

@@ -110,7 +112,7 @@ inline std::basic_ostream<charT, traits> & operator <<(std::basic_ostream<charT,
    {
        if (i > 0)
            stream << ",";
        stream << *(rRangeList[i]);
        stream << rRangeList[i];
    }
    stream << ")";

diff --git a/sc/qa/unit/helper/qahelper.cxx b/sc/qa/unit/helper/qahelper.cxx
index f99d23df..3f7c931 100644
--- a/sc/qa/unit/helper/qahelper.cxx
+++ b/sc/qa/unit/helper/qahelper.cxx
@@ -53,7 +53,7 @@ std::ostream& operator<<(std::ostream& rStrm, const ScRangeList& rList)
{
    rStrm << "ScRangeList: \n";
    for(size_t i = 0; i < rList.size(); ++i)
        rStrm << *rList[i];
        rStrm << rList[i];
    return rStrm;
}

@@ -382,14 +382,14 @@ ScRangeList getChartRanges(ScDocument& rDoc, const SdrOle2Obj& rChartObj)
        ScRefFlags nRes = aRange.Parse(aRangeReps[i], &rDoc, rDoc.GetAddressConvention());
        if (nRes & ScRefFlags::VALID)
            // This is a range address.
            aRanges.Append(aRange);
            aRanges.push_back(aRange);
        else
        {
            // Parse it as a single cell address.
            ScAddress aAddr;
            nRes = aAddr.Parse(aRangeReps[i], &rDoc, rDoc.GetAddressConvention());
            CPPUNIT_ASSERT_MESSAGE("Failed to parse a range representation.", (nRes & ScRefFlags::VALID));
            aRanges.Append(aAddr);
            aRanges.push_back(aAddr);
        }
    }

diff --git a/sc/qa/unit/mark_test.cxx b/sc/qa/unit/mark_test.cxx
index a083d48..0c393e9 100644
--- a/sc/qa/unit/mark_test.cxx
+++ b/sc/qa/unit/mark_test.cxx
@@ -120,10 +120,10 @@ static void lcl_GetSortedRanges( const ScRangeList& rRangeList, ScRangeList& rRa
    size_t nSize = rRangeList.size();
    aRanges.reserve( nSize );
    for ( size_t nIdx = 0; nIdx < nSize; ++nIdx )
        aRanges.push_back( *rRangeList[nIdx] );
        aRanges.push_back( rRangeList[nIdx] );
    std::sort( aRanges.begin(), aRanges.end() );
    for ( size_t nIdx = 0; nIdx < nSize; ++nIdx )
        rRangeListOut.Append( aRanges[nIdx] );
        rRangeListOut.push_back( aRanges[nIdx] );
}

void Test::testSimpleMark( const ScRange& rRange, const ScRange& rSelectionCover,
@@ -544,25 +544,25 @@ void Test::testMultiMark_FourRanges()
    aData.aMarks.push_back( aSingle4 );

    aData.aSelectionCover = ScRange( 0, 0, 0, MAXCOL, MAXROW, 0 );
    aData.aLeftEnvelope.Append( ScRange( 9, 5, 0, 9, 10, 0 ) );
    aData.aLeftEnvelope.Append( ScRange( 24, 7, 0, 24, 15, 0 ) );
    aData.aLeftEnvelope.Append( ScRange( 34, 0, 0, 34, 19, 0 ) );
    aData.aLeftEnvelope.Append( ScRange( 34, 21, 0, 34, MAXROW, 0 ) );
    aData.aLeftEnvelope.push_back( ScRange( 9, 5, 0, 9, 10, 0 ) );
    aData.aLeftEnvelope.push_back( ScRange( 24, 7, 0, 24, 15, 0 ) );
    aData.aLeftEnvelope.push_back( ScRange( 34, 0, 0, 34, 19, 0 ) );
    aData.aLeftEnvelope.push_back( ScRange( 34, 21, 0, 34, MAXROW, 0 ) );

    aData.aRightEnvelope.Append( ScRange( 21, 5, 0, 21, 10, 0 ) );
    aData.aRightEnvelope.Append( ScRange( 31, 7, 0, 31, 15, 0 ) );
    aData.aRightEnvelope.Append( ScRange( 36, 0, 0, 36, 19, 0 ) );
    aData.aRightEnvelope.Append( ScRange( 36, 21, 0, 36, MAXROW, 0 ) );
    aData.aRightEnvelope.push_back( ScRange( 21, 5, 0, 21, 10, 0 ) );
    aData.aRightEnvelope.push_back( ScRange( 31, 7, 0, 31, 15, 0 ) );
    aData.aRightEnvelope.push_back( ScRange( 36, 0, 0, 36, 19, 0 ) );
    aData.aRightEnvelope.push_back( ScRange( 36, 21, 0, 36, MAXROW, 0 ) );

    aData.aTopEnvelope.Append( ScRange( 10, 4, 0, 20, 4, 0 ) );
    aData.aTopEnvelope.Append( ScRange( 25, 6, 0, 30, 6, 0 ) );
    aData.aTopEnvelope.Append( ScRange( 0, 19, 0, 34, 19, 0 ) );
    aData.aTopEnvelope.Append( ScRange( 36, 19, 0, MAXCOL, 19, 0 ) );
    aData.aTopEnvelope.push_back( ScRange( 10, 4, 0, 20, 4, 0 ) );
    aData.aTopEnvelope.push_back( ScRange( 25, 6, 0, 30, 6, 0 ) );
    aData.aTopEnvelope.push_back( ScRange( 0, 19, 0, 34, 19, 0 ) );
    aData.aTopEnvelope.push_back( ScRange( 36, 19, 0, MAXCOL, 19, 0 ) );

    aData.aBottomEnvelope.Append( ScRange( 10, 11, 0, 20, 11, 0 ) );
    aData.aBottomEnvelope.Append( ScRange( 25, 16, 0, 30, 16, 0 ) );
    aData.aBottomEnvelope.Append( ScRange( 0, 21, 0, 34, 21, 0 ) );
    aData.aBottomEnvelope.Append( ScRange( 36, 21, 0, MAXCOL, 21, 0 ) );
    aData.aBottomEnvelope.push_back( ScRange( 10, 11, 0, 20, 11, 0 ) );
    aData.aBottomEnvelope.push_back( ScRange( 25, 16, 0, 30, 16, 0 ) );
    aData.aBottomEnvelope.push_back( ScRange( 0, 21, 0, 34, 21, 0 ) );
    aData.aBottomEnvelope.push_back( ScRange( 36, 21, 0, MAXCOL, 21, 0 ) );

    MarkArrayTestData aMarkArrayTestData1;
    aMarkArrayTestData1.nCol = 5;
@@ -744,29 +744,29 @@ void Test::testMultiMark_NegativeMarking()
    aData.aMarks.push_back( aSingle5 );

    aData.aSelectionCover = ScRange( 0, 4, 0, MAXCOL, 21, 0 );
    aData.aLeftEnvelope.Append( ScRange( 9, 8, 0, 9, 11, 0 ) );
    aData.aLeftEnvelope.Append( ScRange( 9, 13, 0, 9, 20, 0 ) );
    aData.aLeftEnvelope.Append( ScRange( 18, 10, 0, 18, 14, 0 ) );
    aData.aLeftEnvelope.Append( ScRange( 20, 5, 0, 20, 5, 0 ) );
    aData.aLeftEnvelope.push_back( ScRange( 9, 8, 0, 9, 11, 0 ) );
    aData.aLeftEnvelope.push_back( ScRange( 9, 13, 0, 9, 20, 0 ) );
    aData.aLeftEnvelope.push_back( ScRange( 18, 10, 0, 18, 14, 0 ) );
    aData.aLeftEnvelope.push_back( ScRange( 20, 5, 0, 20, 5, 0 ) );

    aData.aRightEnvelope.Append( ScRange( 17, 5, 0, 17, 5, 0 ) );
    aData.aRightEnvelope.Append( ScRange( 15, 10, 0, 15, 14, 0 ) );
    aData.aRightEnvelope.Append( ScRange( 26, 8, 0, 26, 11, 0 ) );
    aData.aRightEnvelope.Append( ScRange( 26, 13, 0, 26, 20, 0 ) );
    aData.aRightEnvelope.push_back( ScRange( 17, 5, 0, 17, 5, 0 ) );
    aData.aRightEnvelope.push_back( ScRange( 15, 10, 0, 15, 14, 0 ) );
    aData.aRightEnvelope.push_back( ScRange( 26, 8, 0, 26, 11, 0 ) );
    aData.aRightEnvelope.push_back( ScRange( 26, 13, 0, 26, 20, 0 ) );

    aData.aTopEnvelope.Append( ScRange( 0, 4, 0, 16, 4, 0 ) );
    aData.aTopEnvelope.Append( ScRange( 21, 4, 0, MAXCOL, 4, 0 ) );
    aData.aTopEnvelope.Append( ScRange( 10, 7, 0, 25, 7, 0 ) );
    aData.aTopEnvelope.Append( ScRange( 0, 11, 0, 9, 11, 0 ) );
    aData.aTopEnvelope.Append( ScRange( 26, 11, 0, MAXCOL, 11, 0 ) );
    aData.aTopEnvelope.Append( ScRange( 15, 14, 0, 18, 14, 0 ) );
    aData.aTopEnvelope.push_back( ScRange( 0, 4, 0, 16, 4, 0 ) );
    aData.aTopEnvelope.push_back( ScRange( 21, 4, 0, MAXCOL, 4, 0 ) );
    aData.aTopEnvelope.push_back( ScRange( 10, 7, 0, 25, 7, 0 ) );
    aData.aTopEnvelope.push_back( ScRange( 0, 11, 0, 9, 11, 0 ) );
    aData.aTopEnvelope.push_back( ScRange( 26, 11, 0, MAXCOL, 11, 0 ) );
    aData.aTopEnvelope.push_back( ScRange( 15, 14, 0, 18, 14, 0 ) );

    aData.aBottomEnvelope.Append( ScRange( 0, 6, 0, 16, 6, 0 ) );
    aData.aBottomEnvelope.Append( ScRange( 21, 6, 0, MAXCOL, 6, 0 ) );
    aData.aBottomEnvelope.Append( ScRange( 15, 10, 0, 18, 10, 0 ) );
    aData.aBottomEnvelope.Append( ScRange( 0, 13, 0, 9, 13, 0 ) );
    aData.aBottomEnvelope.Append( ScRange( 26, 13, 0, MAXCOL, 13, 0 ) );
    aData.aBottomEnvelope.Append( ScRange( 10, 21, 0, 25, 21, 0 ) );
    aData.aBottomEnvelope.push_back( ScRange( 0, 6, 0, 16, 6, 0 ) );
    aData.aBottomEnvelope.push_back( ScRange( 21, 6, 0, MAXCOL, 6, 0 ) );
    aData.aBottomEnvelope.push_back( ScRange( 15, 10, 0, 18, 10, 0 ) );
    aData.aBottomEnvelope.push_back( ScRange( 0, 13, 0, 9, 13, 0 ) );
    aData.aBottomEnvelope.push_back( ScRange( 26, 13, 0, MAXCOL, 13, 0 ) );
    aData.aBottomEnvelope.push_back( ScRange( 10, 21, 0, 25, 21, 0 ) );

    aData.aColsWithOneMark.emplace_back( 19, 8, 0, 0, 20, 0 );
    aData.aColsWithOneMark.emplace_back( 20, 8, 0, 0, 20, 0 );
diff --git a/sc/qa/unit/rangelst_test.cxx b/sc/qa/unit/rangelst_test.cxx
index 1e0236a..0858f7a 100644
--- a/sc/qa/unit/rangelst_test.cxx
+++ b/sc/qa/unit/rangelst_test.cxx
@@ -410,24 +410,24 @@ void Test::testDeleteArea_0Ranges()
void Test::testJoin_Case1()
{
    ScRangeList aList;
    aList.push_back(new ScRange(1,1,0,3,3,0));
    aList.push_back(ScRange(1,1,0,3,3,0));
    aList.Join(ScRange(4,1,0,6,3,0));

    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
    CPPUNIT_ASSERT_EQUAL( ScRange(1,1,0,6,3,0), *aList[0]);
    CPPUNIT_ASSERT_EQUAL( ScRange(1,1,0,6,3,0), aList[0]);
}

void Test::testJoin_Case2()
{
    ScRangeList aList;
    aList.push_back(new ScRange(1,1,0,3,3,0));
    aList.push_back(new ScRange(4,1,0,6,3,0));
    aList.push_back(new ScRange(7,1,0,9,3,0));
    aList.push_back(ScRange(1,1,0,3,3,0));
    aList.push_back(ScRange(4,1,0,6,3,0));
    aList.push_back(ScRange(7,1,0,9,3,0));

    aList.Join(*aList[2], true);
    aList.Join(aList[2], true);

    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
    CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,9,3,0), *aList[0]);
    CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,9,3,0), aList[0]);
}

void Test::testJoin_Case3()
@@ -438,7 +438,7 @@ void Test::testJoin_Case3()

    // The second one should have been swallowed by the first one
    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
    CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,6,6,0), *aList[0]);
    CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,6,6,0), aList[0]);

    // Add a disjoint one
    aList.Join(ScRange(8,8,0,9,9,0));
@@ -446,9 +446,9 @@ void Test::testJoin_Case3()
    // Should be two ones now
    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aList.size());
    // The first one should still be as is
    CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,6,6,0), *aList[0]);
    CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,6,6,0), aList[0]);
    // Ditto for the second one
    CPPUNIT_ASSERT_EQUAL(ScRange(8,8,0,9,9,0), *aList[1]);
    CPPUNIT_ASSERT_EQUAL(ScRange(8,8,0,9,9,0), aList[1]);
}

void Test::testJoin_Case4()
@@ -460,14 +460,14 @@ void Test::testJoin_Case4()

    // The one range in the list should have been extended
    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
    CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,2,8,0), *aList[0]);
    CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,2,8,0), aList[0]);

    // Join a range that overlaps it and extends it horizontally
    aList.Join(ScRange(2,1,0,4,8,0));

    // Again, should have just been extended
    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
    CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,4,8,0), *aList[0]);
    CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,4,8,0), aList[0]);

    // And then the same but on top / to the left of existing range
    ScRangeList aList2;
@@ -475,12 +475,12 @@ void Test::testJoin_Case4()
    aList2.Join(ScRange(4,1,0,8,6,0));

    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList2.size());
    CPPUNIT_ASSERT_EQUAL(ScRange(4,1,0,8,8,0), *aList2[0]);
    CPPUNIT_ASSERT_EQUAL(ScRange(4,1,0,8,8,0), aList2[0]);

    aList2.Join(ScRange(1,1,0,6,8,0));

    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList2.size());
    CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,8,8,0), *aList2[0]);
    CPPUNIT_ASSERT_EQUAL(ScRange(1,1,0,8,8,0), aList2[0]);
}

void Test::testJoin_Case5()
@@ -491,14 +491,14 @@ void Test::testJoin_Case5()

    // Nothing special so far, two disjoint ranges
    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), aList.size());
    CPPUNIT_ASSERT_EQUAL(ScRange(0,0,0,4,4,0), *aList[0]);
    CPPUNIT_ASSERT_EQUAL(ScRange(8,0,0,10,4,0), *aList[1]);
    CPPUNIT_ASSERT_EQUAL(ScRange(0,0,0,4,4,0), aList[0]);
    CPPUNIT_ASSERT_EQUAL(ScRange(8,0,0,10,4,0), aList[1]);

    // This should join the two ranges into one
    aList.Join(ScRange(5,0,0,9,4,0));

    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), aList.size());
    CPPUNIT_ASSERT_EQUAL(ScRange(0,0,0,10,4,0), *aList[0]);
    CPPUNIT_ASSERT_EQUAL(ScRange(0,0,0,10,4,0), aList[0]);
}

void Test::testUpdateReference_DeleteRow()
diff --git a/sc/qa/unit/ucalc.cxx b/sc/qa/unit/ucalc.cxx
index d2544ab..2b03df5 100644
--- a/sc/qa/unit/ucalc.cxx
+++ b/sc/qa/unit/ucalc.cxx
@@ -355,9 +355,9 @@ void Test::testRangeList()
    m_pDoc->InsertTab(0, "foo");

    ScRangeList aRL;
    aRL.Append(ScRange(1,1,0,3,10,0));
    aRL.push_back(ScRange(1,1,0,3,10,0));
    CPPUNIT_ASSERT_EQUAL_MESSAGE("List should have one range.", size_t(1), aRL.size());
    const ScRange* p = aRL[0];
    const ScRange* p = &aRL[0];
    CPPUNIT_ASSERT_MESSAGE("Failed to get the range object.", p);
    CPPUNIT_ASSERT_MESSAGE("Wrong range.", p->aStart == ScAddress(1,1,0) && p->aEnd == ScAddress(3,10,0));

@@ -582,8 +582,8 @@ void Test::testSelectionFunction()

    // Select B2:B8 & D2:D8 disjoint region.
    ScRangeList aRanges;
    aRanges.Append(ScRange(1,1,0,1,7,0)); // B2:B8
    aRanges.Append(ScRange(3,1,0,3,7,0)); // D2:D8
    aRanges.push_back(ScRange(1,1,0,1,7,0)); // B2:B8
    aRanges.push_back(ScRange(3,1,0,3,7,0)); // D2:D8
    ScMarkData aMark;
    aMark.MarkFromRangeList(aRanges, true);

@@ -703,8 +703,8 @@ void Test::testSelectionFunction()

    // Mark B2 and C3 on first sheet.
    aRanges.RemoveAll();
    aRanges.Append(ScRange(1,1,0)); // B2
    aRanges.Append(ScRange(2,2,0)); // C3
    aRanges.push_back(ScRange(1,1,0)); // B2
    aRanges.push_back(ScRange(2,2,0)); // C3
    aMark.MarkFromRangeList(aRanges, true);
    // Additionally select third sheet.
    aMark.SelectTable(2, true);
@@ -3566,9 +3566,9 @@ void Test::testCopyPasteMultiRange()
    // Copy A2:B2, A4:B4, and A6:B6 to clipboard.
    ScDocument aClipDoc(SCDOCMODE_CLIP);
    ScClipParam aClipParam;
    aClipParam.maRanges.Append(ScRange(0,1,0,1,1,0)); // A2:B2
    aClipParam.maRanges.Append(ScRange(0,3,0,1,3,0)); // A4:B4
    aClipParam.maRanges.Append(ScRange(0,5,0,1,5,0)); // A6:B6
    aClipParam.maRanges.push_back(ScRange(0,1,0,1,1,0)); // A2:B2
    aClipParam.maRanges.push_back(ScRange(0,3,0,1,3,0)); // A4:B4
    aClipParam.maRanges.push_back(ScRange(0,5,0,1,5,0)); // A6:B6
    aClipParam.meDirection = ScClipParam::Row;
    m_pDoc->CopyToClip(aClipParam, &aClipDoc, &aMark, false, false);

diff --git a/sc/qa/unit/ucalc_condformat.cxx b/sc/qa/unit/ucalc_condformat.cxx
index 0e8721a..148e434 100644
--- a/sc/qa/unit/ucalc_condformat.cxx
+++ b/sc/qa/unit/ucalc_condformat.cxx
@@ -187,7 +187,7 @@ void Test::testCondFormatInsertDeleteSheets()
    // ... and its range is B2:B4.
    ScRangeList aCheckRange = pCheck->GetRange();
    CPPUNIT_ASSERT_EQUAL_MESSAGE("This should be a single range.", size_t(1), aCheckRange.size());
    const ScRange* pRange = aCheckRange[0];
    const ScRange* pRange = &aCheckRange[0];
    CPPUNIT_ASSERT(pRange);
    CPPUNIT_ASSERT_EQUAL_MESSAGE("Format should be applied to B2:B4.", ScRange(1,1,0,1,3,0), *pRange);

@@ -205,7 +205,7 @@ void Test::testCondFormatInsertDeleteSheets()
    // Make sure the range also got shifted.
    aCheckRange = pCheck->GetRange();
    CPPUNIT_ASSERT_EQUAL_MESSAGE("This should be a single range.", size_t(1), aCheckRange.size());
    pRange = aCheckRange[0];
    pRange = &aCheckRange[0];
    CPPUNIT_ASSERT(pRange);
    CPPUNIT_ASSERT_EQUAL_MESSAGE("Format should be applied to B2:B4 on the 2nd sheet after the sheet insertion.", ScRange(1,1,1,1,3,1), *pRange);

@@ -221,7 +221,7 @@ void Test::testCondFormatInsertDeleteSheets()
    // Make sure the range got shifted back.
    aCheckRange = pCheck->GetRange();
    CPPUNIT_ASSERT_EQUAL_MESSAGE("This should be a single range.", size_t(1), aCheckRange.size());
    pRange = aCheckRange[0];
    pRange = &aCheckRange[0];
    CPPUNIT_ASSERT(pRange);
    CPPUNIT_ASSERT_EQUAL_MESSAGE("Format should be applied to B2:B4 on the 1st sheet after the sheet removal.", ScRange(1,1,0,1,3,0), *pRange);

@@ -238,7 +238,7 @@ void Test::testCondFormatInsertDeleteSheets()

    aCheckRange = pCheck->GetRange();
    CPPUNIT_ASSERT_EQUAL_MESSAGE("This should be a single range.", size_t(1), aCheckRange.size());
    pRange = aCheckRange[0];
    pRange = &aCheckRange[0];
    CPPUNIT_ASSERT(pRange);
    CPPUNIT_ASSERT_EQUAL_MESSAGE("Format should be applied to B2:B4 on the 2nd sheet after the undo of the sheet removal.", ScRange(1,1,1,1,3,1), *pRange);

diff --git a/sc/source/core/data/clipparam.cxx b/sc/source/core/data/clipparam.cxx
index 51738c9..b33c499 100644
--- a/sc/source/core/data/clipparam.cxx
+++ b/sc/source/core/data/clipparam.cxx
@@ -32,7 +32,7 @@ ScClipParam::ScClipParam(const ScRange& rRange, bool bCutMode) :
    mbCutMode(bCutMode),
    mnSourceDocID(0)
{
    maRanges.Append(rRange);
    maRanges.push_back(rRange);
}

bool ScClipParam::isMultiRange() const
@@ -52,15 +52,15 @@ SCCOL ScClipParam::getPasteColSize()
            SCCOL nColSize = 0;
            for ( size_t i = 0, nListSize = maRanges.size(); i < nListSize; ++i )
            {
                ScRange* p = maRanges[ i ];
                nColSize += p->aEnd.Col() - p->aStart.Col() + 1;
                const ScRange& rRange = maRanges[ i ];
                nColSize += rRange.aEnd.Col() - rRange.aStart.Col() + 1;
            }
            return nColSize;
        }
        case ScClipParam::Row:
        {
            // We assume that all ranges have identical column size.
            const ScRange& rRange = *maRanges.front();
            const ScRange& rRange = maRanges.front();
            return rRange.aEnd.Col() - rRange.aStart.Col() + 1;
        }
        case ScClipParam::Unspecified:
@@ -80,7 +80,7 @@ SCROW ScClipParam::getPasteRowSize()
        case ScClipParam::Column:
        {
            // We assume that all ranges have identical row size.
            const ScRange& rRange = *maRanges.front();
            const ScRange& rRange = maRanges.front();
            return rRange.aEnd.Row() - rRange.aStart.Row() + 1;
        }
        case ScClipParam::Row:
@@ -88,8 +88,8 @@ SCROW ScClipParam::getPasteRowSize()
            SCROW nRowSize = 0;
            for ( size_t i = 0, nListSize = maRanges.size(); i < nListSize; ++i )
            {
                ScRange* p = maRanges[ i ];
                nRowSize += p->aEnd.Row() - p->aStart.Row() + 1;
                const ScRange& rRange = maRanges[ i ];
                nRowSize += rRange.aEnd.Row() - rRange.aStart.Row() + 1;
            }
            return nRowSize;
        }
@@ -123,24 +123,24 @@ void ScClipParam::transpose()
    ScRangeList aNewRanges;
    if (!maRanges.empty())
    {
        ScRange* p = maRanges.front();
        SCCOL nColOrigin = p->aStart.Col();
        SCROW nRowOrigin = p->aStart.Row();
        const ScRange & rRange1 = maRanges.front();
        SCCOL nColOrigin = rRange1.aStart.Col();
        SCROW nRowOrigin = rRange1.aStart.Row();

        for ( size_t i = 0, n = maRanges.size(); i < n; ++i )
        {
            p = maRanges[ i ];
            SCCOL nColDelta = p->aStart.Col() - nColOrigin;
            SCROW nRowDelta = p->aStart.Row() - nRowOrigin;
            const ScRange & rRange = maRanges[ i ];
            SCCOL nColDelta = rRange.aStart.Col() - nColOrigin;
            SCROW nRowDelta = rRange.aStart.Row() - nRowOrigin;
            SCCOL nCol1 = 0;
            SCCOL nCol2 = static_cast<SCCOL>(p->aEnd.Row() - p->aStart.Row());
            SCCOL nCol2 = static_cast<SCCOL>(rRange.aEnd.Row() - rRange.aStart.Row());
            SCROW nRow1 = 0;
            SCROW nRow2 = static_cast<SCROW>(p->aEnd.Col() - p->aStart.Col());
            SCROW nRow2 = static_cast<SCROW>(rRange.aEnd.Col() - rRange.aStart.Col());
            nCol1 += static_cast<SCCOL>(nRowDelta);
            nCol2 += static_cast<SCCOL>(nRowDelta);
            nRow1 += static_cast<SCROW>(nColDelta);
            nRow2 += static_cast<SCROW>(nColDelta);
            aNewRanges.push_back( new ScRange(nCol1, nRow1, p->aStart.Tab(), nCol2, nRow2, p->aStart.Tab() ) );
            aNewRanges.push_back( ScRange(nCol1, nRow1, rRange.aStart.Tab(), nCol2, nRow2, rRange.aStart.Tab() ) );
        }
    }
    maRanges = aNewRanges;
diff --git a/sc/source/core/data/colorscale.cxx b/sc/source/core/data/colorscale.cxx
index a07f3ac..8826fad 100644
--- a/sc/source/core/data/colorscale.cxx
+++ b/sc/source/core/data/colorscale.cxx
@@ -393,13 +393,13 @@ std::vector<double>& ScColorFormat::getValues() const
        const ScRangeList& aRanges = GetRange();
        for(size_t i = 0; i < n; ++i)
        {
            const ScRange* pRange = aRanges[i];
            SCTAB nTab = pRange->aStart.Tab();
            const ScRange & rRange = aRanges[i];
            SCTAB nTab = rRange.aStart.Tab();

            SCCOL nColStart = pRange->aStart.Col();
            SCROW nRowStart = pRange->aStart.Row();
            SCCOL nColEnd = pRange->aEnd.Col();
            SCROW nRowEnd = pRange->aEnd.Row();
            SCCOL nColStart = rRange.aStart.Col();
            SCROW nRowStart = rRange.aStart.Row();
            SCCOL nColEnd = rRange.aEnd.Col();
            SCROW nRowEnd = rRange.aEnd.Row();

            if(nRowEnd == MAXROW)
            {
diff --git a/sc/source/core/data/column.cxx b/sc/source/core/data/column.cxx
index 412d623..2dad0de 100644
--- a/sc/source/core/data/column.cxx
+++ b/sc/source/core/data/column.cxx
@@ -207,7 +207,7 @@ bool ScColumn::HasSelectionMatrixFragment(const ScMarkData& rMark) const
    ScRangeList aRanges = rMark.GetMarkedRanges();
    for (size_t i = 0, n = aRanges.size(); i < n; ++i)
    {
        const ScRange& r = *aRanges[i];
        const ScRange& r = aRanges[i];
        if (nTab < r.aStart.Tab() || r.aEnd.Tab() < nTab)
            continue;

diff --git a/sc/source/core/data/columnspanset.cxx b/sc/source/core/data/columnspanset.cxx
index a3f338a..d7d7718 100644
--- a/sc/source/core/data/columnspanset.cxx
+++ b/sc/source/core/data/columnspanset.cxx
@@ -337,15 +337,15 @@ void SingleColumnSpanSet::scan(const ScRangeList& rRanges, SCTAB nTab, SCCOL nCo
{
    for (size_t i = 0, n = rRanges.size(); i < n; ++i)
    {
        const ScRange* p = rRanges[i];
        if (nTab < p->aStart.Tab() || p->aEnd.Tab() < nTab)
        const ScRange & rRange = rRanges[i];
        if (nTab < rRange.aStart.Tab() || rRange.aEnd.Tab() < nTab)
            continue;

        if (nCol < p->aStart.Col() || p->aEnd.Col() < nCol)
        if (nCol < rRange.aStart.Col() || rRange.aEnd.Col() < nCol)
            // This column is not in this range. Skip it.
            continue;

        maSpans.insert_back(p->aStart.Row(), p->aEnd.Row()+1, true);
        maSpans.insert_back(rRange.aStart.Row(), rRange.aEnd.Row()+1, true);
    }
}

diff --git a/sc/source/core/data/conditio.cxx b/sc/source/core/data/conditio.cxx
index c09e5e9..c07d767 100644
--- a/sc/source/core/data/conditio.cxx
+++ b/sc/source/core/data/conditio.cxx
@@ -146,11 +146,8 @@ void start_listen_to(ScFormulaListener& rListener, const ScTokenArray* pTokens, 
    size_t n = rRangeList.size();
    for (size_t i = 0; i < n; ++i)
    {
        const ScRange* pRange = rRangeList[i];
        if (!pRange)
            continue;

        rListener.addTokenArray(pTokens, *pRange);
        const ScRange & rRange = rRangeList[i];
        rListener.addTokenArray(pTokens, rRange);
    }
}

@@ -784,12 +781,12 @@ void ScConditionEntry::FillCache() const
        size_t nListCount = rRanges.size();
        for( size_t i = 0; i < nListCount; i++ )
        {
            const ScRange *aRange = rRanges[i];
            SCROW nRow = aRange->aEnd.Row();
            SCCOL nCol = aRange->aEnd.Col();
            SCCOL nColStart = aRange->aStart.Col();
            SCROW nRowStart = aRange->aStart.Row();
            SCTAB nTab = aRange->aStart.Tab();
            const ScRange & rRange = rRanges[i];
            SCROW nRow = rRange.aEnd.Row();
            SCCOL nCol = rRange.aEnd.Col();
            SCCOL nColStart = rRange.aStart.Col();
            SCROW nRowStart = rRange.aStart.Row();
            SCTAB nTab = rRange.aStart.Tab();

            // temporary fix to workaround slow duplicate entry
            // conditions, prevent to use a whole row
@@ -1899,15 +1896,15 @@ void ScConditionalFormat::UpdateInsertTab( sc::RefUpdateInsertTabContext& rCxt )
    for (size_t i = 0, n = maRanges.size(); i < n; ++i)
    {
        // We assume that the start and end sheet indices are equal.
        ScRange* pRange = maRanges[i];
        SCTAB nTab = pRange->aStart.Tab();
        ScRange & rRange = maRanges[i];
        SCTAB nTab = rRange.aStart.Tab();

        if (nTab < rCxt.mnInsertPos)
            // Unaffected.
            continue;

        pRange->aStart.IncTab(rCxt.mnSheets);
        pRange->aEnd.IncTab(rCxt.mnSheets);
        rRange.aStart.IncTab(rCxt.mnSheets);
        rRange.aEnd.IncTab(rCxt.mnSheets);
    }

    for (auto it = maEntries.cbegin(); it != maEntries.cend(); ++it)
@@ -1919,8 +1916,8 @@ void ScConditionalFormat::UpdateDeleteTab( sc::RefUpdateDeleteTabContext& rCxt )
    for (size_t i = 0, n = maRanges.size(); i < n; ++i)
    {
        // We assume that the start and end sheet indices are equal.
        ScRange* pRange = maRanges[i];
        SCTAB nTab = pRange->aStart.Tab();
        ScRange & rRange = maRanges[i];
        SCTAB nTab = rRange.aStart.Tab();

        if (nTab < rCxt.mnDeletePos)
            // Left of the deleted sheet(s).  Unaffected.
@@ -1929,14 +1926,14 @@ void ScConditionalFormat::UpdateDeleteTab( sc::RefUpdateDeleteTabContext& rCxt )
        if (nTab <= rCxt.mnDeletePos+rCxt.mnSheets-1)
        {
            // On the deleted sheet(s).
            pRange->aStart.SetTab(-1);
            pRange->aEnd.SetTab(-1);
            rRange.aStart.SetTab(-1);
            rRange.aEnd.SetTab(-1);
            continue;
        }

        // Right of the deleted sheet(s).  Adjust the sheet indices.
        pRange->aStart.IncTab(-1*rCxt.mnSheets);
        pRange->aEnd.IncTab(-1*rCxt.mnSheets);
        rRange.aStart.IncTab(-1*rCxt.mnSheets);
        rRange.aEnd.IncTab(-1*rCxt.mnSheets);
    }

    for (auto it = maEntries.cbegin(); it != maEntries.cend(); ++it)
@@ -1950,8 +1947,8 @@ void ScConditionalFormat::UpdateMoveTab( sc::RefUpdateMoveTabContext& rCxt )
    SCTAB nMaxTab = std::max<SCTAB>(rCxt.mnOldPos, rCxt.mnNewPos);
    for(size_t i = 0; i < n; ++i)
    {
        ScRange* pRange = maRanges[i];
        SCTAB nTab = pRange->aStart.Tab();
        ScRange & rRange = maRanges[i];
        SCTAB nTab = rRange.aStart.Tab();
        if(nTab < nMinTab || nTab > nMaxTab)
        {
            continue;
@@ -1959,20 +1956,20 @@ void ScConditionalFormat::UpdateMoveTab( sc::RefUpdateMoveTabContext& rCxt )

        if (nTab == rCxt.mnOldPos)
        {
            pRange->aStart.SetTab(rCxt.mnNewPos);
            pRange->aEnd.SetTab(rCxt.mnNewPos);
            rRange.aStart.SetTab(rCxt.mnNewPos);
            rRange.aEnd.SetTab(rCxt.mnNewPos);
            continue;
        }

        if (rCxt.mnNewPos < rCxt.mnOldPos)
        {
            pRange->aStart.IncTab();
            pRange->aEnd.IncTab();
            rRange.aStart.IncTab();
            rRange.aEnd.IncTab();
        }
        else
        {
            pRange->aStart.IncTab(-1);
            pRange->aEnd.IncTab(-1);
            rRange.aStart.IncTab(-1);
            rRange.aEnd.IncTab(-1);
        }
    }

@@ -1985,7 +1982,7 @@ void ScConditionalFormat::DeleteArea( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCR
    if (maRanges.empty())
        return;

    SCTAB nTab = maRanges[0]->aStart.Tab();
    SCTAB nTab = maRanges[0].aStart.Tab();
    maRanges.DeleteArea( nCol1, nRow1, nTab, nCol2, nRow2, nTab );
}

@@ -2204,8 +2201,7 @@ ScRangeList ScConditionalFormatList::GetCombinedRange() const
        const ScRangeList& rRange = itr->GetRange();
        for (size_t i = 0, n = rRange.size(); i < n; ++i)
        {
            if (rRange[i])
                aRange.Join(*rRange[i]);
            aRange.Join(rRange[i]);
        }
    }
    return aRange;
@@ -2228,7 +2224,7 @@ void ScConditionalFormatList::AddToDocument(ScDocument* pDoc) const
        if (rRange.empty())
            continue;

        SCTAB nTab = rRange.front()->aStart.Tab();
        SCTAB nTab = rRange.front().aStart.Tab();
        pDoc->AddCondFormatData(rRange, nTab, itr->GetKey());
    }
}
diff --git a/sc/source/core/data/documen3.cxx b/sc/source/core/data/documen3.cxx
index b4f300b..ff79d99 100644
--- a/sc/source/core/data/documen3.cxx
+++ b/sc/source/core/data/documen3.cxx
@@ -824,8 +824,8 @@ void ScDocument::CopyScenario( SCTAB nSrcTab, SCTAB nDestTab, bool bNewScenario 
                bool bTouched = false;
                for ( size_t nR=0, nRangeCount = aRanges.size(); nR < nRangeCount && !bTouched; nR++ )
                {
                    const ScRange* pRange = aRanges[ nR ];
                    if ( maTabs[nTab]->HasScenarioRange( *pRange ) )
                    const ScRange& rRange = aRanges[ nR ];
                    if ( maTabs[nTab]->HasScenarioRange( rRange ) )
                        bTouched = true;
                }
                if (bTouched)
@@ -1117,7 +1117,7 @@ void ScDocument::UpdateTranspose( const ScAddress& rDestPos, ScDocument* pClipDo
    ScRange aSource;
    ScClipParam& rClipParam = GetClipParam();
    if (!rClipParam.maRanges.empty())
        aSource = *rClipParam.maRanges.front();
        aSource = rClipParam.maRanges.front();
    ScAddress aDest = rDestPos;

    SCTAB nClipTab = 0;
diff --git a/sc/source/core/data/documen5.cxx b/sc/source/core/data/documen5.cxx
index f92b740..bb46fe8 100644
--- a/sc/source/core/data/documen5.cxx
+++ b/sc/source/core/data/documen5.cxx
@@ -137,8 +137,7 @@ void ScDocument::UpdateChartArea( const OUString& rChartName,
            const ScRange& rNewArea, bool bColHeaders, bool bRowHeaders,
            bool bAdd )
{
    ScRangeListRef aRLR( new ScRangeList );
    aRLR->Append( rNewArea );
    ScRangeListRef aRLR( new ScRangeList(rNewArea) );
    UpdateChartArea( rChartName, aRLR, bColHeaders, bRowHeaders, bAdd );
}

@@ -295,7 +294,7 @@ void ScDocument::UpdateChartArea( const OUString& rChartName,
                        aNewRanges->Parse( aRangesStr, this );

                        for ( size_t nAdd = 0, nAddCount = rNewList->size(); nAdd < nAddCount; ++nAdd )
                            aNewRanges->Append( *(*rNewList)[nAdd] );
                            aNewRanges->push_back( (*rNewList)[nAdd] );
                    }
                    else
                    {
@@ -388,7 +387,7 @@ void ScDocument::RestoreChartListener( const OUString& rName )
                ScRange aRange;
                ScAddress::Details aDetails(GetAddressConvention(), 0, 0);
                if ( aRange.ParseAny( aRepresentations[i], this, aDetails ) & ScRefFlags::VALID )
                    aRanges->Append( aRange );
                    aRanges->push_back( aRange );
            }

            pChartListenerCollection->ChangeListening( rName, aRanges );
@@ -414,13 +413,13 @@ void ScDocument::UpdateChartRef( UpdateRefMode eUpdateRefMode,
        bool bDataChanged = false;
        for ( size_t i = 0, nListSize = aRLR->size(); i < nListSize; ++i )
        {
            ScRange* pR = (*aRLR)[i];
            SCCOL theCol1 = pR->aStart.Col();
            SCROW theRow1 = pR->aStart.Row();
            SCTAB theTab1 = pR->aStart.Tab();
            SCCOL theCol2 = pR->aEnd.Col();
            SCROW theRow2 = pR->aEnd.Row();
            SCTAB theTab2 = pR->aEnd.Tab();
            ScRange& rRange = (*aRLR)[i];
            SCCOL theCol1 = rRange.aStart.Col();
            SCROW theRow1 = rRange.aStart.Row();
            SCTAB theTab1 = rRange.aStart.Tab();
            SCCOL theCol2 = rRange.aEnd.Col();
            SCROW theRow2 = rRange.aEnd.Row();
            SCTAB theTab2 = rRange.aEnd.Tab();
            ScRefUpdateRes eRes = ScRefUpdate::Update(
                this, eUpdateRefMode,
                nCol1,nRow1,nTab1, nCol2,nRow2,nTab2,
@@ -430,24 +429,24 @@ void ScDocument::UpdateChartRef( UpdateRefMode eUpdateRefMode,
            if ( eRes != UR_NOTHING )
            {
                bChanged = true;
                aNewRLR->Append( ScRange(
                aNewRLR->push_back( ScRange(
                    theCol1, theRow1, theTab1,
                    theCol2, theRow2, theTab2 ));
                if ( eUpdateRefMode == URM_INSDEL
                    && !bDataChanged
                    && (eRes == UR_INVALID ||
                        ((pR->aEnd.Col() - pR->aStart.Col()
                        ((rRange.aEnd.Col() - rRange.aStart.Col()
                        != theCol2 - theCol1)
                    || (pR->aEnd.Row() - pR->aStart.Row()
                    || (rRange.aEnd.Row() - rRange.aStart.Row()
                        != theRow2 - theRow1)
                    || (pR->aEnd.Tab() - pR->aStart.Tab()
                    || (rRange.aEnd.Tab() - rRange.aStart.Tab()
                        != theTab2 - theTab1))) )
                {
                    bDataChanged = true;
                }
            }
            else
                aNewRLR->Append( *pR );
                aNewRLR->push_back( rRange );
        }
        if ( bChanged )
        {
diff --git a/sc/source/core/data/documen6.cxx b/sc/source/core/data/documen6.cxx
index 0a882e3..d4b8a41 100644
--- a/sc/source/core/data/documen6.cxx
+++ b/sc/source/core/data/documen6.cxx
@@ -191,7 +191,7 @@ SvtScriptType ScDocument::GetRangeScriptType( const ScRangeList& rRanges )
    sc::ColumnSpanSet aSet(false);
    for (size_t i = 0, n = rRanges.size(); i < n; ++i)
    {
        const ScRange& rRange = *rRanges[i];
        const ScRange& rRange = rRanges[i];
        SCTAB nTab = rRange.aStart.Tab();
        SCROW nRow1 = rRange.aStart.Row();
        SCROW nRow2 = rRange.aEnd.Row();
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index 7ebdb40..aa1ef71 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -1151,7 +1151,7 @@ void ScDocument::LimitChartIfAll( ScRangeListRef& rRangeList )
    {
        for ( size_t i = 0, nCount = rRangeList->size(); i < nCount; i++ )
        {
            ScRange aRange( *(*rRangeList)[i] );
            ScRange aRange( (*rRangeList)[i] );
            if ( ( aRange.aStart.Col() == 0 && aRange.aEnd.Col() == MAXCOL ) ||
                 ( aRange.aStart.Row() == 0 && aRange.aEnd.Row() == MAXROW ) )
            {
@@ -1167,7 +1167,7 @@ void ScDocument::LimitChartIfAll( ScRangeListRef& rRangeList )
                aRange.aEnd.SetCol( nEndCol );
                aRange.aEnd.SetRow( nEndRow );
            }
            aNew->Append(aRange);
            aNew->push_back(aRange);
        }
    }
    else
@@ -2330,7 +2330,7 @@ void ScDocument::CopyTabToClip(SCCOL nCol1, SCROW nRow1,
        ScClipParam& rClipParam = pClipDoc->GetClipParam();
        pClipDoc->aDocName = aDocName;
        rClipParam.maRanges.RemoveAll();
        rClipParam.maRanges.Append(ScRange(nCol1, nRow1, 0, nCol2, nRow2, 0));
        rClipParam.maRanges.push_back(ScRange(nCol1, nRow1, 0, nCol2, nRow2, 0));
        pClipDoc->ResetClip( this, nTab );

        sc::CopyToClipContext aCxt(*pClipDoc, false);
@@ -2748,7 +2748,7 @@ void ScDocument::CopyNonFilteredFromClip(
    SCROW nSourceRow = rClipStartRow;
    SCROW nSourceEnd = 0;
    if (!rCxt.getClipDoc()->GetClipParam().maRanges.empty())
        nSourceEnd = rCxt.getClipDoc()->GetClipParam().maRanges.front()->aEnd.Row();
        nSourceEnd = rCxt.getClipDoc()->GetClipParam().maRanges.front().aEnd.Row();
    SCROW nDestRow = nRow1;

    while ( nSourceRow <= nSourceEnd && nDestRow <= nRow2 )
@@ -2885,7 +2885,7 @@ void ScDocument::CopyFromClip( const ScRange& rDestRange, const ScMarkData& rMar
    ScRangeList aLocalRangeList;
    if (!pDestRanges)
    {
        aLocalRangeList.Append( rDestRange);
        aLocalRangeList.push_back( rDestRange);
        pDestRanges = &aLocalRangeList;
    }

@@ -2898,11 +2898,11 @@ void ScDocument::CopyFromClip( const ScRange& rDestRange, const ScMarkData& rMar
    SCROW nClipEndRow = aClipRange.aEnd.Row();
    for ( size_t nRange = 0; nRange < pDestRanges->size(); ++nRange )
    {
        const ScRange* pRange = (*pDestRanges)[nRange];
        SCCOL nCol1 = pRange->aStart.Col();
        SCROW nRow1 = pRange->aStart.Row();
        SCCOL nCol2 = pRange->aEnd.Col();
        SCROW nRow2 = pRange->aEnd.Row();
        const ScRange & rRange = (*pDestRanges)[nRange];
        SCCOL nCol1 = rRange.aStart.Col();
        SCROW nRow1 = rRange.aStart.Row();
        SCCOL nCol2 = rRange.aEnd.Col();
        SCROW nRow2 = rRange.aEnd.Row();

        if (bSkipAttrForEmpty)
        {
@@ -3067,12 +3067,12 @@ void ScDocument::CopyMultiRangeFromClip(

    for (size_t i = 0, n = rClipParam.maRanges.size(); i < n; ++i)
    {
        ScRange* p = rClipParam.maRanges[i];
        const ScRange & rRange = rClipParam.maRanges[i];

        SCROW nRowCount = p->aEnd.Row() - p->aStart.Row() + 1;
        SCCOL nDx = static_cast<SCCOL>(nCol1 - p->aStart.Col());
        SCROW nDy = static_cast<SCROW>(nRow1 - p->aStart.Row());
        SCCOL nCol2 = nCol1 + p->aEnd.Col() - p->aStart.Col();
        SCROW nRowCount = rRange.aEnd.Row() - rRange.aStart.Row() + 1;
        SCCOL nDx = static_cast<SCCOL>(nCol1 - rRange.aStart.Col());
        SCROW nDy = static_cast<SCROW>(nRow1 - rRange.aStart.Row());
        SCCOL nCol2 = nCol1 + rRange.aEnd.Col() - rRange.aStart.Col();
        SCROW nEndRow = nRow1 + nRowCount - 1;

        CopyBlockFromClip(aCxt, nCol1, nRow1, nCol2, nEndRow, rMark, nDx, nDy);
@@ -3084,7 +3084,7 @@ void ScDocument::CopyMultiRangeFromClip(
                nRow1 += nRowCount;
            break;
            case ScClipParam::Column:
                nCol1 += p->aEnd.Col() - p->aStart.Col() + 1;
                nCol1 += rRange.aEnd.Col() - rRange.aStart.Col() + 1;
            break;
            default:
                ;
@@ -3119,7 +3119,7 @@ void ScDocument::SetClipArea( const ScRange& rArea, bool bCut )
    {
        ScClipParam& rClipParam = GetClipParam();
        rClipParam.maRanges.RemoveAll();
        rClipParam.maRanges.Append(rArea);
        rClipParam.maRanges.push_back(rArea);
        rClipParam.mbCutMode = bCut;
    }
    else
@@ -3141,22 +3141,22 @@ void ScDocument::GetClipArea(SCCOL& nClipX, SCROW& nClipY, bool bIncludeFiltered
        // No clip range.  Bail out.
        return;

    ScRange* p = rClipRanges.front();
    SCCOL nStartCol = p->aStart.Col();
    SCCOL nEndCol   = p->aEnd.Col();
    SCROW nStartRow = p->aStart.Row();
    SCROW nEndRow   = p->aEnd.Row();
    ScRange & rRange = rClipRanges.front();
    SCCOL nStartCol = rRange.aStart.Col();
    SCCOL nEndCol   = rRange.aEnd.Col();
    SCROW nStartRow = rRange.aStart.Row();
    SCROW nEndRow   = rRange.aEnd.Row();
    for ( size_t i = 1, n = rClipRanges.size(); i < n; ++i )
    {
        p = rClipRanges[ i ];
        if (p->aStart.Col() < nStartCol)
            nStartCol = p->aStart.Col();
        if (p->aStart.Row() < nStartRow)
            nStartRow = p->aStart.Row();
        if (p->aEnd.Col() > nEndCol)
            nEndCol = p->aEnd.Col();
        if (p->aEnd.Row() < nEndRow)
            nEndRow = p->aEnd.Row();
        rRange = rClipRanges[ i ];
        if (rRange.aStart.Col() < nStartCol)
            nStartCol = rRange.aStart.Col();
        if (rRange.aStart.Row() < nStartRow)
            nStartRow = rRange.aStart.Row();
        if (rRange.aEnd.Col() > nEndCol)
            nEndCol = rRange.aEnd.Col();
        if (rRange.aEnd.Row() < nEndRow)
            nEndRow = rRange.aEnd.Row();
    }

    nClipX = nEndCol - nStartCol;
@@ -3187,8 +3187,8 @@ void ScDocument::GetClipStart(SCCOL& nClipX, SCROW& nClipY)
        ScRangeList& rClipRanges = GetClipParam().maRanges;
        if ( !rClipRanges.empty() )
        {
            nClipX = rClipRanges.front()->aStart.Col();
            nClipY = rClipRanges.front()->aStart.Row();
            nClipX = rClipRanges.front().aStart.Col();
            nClipY = rClipRanges.front().aStart.Row();
        }
    }
    else
@@ -3210,8 +3210,8 @@ bool ScDocument::HasClipFilteredRows()

    for ( size_t i = 0, n = rClipRanges.size(); i < n; ++i )
    {
        ScRange* p = rClipRanges[ i ];
        bool bAnswer = maTabs[nCountTab]->HasFilteredRows(p->aStart.Row(), p->aEnd.Row());
        ScRange & rRange = rClipRanges[ i ];
        bool bAnswer = maTabs[nCountTab]->HasFilteredRows(rRange.aStart.Row(), rRange.aEnd.Row());
        if (bAnswer)
            return true;
    }
@@ -3910,7 +3910,7 @@ void ScDocument::InterpretDirtyCells( const ScRangeList& rRanges )

    for (size_t nPos=0, nRangeCount = rRanges.size(); nPos < nRangeCount; nPos++)
    {
        const ScRange& rRange = *rRanges[nPos];
        const ScRange& rRange = rRanges[nPos];
        for (SCTAB nTab = rRange.aStart.Tab(); nTab <= rRange.aEnd.Tab(); ++nTab)
        {
            ScTable* pTab = FetchTable(nTab);
@@ -5104,16 +5104,16 @@ void ScDocument::GetSelectionFrame( const ScMarkData& rMark,
        bool bMultipleRows = false, bMultipleCols = false;
        for( size_t nRangeIdx = 0; nRangeIdx < nRangeCount; ++nRangeIdx )
        {
            const ScRange* pRange = aRangeList[ nRangeIdx ];
            bMultipleRows = ( bMultipleRows || ( pRange->aStart.Row() != pRange->aEnd.Row() ) );
            bMultipleCols = ( bMultipleCols || ( pRange->aStart.Col() != pRange->aEnd.Col() ) );
            const ScRange rRange = aRangeList[ nRangeIdx ];
            bMultipleRows = ( bMultipleRows || ( rRange.aStart.Row() != rRange.aEnd.Row() ) );
            bMultipleCols = ( bMultipleCols || ( rRange.aStart.Col() != rRange.aEnd.Col() ) );
            SCTAB nMax = static_cast<SCTAB>(maTabs.size());
            ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end();
            for (; itr != itrEnd && *itr < nMax; ++itr)
                if (maTabs[*itr])
                    maTabs[*itr]->MergeBlockFrame( &rLineOuter, &rLineInner, aFlags,
                                          pRange->aStart.Col(), pRange->aStart.Row(),
                                          pRange->aEnd.Col(),   pRange->aEnd.Row() );
                                          rRange.aStart.Col(), rRange.aStart.Row(),
                                          rRange.aEnd.Col(),   rRange.aEnd.Row() );
        }
        rLineInner.EnableHor( bMultipleRows );
        rLineInner.EnableVer( bMultipleCols );
@@ -5725,10 +5725,10 @@ void ScDocument::ApplySelectionFrame( const ScMarkData& rMark,
        {
            for ( size_t j=0; j < nRangeCount; j++ )
            {
                ScRange aRange = *aRangeList[ j ];
                const ScRange & rRange = aRangeList[ j ];
                maTabs[*itr]->ApplyBlockFrame( rLineOuter, pLineInner,
                    aRange.aStart.Col(), aRange.aStart.Row(),
                    aRange.aEnd.Col(),   aRange.aEnd.Row() );
                    rRange.aStart.Col(), rRange.aStart.Row(),
                    rRange.aEnd.Col(),   rRange.aEnd.Row() );
            }
        }
    }
@@ -5780,34 +5780,34 @@ void ScDocument::ApplySelectionFrame( const ScMarkData& rMark,
                size_t nEnvelopeRangeCount = rRangeListTopEnvelope.size();
                for ( size_t j=0; j < nEnvelopeRangeCount; j++ )
                {
                    const ScRange* pRange = rRangeListTopEnvelope[ j ];
                    const ScRange & rRange = rRangeListTopEnvelope[ j ];
                    maTabs[*itr1]->ApplyBlockFrame( aTop, &aTopInfo,
                                                    pRange->aStart.Col(), pRange->aStart.Row(),
                                                    pRange->aEnd.Col(),   pRange->aEnd.Row() );
                                                    rRange.aStart.Col(), rRange.aStart.Row(),
                                                    rRange.aEnd.Col(),   rRange.aEnd.Row() );
                }
                nEnvelopeRangeCount = rRangeListBottomEnvelope.size();
                for ( size_t j=0; j < nEnvelopeRangeCount; j++ )
                {
                    const ScRange* pRange = rRangeListBottomEnvelope[ j ];
                    const ScRange & rRange = rRangeListBottomEnvelope[ j ];
                    maTabs[*itr1]->ApplyBlockFrame( aBottom, &aBottomInfo,
                                                    pRange->aStart.Col(), pRange->aStart.Row(),
                                                    pRange->aEnd.Col(),   pRange->aEnd.Row() );
                                                    rRange.aStart.Col(), rRange.aStart.Row(),
                                                    rRange.aEnd.Col(),   rRange.aEnd.Row() );
                }
                nEnvelopeRangeCount = rRangeListLeftEnvelope.size();
                for ( size_t j=0; j < nEnvelopeRangeCount; j++ )
                {
                    const ScRange* pRange = rRangeListLeftEnvelope[ j ];
                    const ScRange & rRange = rRangeListLeftEnvelope[ j ];
                    maTabs[*itr1]->ApplyBlockFrame( aLeft, &aLeftInfo,
                                                    pRange->aStart.Col(), pRange->aStart.Row(),
                                                    pRange->aEnd.Col(),   pRange->aEnd.Row() );
                                                    rRange.aStart.Col(), rRange.aStart.Row(),
                                                    rRange.aEnd.Col(),   rRange.aEnd.Row() );
                }
                nEnvelopeRangeCount = rRangeListRightEnvelope.size();
                for ( size_t j=0; j < nEnvelopeRangeCount; j++ )
                {
                    const ScRange* pRange = rRangeListRightEnvelope[ j ];
                    const ScRange & rRange = rRangeListRightEnvelope[ j ];
                    maTabs[*itr1]->ApplyBlockFrame( aRight, &aRightInfo,
                                                    pRange->aStart.Col(), pRange->aStart.Row(),
                                                    pRange->aEnd.Col(),   pRange->aEnd.Row() );
                                                    rRange.aStart.Col(), rRange.aStart.Row(),
                                                    rRange.aEnd.Col(),   rRange.aEnd.Row() );
                }
            }
        }
@@ -5892,9 +5892,8 @@ void ScDocument::DeleteSelection( InsertDeleteFlags nDelFlag, const ScMarkData& 
        rMark.FillRangeListWithMarks( &aRangeList, false);
        for (size_t i = 0; i < aRangeList.size(); ++i)
        {
            const ScRange* pRange = aRangeList[i];
            if (pRange)
                EndListeningIntersectedGroups( aCxt, *pRange, &aGroupPos);
            const ScRange & rRange = aRangeList[i];
            EndListeningIntersectedGroups( aCxt, rRange, &aGroupPos);
        }
        aCxt.purgeEmptyBroadcasters();
    }
@@ -5920,9 +5919,7 @@ void ScDocument::DeleteSelection( InsertDeleteFlags nDelFlag, const ScMarkData& 
            rMark.FillRangeListWithMarks( &aRangeList, false);
            for (size_t i = 0; i < aRangeList.size(); ++i)
            {
                const ScRange* pRange = aRangeList[i];
                if (pRange)
                    SetDirty( *pRange, true);
                SetDirty( aRangeList[i], true);
            }
            //Notify listeners on top and bottom of the group that has been split
            for (size_t i = 0; i < aGroupPos.size(); ++i) {
@@ -5953,10 +5950,10 @@ void ScDocument::DeleteSelectionTab(
            rMark.FillRangeListWithMarks( &aRangeList, false);
            for (size_t i = 0; i < aRangeList.size(); ++i)
            {
                const ScRange* pRange = aRangeList[i];
                if (pRange && pRange->aStart.Tab() <= nTab && nTab <= pRange->aEnd.Tab())
                const ScRange & rRange = aRangeList[i];
                if (rRange.aStart.Tab() <= nTab && nTab <= rRange.aEnd.Tab())
                {
                    ScRange aRange( *pRange);
                    ScRange aRange( rRange);
                    aRange.aStart.SetTab( nTab);
                    aRange.aEnd.SetTab( nTab);
                    EndListeningIntersectedGroups( aCxt, aRange, &aGroupPos);
@@ -5982,10 +5979,10 @@ void ScDocument::DeleteSelectionTab(
                rMark.FillRangeListWithMarks( &aRangeList, false);
                for (size_t i = 0; i < aRangeList.size(); ++i)
                {
                    const ScRange* pRange = aRangeList[i];
                    if (pRange && pRange->aStart.Tab() <= nTab && nTab <= pRange->aEnd.Tab())
                    const ScRange & rRange = aRangeList[i];
                    if (rRange.aStart.Tab() <= nTab && nTab <= rRange.aEnd.Tab())
                    {
                        ScRange aRange( *pRange);
                        ScRange aRange( rRange);
                        aRange.aStart.SetTab( nTab);
                        aRange.aEnd.SetTab( nTab);
                        SetDirty( aRange, true);
@@ -6575,9 +6572,9 @@ void ScDocument::ForgetNoteCaptions( const ScRangeList& rRanges, bool bPreserveD
{
    for (size_t i = 0, n = rRanges.size(); i < n; ++i)
    {
        const ScRange* p = rRanges[i];
        const ScAddress& s = p->aStart;
        const ScAddress& e = p->aEnd;
        const ScRange & rRange = rRanges[i];
        const ScAddress& s = rRange.aStart;
        const ScAddress& e = rRange.aEnd;
        for (SCTAB nTab = s.Tab(); nTab <= e.Tab(); ++nTab)
        {
            ScTable* pTab = FetchTable(nTab);
@@ -6598,11 +6595,11 @@ CommentCaptionState ScDocument::GetAllNoteCaptionsState( const ScRangeList& rRan

    for (size_t i = 0, n = rRanges.size(); i < n; ++i)
    {
        const ScRange* pRange = rRanges[i];
        const ScRange & rRange = rRanges[i];

        for( SCTAB nTab = pRange->aStart.Tab(); nTab <= pRange->aEnd.Tab(); ++nTab )
        for( SCTAB nTab = rRange.aStart.Tab(); nTab <= rRange.aEnd.Tab(); ++nTab )
        {
            aState = maTabs[nTab]->GetAllNoteCaptionsState( *pRange, aNotes );
            aState = maTabs[nTab]->GetAllNoteCaptionsState( rRange, aNotes );

            if (aState == CommentCaptionState::MIXED)
                return aState;
@@ -6706,14 +6703,14 @@ void ScDocument::GetAllNoteEntries( SCTAB nTab, std::vector<sc::NoteEntry>& rNot
    return pTab->GetAllNoteEntries( rNotes );
}

void ScDocument::GetNotesInRange( const ScRangeList& rRange, std::vector<sc::NoteEntry>& rNotes ) const
void ScDocument::GetNotesInRange( const ScRangeList& rRangeList, std::vector<sc::NoteEntry>& rNotes ) const
{
    for( size_t i = 0; i < rRange.size(); ++i)
    for( size_t i = 0; i < rRangeList.size(); ++i)
    {
        const ScRange* pRange = rRange[i];
        for( SCTAB nTab = pRange->aStart.Tab(); nTab <= pRange->aEnd.Tab(); ++nTab )
        const ScRange & rRange = rRangeList[i];
        for( SCTAB nTab = rRange.aStart.Tab(); nTab <= rRange.aEnd.Tab(); ++nTab )
        {
            maTabs[nTab]->GetNotesInRange( *pRange, rNotes );
            maTabs[nTab]->GetNotesInRange( rRange, rNotes );
        }
    }
}
@@ -6723,14 +6720,14 @@ void ScDocument::GetUnprotectedCells( ScRangeList& rRangeList, SCTAB nTab ) cons
    maTabs[nTab]->GetUnprotectedCells( rRangeList );
}

bool ScDocument::ContainsNotesInRange( const ScRangeList& rRange ) const
bool ScDocument::ContainsNotesInRange( const ScRangeList& rRangeList ) const
{
    for( size_t i = 0; i < rRange.size(); ++i)
    for( size_t i = 0; i < rRangeList.size(); ++i)
    {
        const ScRange* pRange = rRange[i];
        for( SCTAB nTab = pRange->aStart.Tab(); nTab < pRange->aEnd.Tab(); ++nTab )
        const ScRange & rRange = rRangeList[i];
        for( SCTAB nTab = rRange.aStart.Tab(); nTab < rRange.aEnd.Tab(); ++nTab )
        {
            bool bContainsNote = maTabs[nTab]->ContainsNotesInRange( *pRange );
            bool bContainsNote = maTabs[nTab]->ContainsNotesInRange( rRange );
            if(bContainsNote)
                return true;
        }
diff --git a/sc/source/core/data/drwlayer.cxx b/sc/source/core/data/drwlayer.cxx
index d15cd9d..3414445 100644
--- a/sc/source/core/data/drwlayer.cxx
+++ b/sc/source/core/data/drwlayer.cxx
@@ -1426,8 +1426,8 @@ static bool lcl_IsAllInRange( const ::std::vector< ScRangeList >& rRangesVector,
        const ScRangeList& rRanges = *aIt;
        for ( size_t i = 0, nCount = rRanges.size(); i < nCount; i++ )
        {
            ScRange aRange = *rRanges[ i ];
            if ( !rClipRange.In( aRange ) )
            const ScRange & rRange = rRanges[ i ];
            if ( !rClipRange.In( rRange ) )
            {
                return false;   // at least one range is not valid
            }
@@ -1448,13 +1448,13 @@ static bool lcl_MoveRanges( ::std::vector< ScRangeList >& rRangesVector, const S
        ScRangeList& rRanges = *aIt;
        for ( size_t i = 0, nCount = rRanges.size(); i < nCount; i++ )
        {
            ScRange* pRange = rRanges[ i ];
            if ( rSourceRange.In( *pRange ) )
            ScRange aRange = rRanges[ i ];
            if ( rSourceRange.In( aRange ) )
            {
                SCCOL nDiffX = rDestPos.Col() - rSourceRange.aStart.Col();
                SCROW nDiffY = rDestPos.Row() - rSourceRange.aStart.Row();
                SCTAB nDiffZ = rDestPos.Tab() - rSourceRange.aStart.Tab();
                if (!pRange->Move( nDiffX, nDiffY, nDiffZ, aErrorRange))
                if (!aRange.Move( nDiffX, nDiffY, nDiffZ, aErrorRange))
                {
                    assert(!"can't move range");
                }
diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index ebaefc3..04cfe1c 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -4291,12 +4291,12 @@ struct ScDependantsCalculator

        for (size_t i = 0; i < aRangeList.size(); ++i)
        {
            const ScRange* pRange = aRangeList[i];
            assert(pRange->aStart.Tab() == pRange->aEnd.Tab());
            for (auto nCol = pRange->aStart.Col(); nCol <= pRange->aEnd.Col(); nCol++)
            const ScRange & rRange = aRangeList[i];
            assert(rRange.aStart.Tab() == rRange.aEnd.Tab());
            for (auto nCol = rRange.aStart.Col(); nCol <= rRange.aEnd.Col(); nCol++)
            {
                if (!mrDoc.HandleRefArrayForParallelism(ScAddress(nCol, pRange->aStart.Row(), pRange->aStart.Tab()),
                                                        pRange->aEnd.Row() - pRange->aStart.Row() + 1))
                if (!mrDoc.HandleRefArrayForParallelism(ScAddress(nCol, rRange.aStart.Row(), rRange.aStart.Tab()),
                                                        rRange.aEnd.Row() - rRange.aStart.Row() + 1))
                    return false;
            }
        }
diff --git a/sc/source/core/data/markdata.cxx b/sc/source/core/data/markdata.cxx
index 73a22ae..ecd2b2e 100644
--- a/sc/source/core/data/markdata.cxx
+++ b/sc/source/core/data/markdata.cxx
@@ -341,7 +341,7 @@ void ScMarkData::MarkFromRangeList( const ScRangeList& rList, bool bReset )
    size_t nCount = rList.size();
    if ( nCount == 1 && !bMarked && !bMultiMarked )
    {
        const ScRange& rRange = *rList[ 0 ];
        const ScRange& rRange = rList[ 0 ];
        SetMarkArea( rRange );
        SelectTable( rRange.aStart.Tab(), true );
    }
@@ -349,7 +349,7 @@ void ScMarkData::MarkFromRangeList( const ScRangeList& rList, bool bReset )
    {
        for (size_t i=0; i < nCount; i++)
        {
            const ScRange& rRange = *rList[ i ];
            const ScRange& rRange = rList[ i ];
            SetMultiMarkArea( rRange );
            SelectTable( rRange.aStart.Tab(), true );
        }
@@ -405,13 +405,13 @@ void ScMarkData::FillRangeListWithMarks( ScRangeList* pList, bool bClear, SCTAB 
    if ( bMarked )
    {
        if (nForTab < 0)
            pList->Append( aMarkRange );
            pList->push_back( aMarkRange );
        else
        {
            ScRange aRange( aMarkRange );
            aRange.aStart.SetTab( nForTab );
            aRange.aEnd.SetTab( nForTab );
            pList->Append( aRange );
            pList->push_back( aRange );
        }
    }
}
@@ -428,10 +428,10 @@ void ScMarkData::ExtendRangeListTables( ScRangeList* pList ) const
    for (; it != maTabMarked.end(); ++it)
        for ( size_t i=0, nCount = aOldList.size(); i<nCount; i++)
        {
            ScRange aRange = *aOldList[ i ];
            ScRange aRange = aOldList[ i ];
            aRange.aStart.SetTab(*it);
            aRange.aEnd.SetTab(*it);
            pList->Append( aRange );
            pList->push_back( aRange );
        }
}

@@ -459,7 +459,7 @@ std::vector<sc::ColRowSpan> ScMarkData::GetMarkedRowSpans() const

    for (size_t i = 0, n = aRanges.size(); i < n; ++i)
    {
        const ScRange& r = *aRanges[i];
        const ScRange& r = aRanges[i];
        itPos = aSpans.insert(itPos, r.aStart.Row(), r.aEnd.Row()+1, true).first;
    }

@@ -706,7 +706,7 @@ void ScMarkData::GetSelectionCover( ScRange& rRange )
                        ScRange aAddRange(nCol - 1, nTop, aMultiRange.aStart.Tab(),
                                          nCol - 1, nBottom, aMultiRange.aStart.Tab());
                        lcl_AddRanges( rRange, aAddRange ); // Left envelope
                        aLeftEnvelope.Append( aAddRange );
                        aLeftEnvelope.push_back( aAddRange );
                    }
                    else if( nCol > nStartCol )
                    {
@@ -728,7 +728,7 @@ void ScMarkData::GetSelectionCover( ScRange& rRange )
                                ScRange aAddRange( nCol - 1, nTop1, aMultiRange.aStart.Tab(),
                                                   nCol - 1, nBottom1, aMultiRange.aStart.Tab() );
                                lcl_AddRanges( rRange, aAddRange ); // Left envelope
                                aLeftEnvelope.Append( aAddRange );
                                aLeftEnvelope.push_back( aAddRange );
                                nTop1 = ++nBottom1;
                            }
                        }
@@ -747,7 +747,7 @@ void ScMarkData::GetSelectionCover( ScRange& rRange )
                                        ScRange aAddRange( nCol, nTopPrev, aMultiRange.aStart.Tab(),
                                                           nCol, nBottomPrev, aMultiRange.aStart.Tab());
                                        lcl_AddRanges( rRange, aAddRange ); // Right envelope
                                        aRightEnvelope.Append( aAddRange );
                                        aRightEnvelope.push_back( aAddRange );
                                        nTopPrev = nBottomPrev = (nBottom + 1);
                                    }
                                    else
@@ -755,7 +755,7 @@ void ScMarkData::GetSelectionCover( ScRange& rRange )
                                        ScRange aAddRange( nCol, nTopPrev, aMultiRange.aStart.Tab(),
                                                           nCol, nBottomPrev, aMultiRange.aStart.Tab());
                                        lcl_AddRanges( rRange, aAddRange ); // Right envelope
                                        aRightEnvelope.Append( aAddRange );
                                        aRightEnvelope.push_back( aAddRange );
                                        nTopPrev = ++nBottomPrev;
                                    }
                                }
@@ -795,7 +795,7 @@ void ScMarkData::GetSelectionCover( ScRange& rRange )
                        ScRange aAddRange(nCol, nTopPrev, aMultiRange.aStart.Tab(),
                                          nCol, nBottomPrev, aMultiRange.aStart.Tab());
                        lcl_AddRanges( rRange, aAddRange ); // Right envelope
                        aRightEnvelope.Append( aAddRange );
                        aRightEnvelope.push_back( aAddRange );
                        nTopPrev = ++nBottomPrev;
                    }
                    else
@@ -820,7 +820,7 @@ void ScMarkData::GetSelectionCover( ScRange& rRange )
                        ScRange aAddRange(nCol, nTopPrev, aMultiRange.aStart.Tab(),
                                          nCol, nBottomPrev, aMultiRange.aStart.Tab());
                        lcl_AddRanges( rRange, aAddRange ); // Right envelope
                        aRightEnvelope.Append( aAddRange );
                        aRightEnvelope.push_back( aAddRange );
                        nTopPrev = ++nBottomPrev;
                    }
                    else
@@ -844,7 +844,7 @@ void ScMarkData::GetSelectionCover( ScRange& rRange )
                if( !rKV.second.getRangeData( nStart, aRange ) )
                    break;
                if( aRange.mbValue ) // is marked
                    aTopEnvelope.Append( ScRange( aRange.mnCol1, rKV.first, aMultiRange.aStart.Tab(),
                    aTopEnvelope.push_back( ScRange( aRange.mnCol1, rKV.first, aMultiRange.aStart.Tab(),
                                                  aRange.mnCol2, rKV.first, aMultiRange.aStart.Tab() ) );
                nStart = aRange.mnCol2 + 1;
            }
@@ -858,7 +858,7 @@ void ScMarkData::GetSelectionCover( ScRange& rRange )
                if( !rKV.second.getRangeData( nStart, aRange ) )
                    break;
                if( aRange.mbValue ) // is marked
                    aBottomEnvelope.Append( ScRange( aRange.mnCol1, rKV.first, aMultiRange.aStart.Tab(),
                    aBottomEnvelope.push_back( ScRange( aRange.mnCol1, rKV.first, aMultiRange.aStart.Tab(),
                                                     aRange.mnCol2, rKV.first, aMultiRange.aStart.Tab() ) );
                nStart = aRange.mnCol2 + 1;
            }
@@ -878,22 +878,22 @@ void ScMarkData::GetSelectionCover( ScRange& rRange )
        // Each envelope will have zero or more ranges for single rectangle selection.
        if( nCol1 > 0 )
        {
            aLeftEnvelope.Append( ScRange( nCol1 - 1, nRow1, nTab1, nCol1 - 1, nRow2, nTab2 ) );
            aLeftEnvelope.push_back( ScRange( nCol1 - 1, nRow1, nTab1, nCol1 - 1, nRow2, nTab2 ) );
            --nCol1New;
        }
        if( nRow1 > 0 )
        {
            aTopEnvelope.Append( ScRange( nCol1, nRow1 - 1, nTab1, nCol2, nRow1 - 1, nTab2 ) );
            aTopEnvelope.push_back( ScRange( nCol1, nRow1 - 1, nTab1, nCol2, nRow1 - 1, nTab2 ) );
            --nRow1New;
        }
        if( nCol2 < MAXCOL )
        {
            aRightEnvelope.Append( ScRange( nCol2 + 1, nRow1, nTab1, nCol2 + 1, nRow2, nTab2 ) );
            aRightEnvelope.push_back( ScRange( nCol2 + 1, nRow1, nTab1, nCol2 + 1, nRow2, nTab2 ) );
            ++nCol2New;
        }
        if( nRow2 < MAXROW )
        {
            aBottomEnvelope.Append( ScRange( nCol1, nRow2 + 1, nTab1, nCol2, nRow2 + 1, nTab2 ) );
            aBottomEnvelope.push_back( ScRange( nCol1, nRow2 + 1, nTab1, nCol2, nRow2 + 1, nTab2 ) );
            ++nRow2New;
        }
        rRange = ScRange( nCol1New, nRow1New, nTab1, nCol2New, nRow2New, nTab2 );
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index adb40b6..67e4da1 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -461,10 +461,10 @@ void ScTable::DeleteSelection( InsertDeleteFlags nDelFlag, const ScMarkData& rMa

    for (size_t i = 0; i < aRangeList.size(); ++i)
    {
        ScRange* pRange = aRangeList[i];
        const ScRange & rRange = aRangeList[i];

        if((nDelFlag & InsertDeleteFlags::ATTRIB) && pRange && pRange->aStart.Tab() == nTab)
            mpCondFormatList->DeleteArea( pRange->aStart.Col(), pRange->aStart.Row(), pRange->aEnd.Col(), pRange->aEnd.Row() );
        if((nDelFlag & InsertDeleteFlags::ATTRIB) && rRange.aStart.Tab() == nTab)
            mpCondFormatList->DeleteArea( rRange.aStart.Col(), rRange.aStart.Row(), rRange.aEnd.Col(), rRange.aEnd.Row() );
    }

        // Do not set protected cell in a protected sheet
@@ -535,9 +535,8 @@ void ScTable::CopyToClip(
{
    for ( size_t i = 0, nListSize = rRanges.size(); i < nListSize; ++i )
    {
        const ScRange* p = rRanges[ i ];
        if (p)
            CopyToClip( rCxt, p->aStart.Col(), p->aStart.Row(), p->aEnd.Col(), p->aEnd.Row(), pTable);
        const ScRange & r = rRanges[ i ];
        CopyToClip( rCxt, r.aStart.Col(), r.aStart.Row(), r.aEnd.Col(), r.aEnd.Row(), pTable);
    }
}

@@ -579,7 +578,7 @@ bool CheckAndDeduplicateCondFormat(ScDocument* pDocument, ScConditionalFormat* p
        ScRangeList& rDstRangeList = pOldFormat->GetRangeList();
        for (size_t i = 0; i < rNewRangeList.size(); ++i)
        {
            rDstRangeList.Join(*rNewRangeList[i]);
            rDstRangeList.Join(rNewRangeList[i]);
        }
        pDocument->AddCondFormatData(pOldFormat->GetRange(), nTab, pOldFormat->GetKey());
        return true;
@@ -1365,8 +1364,8 @@ bool ScTable::HasScenarioRange( const ScRange& rRange ) const
    {
        for ( size_t j = 0, n = pList->size(); j < n; j++ )
        {
            const ScRange* pR = (*pList)[j];
            if ( pR->Intersects( aTabRange ) )
            const ScRange & rR = (*pList)[j];
            if ( rR.Intersects( aTabRange ) )
                return true;
        }
    }
@@ -2430,8 +2429,8 @@ bool ScTable::IsSelectionEditable( const ScMarkData& rMark,
                {
                    for (size_t i=0, nRange = aRanges.size(); (i < nRange) && bIsEditable; i++ )
                    {
                        ScRange aRange = *aRanges[ i ];
                        if(pDocument->HasScenarioRange(nScenTab, aRange))
                        const ScRange & rRange = aRanges[ i ];
                        if(pDocument->HasScenarioRange(nScenTab, rRange))
                        {
                            ScScenarioFlags nFlags;
                            pDocument->GetScenarioFlags(nScenTab,nFlags);
@@ -2459,8 +2458,8 @@ bool ScTable::IsSelectionEditable( const ScMarkData& rMark,
            rMark.FillRangeListWithMarks( &aRanges, false );
            for (size_t i = 0, nRange = aRanges.size(); (i < nRange) && bIsEditable; i++)
            {
                ScRange aRange = *aRanges[ i ];
                if(pDocument->HasScenarioRange(nTab, aRange))
                const ScRange & rRange = aRanges[ i ];
                if(pDocument->HasScenarioRange(nTab, rRange))
                {
                    ScScenarioFlags nFlags;
                    pDocument->GetScenarioFlags(nTab,nFlags);
@@ -2575,16 +2574,16 @@ void ScTable::ApplyPatternIfNumberformatIncompatible( const ScRange& rRange,
    }
}

void ScTable::AddCondFormatData( const ScRangeList& rRange, sal_uInt32 nIndex )
void ScTable::AddCondFormatData( const ScRangeList& rRangeList, sal_uInt32 nIndex )
{
    size_t n = rRange.size();
    size_t n = rRangeList.size();
    for(size_t i = 0; i < n; ++i)
    {
        const ScRange* pRange = rRange[i];
        SCCOL nColStart = pRange->aStart.Col();
        SCCOL nColEnd = pRange->aEnd.Col();
        SCROW nRowStart = pRange->aStart.Row();
        SCROW nRowEnd = pRange->aEnd.Row();
        const ScRange & rRange = rRangeList[i];
        SCCOL nColStart = rRange.aStart.Col();
        SCCOL nColEnd = rRange.aEnd.Col();
        SCROW nRowStart = rRange.aStart.Row();
        SCROW nRowEnd = rRange.aEnd.Row();
        for(SCCOL nCol = nColStart; nCol <= nColEnd; ++nCol)
        {
            aCol[nCol].AddCondFormat(nRowStart, nRowEnd, nIndex);
@@ -2592,16 +2591,16 @@ void ScTable::AddCondFormatData( const ScRangeList& rRange, sal_uInt32 nIndex )
    }
}

void ScTable::RemoveCondFormatData( const ScRangeList& rRange, sal_uInt32 nIndex )
void ScTable::RemoveCondFormatData( const ScRangeList& rRangeList, sal_uInt32 nIndex )
{
    size_t n = rRange.size();
    size_t n = rRangeList.size();
    for(size_t i = 0; i < n; ++i)
    {
        const ScRange* pRange = rRange[i];
        SCCOL nColStart = pRange->aStart.Col();
        SCCOL nColEnd = pRange->aEnd.Col();
        SCROW nRowStart = pRange->aStart.Row();
        SCROW nRowEnd = pRange->aEnd.Row();
        const ScRange & rRange = rRangeList[i];
        SCCOL nColStart = rRange.aStart.Col();
        SCCOL nColEnd = rRange.aEnd.Col();
        SCROW nRowStart = rRange.aStart.Row();
        SCROW nRowEnd = rRange.aEnd.Row();
        for(SCCOL nCol = nColStart; nCol <= nColEnd; ++nCol)
        {
            aCol[nCol].RemoveCondFormat(nRowStart, nRowEnd, nIndex);
diff --git a/sc/source/core/data/table3.cxx b/sc/source/core/data/table3.cxx
index 5d37436..217c74d 100644
--- a/sc/source/core/data/table3.cxx
+++ b/sc/source/core/data/table3.cxx
@@ -1235,7 +1235,7 @@ void ScTable::SortReorderByRowRefUpdate(
        // could be anywhere in the sorted range after reordering.
        for (size_t i = 0, n = aTmp.size(); i < n; ++i)
        {
            ScRange aRange = *aTmp[i];
            ScRange aRange = aTmp[i];
            if (!aMoveRange.Intersects(aRange))
            {
                // Doesn't overlap with the sorted range at all.
diff --git a/sc/source/core/data/table6.cxx b/sc/source/core/data/table6.cxx
index 4e06668..efdb518 100644
--- a/sc/source/core/data/table6.cxx
+++ b/sc/source/core/data/table6.cxx
@@ -842,8 +842,7 @@ bool ScTable::SearchAndReplaceEmptyCells(
    GetFirstDataPos(nColStart, nRowStart);
    GetLastDataPos(nColEnd, nRowEnd);

    ScRangeList aRanges;
    aRanges.Append(ScRange(nColStart, nRowStart, nTab, nColEnd, nRowEnd, nTab));
    ScRangeList aRanges(ScRange(nColStart, nRowStart, nTab, nColEnd, nRowEnd, nTab));

    if (rSearchItem.GetSelection())
    {
@@ -856,23 +855,23 @@ bool ScTable::SearchAndReplaceEmptyCells(
        rMark.FillRangeListWithMarks(&aMarkedRanges, true);
        for ( size_t i = 0, n = aMarkedRanges.size(); i < n; ++i )
        {
            ScRange* p = aMarkedRanges[ i ];
            if (p->aStart.Col() > nColEnd || p->aStart.Row() > nRowEnd || p->aEnd.Col() < nColStart || p->aEnd.Row() < nRowStart)
            ScRange & rRange = aMarkedRanges[ i ];
            if (rRange.aStart.Col() > nColEnd || rRange.aStart.Row() > nRowEnd || rRange.aEnd.Col() < nColStart || rRange.aEnd.Row() < nRowStart)
                // This range is outside the data area.  Skip it.
                continue;

            // Shrink the range into data area only.
            if (p->aStart.Col() < nColStart)
                p->aStart.SetCol(nColStart);
            if (p->aStart.Row() < nRowStart)
                p->aStart.SetRow(nRowStart);
            if (rRange.aStart.Col() < nColStart)
                rRange.aStart.SetCol(nColStart);
            if (rRange.aStart.Row() < nRowStart)
                rRange.aStart.SetRow(nRowStart);

            if (p->aEnd.Col() > nColEnd)
                p->aEnd.SetCol(nColEnd);
            if (p->aEnd.Row() > nRowEnd)
                p->aEnd.SetRow(nRowEnd);
            if (rRange.aEnd.Col() > nColEnd)
                rRange.aEnd.SetCol(nColEnd);
            if (rRange.aEnd.Row() > nRowEnd)
                rRange.aEnd.SetRow(nRowEnd);

            aNewRanges.Append(*p);
            aNewRanges.push_back(rRange);
        }
        aRanges = aNewRanges;
    }
@@ -884,8 +883,8 @@ bool ScTable::SearchAndReplaceEmptyCells(
        {
            for ( size_t i = aRanges.size(); i > 0; --i )
            {
                ScRange* p = aRanges[ i - 1 ];
                if (SearchRangeForEmptyCell(*p, rSearchItem, rCol, rRow, rUndoStr))
                const ScRange & rRange = aRanges[ i - 1 ];
                if (SearchRangeForEmptyCell(rRange, rSearchItem, rCol, rRow, rUndoStr))
                    return true;
            }
        }
@@ -893,8 +892,8 @@ bool ScTable::SearchAndReplaceEmptyCells(
        {
            for ( size_t i = 0, nListSize = aRanges.size(); i < nListSize; ++i )
            {
                ScRange* p = aRanges[ i ];
                if (SearchRangeForEmptyCell(*p, rSearchItem, rCol, rRow, rUndoStr))
                const ScRange & rRange = aRanges[ i ];
                if (SearchRangeForEmptyCell(rRange, rSearchItem, rCol, rRow, rUndoStr))
                    return true;
            }
        }
@@ -904,8 +903,8 @@ bool ScTable::SearchAndReplaceEmptyCells(
        bool bFound = false;
        for ( size_t i = 0, nListSize = aRanges.size(); i < nListSize; ++i )
        {
            ScRange* p = aRanges[ i ];
            bFound |= SearchRangeForAllEmptyCells(*p, rSearchItem, rMatchedRanges, rUndoStr, pUndoDoc);
            ScRange const & rRange = aRanges[ i ];
            bFound |= SearchRangeForAllEmptyCells(rRange, rSearchItem, rMatchedRanges, rUndoStr, pUndoDoc);
        }
        return bFound;
    }
diff --git a/sc/source/core/data/tabprotection.cxx b/sc/source/core/data/tabprotection.cxx
index 05b53d1..3deb550 100644
--- a/sc/source/core/data/tabprotection.cxx
+++ b/sc/source/core/data/tabprotection.cxx
@@ -489,7 +489,7 @@ bool ScTableProtectionImpl::isBlockEditable( const ScRange& rRange ) const
        if (!(*it).hasSecurityDescriptor() && (*it).maRangeList.is())
        {
            ScRangeList aList( (*it).maRangeList->GetIntersectedRange( rRange));
            if (aList.size() == 1 && *aList[0] == rRange)
            if (aList.size() == 1 && aList[0] == rRange)
            {
                // Range is editable if no password is assigned.
                if (!(*it).hasPassword())
@@ -516,13 +516,13 @@ bool ScTableProtectionImpl::isBlockEditable( const ScRange& rRange ) const
                size_t nRanges = rRanges.size();
                for (size_t i=0; i < nRanges; ++i)
                {
                    aRangeList.Append( *rRanges[i]);
                    aRangeList.push_back( rRanges[i]);
                }
            }
        }
    }
    ScRangeList aResultList( aRangeList.GetIntersectedRange( rRange));
    return aResultList.size() == 1 && *aResultList[0] == rRange;
    return aResultList.size() == 1 && aResultList[0] == rRange;
}

bool ScTableProtectionImpl::isSelectionEditable( const ScRangeList& rRangeList ) const
@@ -532,7 +532,7 @@ bool ScTableProtectionImpl::isSelectionEditable( const ScRangeList& rRangeList )

    for (size_t i=0, nRanges = rRangeList.size(); i < nRanges; ++i)
    {
        if (!isBlockEditable( *rRangeList[i]))
        if (!isBlockEditable( rRangeList[i]))
            return false;
    }
    return true;
diff --git a/sc/source/core/tool/chartarr.cxx b/sc/source/core/tool/chartarr.cxx
index 6b020b0..ef73e57 100644
--- a/sc/source/core/tool/chartarr.cxx
+++ b/sc/source/core/tool/chartarr.cxx
@@ -68,8 +68,8 @@ ScMemChart* ScChartArray::CreateMemChart()
        return CreateMemChartMulti();
    else if ( nCount == 1 )
    {
        ScRange* pR = aRangeListRef->front();
        if ( pR->aStart.Tab() != pR->aEnd.Tab() )
        const ScRange & rR = aRangeListRef->front();
        if ( rR.aStart.Tab() != rR.aEnd.Tab() )
            return CreateMemChartMulti();
        else
            return CreateMemChartSingle();
@@ -129,7 +129,7 @@ ScMemChart* ScChartArray::CreateMemChartSingle()
    SCROW nRow2;
    SCTAB nTab2;
    ScRangeListRef aRangeListRef(GetRangeList());
    aRangeListRef->front()->GetVars( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );
    aRangeListRef->front().GetVars( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );

    SCCOL nStrCol = nCol1; // remember for labeling
    SCROW nStrRow = nRow1;
diff --git a/sc/source/core/tool/charthelper.cxx b/sc/source/core/tool/charthelper.cxx
index 12e05fa..79140b9 100644
--- a/sc/source/core/tool/charthelper.cxx
+++ b/sc/source/core/tool/charthelper.cxx
@@ -76,21 +76,21 @@ bool lcl_AdjustRanges( ScRangeList& rRanges, SCTAB nSourceTab, SCTAB nDestTab, S

    for ( size_t i=0, nCount = rRanges.size(); i < nCount; i++ )
    {
        ScRange* pRange = rRanges[ i ];
        if ( pRange->aStart.Tab() == nSourceTab && pRange->aEnd.Tab() == nSourceTab )
        ScRange & rRange = rRanges[ i ];
        if ( rRange.aStart.Tab() == nSourceTab && rRange.aEnd.Tab() == nSourceTab )
        {
            pRange->aStart.SetTab( nDestTab );
            pRange->aEnd.SetTab( nDestTab );
            rRange.aStart.SetTab( nDestTab );
            rRange.aEnd.SetTab( nDestTab );
            bChanged = true;
        }
        if ( pRange->aStart.Tab() >= nTabCount )
        if ( rRange.aStart.Tab() >= nTabCount )
        {
            pRange->aStart.SetTab( nTabCount > 0 ? ( nTabCount - 1 ) : 0 );
            rRange.aStart.SetTab( nTabCount > 0 ? ( nTabCount - 1 ) : 0 );
            bChanged = true;
        }
        if ( pRange->aEnd.Tab() >= nTabCount )
        if ( rRange.aEnd.Tab() >= nTabCount )
        {
            pRange->aEnd.SetTab( nTabCount > 0 ? ( nTabCount - 1 ) : 0 );
            rRange.aEnd.SetTab( nTabCount > 0 ? ( nTabCount - 1 ) : 0 );
            bChanged = true;
        }
    }
@@ -417,8 +417,7 @@ void ScChartHelper::CreateProtectedChartListenersAndNotify( ScDocument* pDoc, co
                        {
                            tools::Rectangle aRectangle = pSdrOle2Obj->GetSnapRect();
                            ScRange aRange( pDoc->GetRange( nTab, aRectangle ) );
                            ScRangeList aChangeRanges;
                            aChangeRanges.Append( aRange );
                            ScRangeList aChangeRanges( aRange );

                            uno::Sequence< beans::PropertyValue > aProperties( 1 );
                            aProperties[ 0 ].Name = "Name";
diff --git a/sc/source/core/tool/chartpos.cxx b/sc/source/core/tool/chartpos.cxx
index db2469d..fb78be8 100644
--- a/sc/source/core/tool/chartpos.cxx
+++ b/sc/source/core/tool/chartpos.cxx
@@ -90,8 +90,7 @@ ScChartPositioner::~ScChartPositioner()

void ScChartPositioner::SetRangeList( const ScRange& rRange )
{
    aRangeListRef = new ScRangeList;
    aRangeListRef->Append( rRange );
    aRangeListRef = new ScRangeList( rRange );
    InvalidateGlue();
}

@@ -105,7 +104,7 @@ void ScChartPositioner::GlueState()
    {
        if (  !aRangeListRef->empty() )
        {
            pR = aRangeListRef->front();
            pR = &aRangeListRef->front();
            if ( pR->aStart.Tab() == pR->aEnd.Tab() )
                eGlue = ScChartGlue::NONE;
            else
@@ -122,7 +121,7 @@ void ScChartPositioner::GlueState()
        return;
    }

    pR = aRangeListRef->front();
    pR = &aRangeListRef->front();
    nStartCol = pR->aStart.Col();
    nStartRow = pR->aStart.Row();
    SCCOL nMaxCols, nEndCol;
@@ -143,7 +142,7 @@ void ScChartPositioner::GlueState()

        // in last pass; i = nRanges so don't use at()
        if ( i < nRanges )
            pR = (*aRangeListRef)[i];
            pR = &(*aRangeListRef)[i];
    }
    SCCOL nC = nEndCol - nStartCol + 1;
    if ( nC == 1 )
@@ -176,7 +175,7 @@ void ScChartPositioner::GlueState()
    SCROW nRow, nRow1, nRow2;
    for ( size_t i = 0, nRanges = aRangeListRef->size(); i < nRanges; ++i )
    {   // mark selections as used in 2D
        pR = (*aRangeListRef)[i];
        pR = &(*aRangeListRef)[i];
        nCol1 = pR->aStart.Col() - nStartCol;
        nCol2 = pR->aEnd.Col() - nStartCol;
        nRow1 = pR->aStart.Row() - nStartRow;
@@ -274,7 +273,7 @@ void ScChartPositioner::CheckColRowHeaders()
    GlueState();
    if ( aRangeListRef->size() == 1 )
    {
        aRangeListRef->front()->GetVars( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );
        aRangeListRef->front().GetVars( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );
        if ( nCol1 > nCol2 || nRow1 > nRow2 )
            bColStrings = bRowStrings = false;
        else
@@ -299,8 +298,8 @@ void ScChartPositioner::CheckColRowHeaders()
              ++i
            )
        {
            ScRange* pR = (*aRangeListRef)[i];
            pR->GetVars( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );
            const ScRange & rR = (*aRangeListRef)[i];
            rR.GetVars( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );
            bool bTopRow = (nRow1 == nStartRow);
            if ( bRowStrings && (bVert || nCol1 == nStartCol) )
            {   // NONE or ROWS: RowStrings in every selection possible
@@ -362,8 +361,8 @@ void ScChartPositioner::CreatePositionMap()
    SCROW nNoGlueRow = 0;
    for ( size_t i = 0, nRanges = aRangeListRef->size(); i < nRanges; ++i )
    {
        ScRange* pR = (*aRangeListRef)[i];
        pR->GetVars( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );
        const ScRange & rR = (*aRangeListRef)[i];
        rR.GetVars( nCol1, nRow1, nTab1, nCol2, nRow2, nTab2 );
        for ( nTab = nTab1; nTab <= nTab2; nTab++ )
        {
            // nTab in ColKey to allow to have the same col/row in another table
diff --git a/sc/source/core/tool/dbdata.cxx b/sc/source/core/tool/dbdata.cxx
index efb3f15..75ff41b 100644
--- a/sc/source/core/tool/dbdata.cxx
+++ b/sc/source/core/tool/dbdata.cxx
@@ -1398,11 +1398,11 @@ void ScDBCollection::RefreshDirtyTableColumnNames()
{
    for (size_t i=0; i < maNamedDBs.maDirtyTableColumnNames.size(); ++i)
    {
        const ScRange* pRange = maNamedDBs.maDirtyTableColumnNames[i];
        const ScRange & rRange = maNamedDBs.maDirtyTableColumnNames[i];
        for (auto const& it : maNamedDBs)
        {
            if (it->AreTableColumnNamesDirty())
                it->RefreshTableColumnNames( &maNamedDBs.mrDoc, *pRange);
                it->RefreshTableColumnNames( &maNamedDBs.mrDoc, rRange);
        }
    }
    maNamedDBs.maDirtyTableColumnNames.RemoveAll();
diff --git a/sc/source/core/tool/rangelst.cxx b/sc/source/core/tool/rangelst.cxx
index 0513d25..3b68a8fd 100644
--- a/sc/source/core/tool/rangelst.cxx
+++ b/sc/source/core/tool/rangelst.cxx
@@ -42,9 +42,9 @@ class FindEnclosingRange
{
public:
    explicit FindEnclosingRange(const T& rTest) : mrTest(rTest) {}
    bool operator() (const ScRange* pRange) const
    bool operator() (const ScRange & rRange) const
    {
        return pRange->In(mrTest);
        return rRange.In(mrTest);
    }
private:
    const T& mrTest;
@@ -55,9 +55,9 @@ class FindRangeIn
{
public:
    FindRangeIn(const T& rTest) : mrTest(rTest) {}
    bool operator() (const ScRange* pRange) const
    bool operator() (const ScRange& rRange) const
    {
        return mrTest.In(*pRange);
        return mrTest.In(rRange);
    }
private:
    const T& mrTest;
@@ -68,9 +68,9 @@ class FindIntersectingRange
{
public:
    explicit FindIntersectingRange(const T& rTest) : mrTest(rTest) {}
    bool operator() (const ScRange* pRange) const
    bool operator() (const ScRange & rRange) const
    {
        return pRange->Intersects(mrTest);
        return rRange.Intersects(mrTest);
    }
private:
    const T& mrTest;
@@ -79,13 +79,13 @@ private:
class AppendToList
{
public:
    explicit AppendToList(vector<ScRange*>& rRanges) : mrRanges(rRanges) {}
    void operator() (const ScRange* p)
    explicit AppendToList(vector<ScRange>& rRanges) : mrRanges(rRanges) {}
    void operator() (const ScRange& r)
    {
        mrRanges.push_back(new ScRange(*p));
        mrRanges.push_back(r);
    }
private:
    vector<ScRange*>& mrRanges;
    vector<ScRange>& mrRanges;
};

class CountCells
@@ -93,12 +93,12 @@ class CountCells
public:
    CountCells() : mnCellCount(0) {}

    void operator() (const ScRange* p)
    void operator() (const ScRange & r)
    {
        mnCellCount +=
              size_t(p->aEnd.Col() - p->aStart.Col() + 1)
            * size_t(p->aEnd.Row() - p->aStart.Row() + 1)
            * size_t(p->aEnd.Tab() - p->aStart.Tab() + 1);
              size_t(r.aEnd.Col() - r.aStart.Col() + 1)
            * size_t(r.aEnd.Row() - r.aStart.Row() + 1)
            * size_t(r.aEnd.Tab() - r.aStart.Tab() + 1);
    }

    size_t getCellCount() const { return mnCellCount; }
@@ -119,9 +119,9 @@ public:
        mbFirst(true),
        mbFullAddressNotation(bFullAddressNotation) {}

    void operator() (const ScRange* p)
    void operator() (const ScRange & r)
    {
        OUString aStr(p->Format(mnFlags, mpDoc, meConv, mbFullAddressNotation));
        OUString aStr(r.Format(mnFlags, mpDoc, meConv, mbFullAddressNotation));
        if (mbFirst)
            mbFirst = false;
        else
@@ -175,7 +175,7 @@ ScRefFlags ScRangeList::Parse( const OUString& rStr, const ScDocument* pDoc,
                applyStartToEndFlags(nRes, nTmp1);

            if ( nRes & ScRefFlags::VALID )
                Append( aRange );
                push_back( aRange );
            nResult &= nRes;        // all common bits are preserved
        }
        while (nPos >= 0);
@@ -200,11 +200,11 @@ void ScRangeList::Format( OUString& rStr, ScRefFlags nFlags, ScDocument* pDoc,
    rStr = aStr;
}

void ScRangeList::Join( const ScRange& r, bool bIsInList )
void ScRangeList::Join( const ScRange& rNewRange, bool bIsInList )
{
    if ( maRanges.empty() )
    {
        Append( r );
        push_back( rNewRange );
        return ;
    }

@@ -219,22 +219,22 @@ void ScRangeList::Join( const ScRange& r, bool bIsInList )

    if (!bIsInList)
    {
        const SCROW nRow1 = r.aStart.Row();
        const SCROW nRow1 = rNewRange.aStart.Row();
        if (nRow1 > mnMaxRowUsed + 1)
        {
            Append( r );
            push_back( rNewRange );
            return;
        }
        else if (nRow1 == mnMaxRowUsed + 1)
        {
            // Check if we can simply enlarge the last range.
            ScRange* p = maRanges.back();
            if (p->aEnd.Row() + 1 == nRow1 &&
                    p->aStart.Col() == r.aStart.Col() && p->aEnd.Col() == r.aEnd.Col() &&
                    p->aStart.Tab() == r.aStart.Tab() && p->aEnd.Tab() == r.aEnd.Tab())
            ScRange & rLast = maRanges.back();
            if (rLast.aEnd.Row() + 1 == nRow1 &&
                    rLast.aStart.Col() == rNewRange.aStart.Col() && rLast.aEnd.Col() == rNewRange.aEnd.Col() &&
                    rLast.aStart.Tab() == rNewRange.aStart.Tab() && rLast.aEnd.Tab() == rNewRange.aEnd.Tab())
            {
                const SCROW nRow2 = r.aEnd.Row();
                p->aEnd.SetRow( nRow2 );
                const SCROW nRow2 = rNewRange.aEnd.Row();
                rLast.aEnd.SetRow( nRow2 );
                mnMaxRowUsed = nRow2;
                return;
            }
@@ -242,7 +242,7 @@ void ScRangeList::Join( const ScRange& r, bool bIsInList )
    }

    bool bJoinedInput = false;
    const ScRange* pOver = &r;
    const ScRange* pOver = &rNewRange;

Label_Range_Join:

@@ -257,14 +257,14 @@ Label_Range_Join:
    size_t nOverPos = std::numeric_limits<size_t>::max();
    for (size_t i = 0; i < maRanges.size(); ++i)
    {
        ScRange* p = maRanges[i];
        if ( p == pOver )
        ScRange & rRange = maRanges[i];
        if ( &rRange == pOver )
        {
            nOverPos = i;
            continue;           // the same one, continue with the next
        }
        bool bJoined = false;
        if ( p->In( *pOver ) )
        if ( rRange.In( *pOver ) )
        {   // range pOver included in or identical to range p
            // XXX if we never used Append() before Join() we could remove
            // pOver and end processing, but it is not guaranteed and there can
@@ -277,40 +277,40 @@ Label_Range_Join:
                break;  // for
            }
        }
        else if ( pOver->In( *p ) )
        {   // range p included in range pOver, make pOver the new range
            *p = *pOver;
        else if ( pOver->In( rRange ) )
        {   // range rRange included in range pOver, make pOver the new range
            rRange = *pOver;
            bJoined = true;
        }
        if ( !bJoined && p->aStart.Tab() == nTab1 && p->aEnd.Tab() == nTab2 )
        if ( !bJoined && rRange.aStart.Tab() == nTab1 && rRange.aEnd.Tab() == nTab2 )
        {   // 2D
            if ( p->aStart.Col() == nCol1 && p->aEnd.Col() == nCol2 )
            if ( rRange.aStart.Col() == nCol1 && rRange.aEnd.Col() == nCol2 )
            {
                if ( p->aStart.Row() <= nRow2+1 &&
                     p->aStart.Row() >= nRow1 )
                if ( rRange.aStart.Row() <= nRow2+1 &&
                     rRange.aStart.Row() >= nRow1 )
                {   // top
                    p->aStart.SetRow( nRow1 );
                    rRange.aStart.SetRow( nRow1 );
                    bJoined = true;
                }
                else if ( p->aEnd.Row() >= nRow1-1 &&
                          p->aEnd.Row() <= nRow2 )
                else if ( rRange.aEnd.Row() >= nRow1-1 &&
                          rRange.aEnd.Row() <= nRow2 )
                {   // bottom
                    p->aEnd.SetRow( nRow2 );
                    rRange.aEnd.SetRow( nRow2 );
                    bJoined = true;
                }
            }
            else if ( p->aStart.Row() == nRow1 && p->aEnd.Row() == nRow2 )
            else if ( rRange.aStart.Row() == nRow1 && rRange.aEnd.Row() == nRow2 )
            {
                if ( p->aStart.Col() <= nCol2+1 &&
                     p->aStart.Col() >= nCol1 )
                if ( rRange.aStart.Col() <= nCol2+1 &&
                     rRange.aStart.Col() >= nCol1 )
                {   // left
                    p->aStart.SetCol( nCol1 );
                    rRange.aStart.SetCol( nCol1 );
                    bJoined = true;
                }
                else if ( p->aEnd.Col() >= nCol1-1 &&
                          p->aEnd.Col() <= nCol2 )
                else if ( rRange.aEnd.Col() >= nCol1-1 &&
                          rRange.aEnd.Col() <= nCol2 )
                {   // right
                    p->aEnd.SetCol( nCol2 );
                    rRange.aEnd.SetCol( nCol2 );
                    bJoined = true;
                }
            }
@@ -325,7 +325,7 @@ Label_Range_Join:
                {
                    for (size_t nOver = 0, nRanges = maRanges.size(); nOver < nRanges; ++nOver)
                    {
                        if (maRanges[nOver] == pOver)
                        if (&maRanges[nOver] == pOver)
                        {
                            Remove(nOver);
                            break;
@@ -334,13 +334,13 @@ Label_Range_Join:
                }
            }
            bJoinedInput = true;
            pOver = p;
            pOver = &rRange;
            bIsInList = true;
            goto Label_Range_Join;
        }
    }
    if (  !bIsInList && !bJoinedInput )
        Append( r );
        push_back( rNewRange );
}

bool ScRangeList::operator==( const ScRangeList& r ) const
@@ -351,13 +351,13 @@ bool ScRangeList::operator==( const ScRangeList& r ) const
    if (maRanges.size() != r.maRanges.size())
        return false;

    vector<ScRange*>::const_iterator itr1 = maRanges.begin(), itrEnd = maRanges.end();
    vector<ScRange*>::const_iterator itr2 = r.maRanges.begin();
    auto itr1 = maRanges.begin(), itrEnd = maRanges.end();
    auto itr2 = r.maRanges.begin();
    for (; itr1 != itrEnd; ++itr1, ++itr2)
    {
        const ScRange* p1 = *itr1;
        const ScRange* p2 = *itr2;
        if (*p1 != *p2)
        const ScRange& r1 = *itr1;
        const ScRange& r2 = *itr2;
        if (r1 != r2)
            return false;
    }
    return true;
@@ -413,14 +413,14 @@ bool ScRangeList::UpdateReference(
    iterator itr = maRanges.begin(), itrEnd = maRanges.end();
    for (; itr != itrEnd; ++itr)
    {
        ScRange* pR = *itr;
        ScRange& rR = *itr;
        SCCOL theCol1;
        SCROW theRow1;
        SCTAB theTab1;
        SCCOL theCol2;
        SCROW theRow2;
        SCTAB theTab2;
        pR->GetVars( theCol1, theRow1, theTab1, theCol2, theRow2, theTab2 );
        rR.GetVars( theCol1, theRow1, theTab1, theCol2, theRow2, theTab2 );
        if ( ScRefUpdate::Update( pDoc, eUpdateRefMode,
                nCol1, nRow1, nTab1, nCol2, nRow2, nTab2,
                nDx, nDy, nDz,
@@ -428,8 +428,8 @@ bool ScRangeList::UpdateReference(
                != UR_NOTHING )
        {
            bChanged = true;
            pR->aStart.Set( theCol1, theRow1, theTab1 );
            pR->aEnd.Set( theCol2, theRow2, theTab2 );
            rR.aStart.Set( theCol1, theRow1, theTab1 );
            rR.aEnd.Set( theCol2, theRow2, theTab2 );
            if (mnMaxRowUsed < theRow2)
                mnMaxRowUsed = theRow2;
        }
@@ -440,7 +440,7 @@ bool ScRangeList::UpdateReference(
        if( nDx < 0 || nDy < 0 )
        {
            size_t n = maRanges.size();
            Join(*maRanges[n-1], true);
            Join(maRanges[n-1], true);
        }
    }

@@ -453,14 +453,14 @@ void ScRangeList::InsertRow( SCTAB nTab, SCCOL nColStart, SCCOL nColEnd, SCROW n
    for(iterator it = maRanges.begin(), itEnd = maRanges.end(); it != itEnd;
            ++it)
    {
        ScRange* pRange = *it;
        if(pRange->aStart.Tab() <= nTab && pRange->aEnd.Tab() >= nTab)
        ScRange & rRange = *it;
        if(rRange.aStart.Tab() <= nTab && rRange.aEnd.Tab() >= nTab)
        {
            if(pRange->aEnd.Row() == nRowPos - 1 && (nColStart <= pRange->aEnd.Col() || nColEnd >= pRange->aStart.Col()))
            if(rRange.aEnd.Row() == nRowPos - 1 && (nColStart <= rRange.aEnd.Col() || nColEnd >= rRange.aStart.Col()))
            {
                SCCOL nNewRangeStartCol = std::max<SCCOL>(nColStart, pRange->aStart.Col());
                SCCOL nNewRangeEndCol = std::min<SCCOL>(nColEnd, pRange->aEnd.Col());
                SCROW nNewRangeStartRow = pRange->aEnd.Row() + 1;
                SCCOL nNewRangeStartCol = std::max<SCCOL>(nColStart, rRange.aStart.Col());
                SCCOL nNewRangeEndCol = std::min<SCCOL>(nColEnd, rRange.aEnd.Col());
                SCROW nNewRangeStartRow = rRange.aEnd.Row() + 1;
                SCROW nNewRangeEndRow = nRowPos + nSize - 1;
                aNewRanges.emplace_back(nNewRangeStartCol, nNewRangeStartRow, nTab, nNewRangeEndCol,
                            nNewRangeEndRow, nTab);
@@ -486,14 +486,14 @@ void ScRangeList::InsertCol( SCTAB nTab, SCROW nRowStart, SCROW nRowEnd, SCCOL n
    for(iterator it = maRanges.begin(), itEnd = maRanges.end(); it != itEnd;
            ++it)
    {
        ScRange* pRange = *it;
        if(pRange->aStart.Tab() <= nTab && pRange->aEnd.Tab() >= nTab)
        ScRange & rRange = *it;
        if(rRange.aStart.Tab() <= nTab && rRange.aEnd.Tab() >= nTab)
        {
            if(pRange->aEnd.Col() == nColPos - 1 && (nRowStart <= pRange->aEnd.Row() || nRowEnd >= pRange->aStart.Row()))
            if(rRange.aEnd.Col() == nColPos - 1 && (nRowStart <= rRange.aEnd.Row() || nRowEnd >= rRange.aStart.Row()))
            {
                SCROW nNewRangeStartRow = std::max<SCROW>(nRowStart, pRange->aStart.Row());
                SCROW nNewRangeEndRow = std::min<SCROW>(nRowEnd, pRange->aEnd.Row());
                SCCOL nNewRangeStartCol = pRange->aEnd.Col() + 1;
                SCROW nNewRangeStartRow = std::max<SCROW>(nRowStart, rRange.aStart.Row());
                SCROW nNewRangeEndRow = std::min<SCROW>(nRowEnd, rRange.aEnd.Row());
                SCCOL nNewRangeStartCol = rRange.aEnd.Col() + 1;
                SCCOL nNewRangeEndCol = nColPos + nSize - 1;
                aNewRanges.emplace_back(nNewRangeStartCol, nNewRangeStartRow, nTab, nNewRangeEndCol,
                            nNewRangeEndRow, nTab);
@@ -539,12 +539,12 @@ bool checkForOneRange(
    return nDeleteX1 <= nX1 && nX2 <= nDeleteX2 && (nDeleteY1 <= nY1 || nY2 <= nDeleteY2);
}

bool handleOneRange( const ScRange& rDeleteRange, ScRange* p )
bool handleOneRange( const ScRange& rDeleteRange, ScRange& r )
{
    const ScAddress& rDelStart = rDeleteRange.aStart;
    const ScAddress& rDelEnd = rDeleteRange.aEnd;
    ScAddress aPStart = p->aStart;
    ScAddress aPEnd = p->aEnd;
    ScAddress aPStart = r.aStart;
    ScAddress aPEnd = r.aEnd;
    SCCOL nDeleteCol1 = rDelStart.Col();
    SCCOL nDeleteCol2 = rDelEnd.Col();
    SCROW nDeleteRow1 = rDelStart.Row();
@@ -565,7 +565,7 @@ bool handleOneRange( const ScRange& rDeleteRange, ScRange* p )
            // |      |
            // +------+ (xxx) = deleted region

            p->aStart.SetRow(nDeleteRow1+1);
            r.aStart.SetRow(nDeleteRow1+1);
            return true;
        }
        else if (nRow2 <= nDeleteRow2)
@@ -576,7 +576,7 @@ bool handleOneRange( const ScRange& rDeleteRange, ScRange* p )
            // |xxxxxx|
            // +------+ (xxx) = deleted region

            p->aEnd.SetRow(nDeleteRow1-1);
            r.aEnd.SetRow(nDeleteRow1-1);
            return true;
        }
    }
@@ -591,7 +591,7 @@ bool handleOneRange( const ScRange& rDeleteRange, ScRange* p )
            // |xx|  |
            // +--+--+ (xxx) = deleted region

            p->aStart.SetCol(nDeleteCol2+1);
            r.aStart.SetCol(nDeleteCol2+1);
            return true;
        }
        else if (nCol2 <= nDeleteCol2)
@@ -602,19 +602,19 @@ bool handleOneRange( const ScRange& rDeleteRange, ScRange* p )
            // |  |xx|
            // +--+--+ (xxx) = deleted region

            p->aEnd.SetCol(nDeleteCol1-1);
            r.aEnd.SetCol(nDeleteCol1-1);
            return true;
        }
    }
    return false;
}

bool handleTwoRanges( const ScRange& rDeleteRange, ScRange* p, std::vector<ScRange>& rNewRanges )
bool handleTwoRanges( const ScRange& rDeleteRange, ScRange& r, std::vector<ScRange>& rNewRanges )
{
    const ScAddress& rDelStart = rDeleteRange.aStart;
    const ScAddress& rDelEnd = rDeleteRange.aEnd;
    ScAddress aPStart = p->aStart;
    ScAddress aPEnd = p->aEnd;
    ScAddress aPStart = r.aStart;
    ScAddress aPEnd = r.aEnd;
    SCCOL nDeleteCol1 = rDelStart.Col();
    SCCOL nDeleteCol2 = rDelEnd.Col();
    SCROW nDeleteRow1 = rDelStart.Row();
@@ -645,7 +645,7 @@ bool handleTwoRanges( const ScRange& rDeleteRange, ScRange* p, std::vector<ScRan
            ScRange aNewRange( nCol1, nDeleteRow1, nTab, nDeleteCol1-1, nRow2, nTab ); // 2
            rNewRanges.push_back(aNewRange);

            p->aEnd.SetRow(nDeleteRow1-1); // 1
            r.aEnd.SetRow(nDeleteRow1-1); // 1
            return true;
        }
        else if (nRow1 <= nDeleteRow2 && nDeleteRow2 < nRow2 && nDeleteRow1 <= nRow1)
@@ -664,7 +664,7 @@ bool handleTwoRanges( const ScRange& rDeleteRange, ScRange* p, std::vector<ScRan
            ScRange aNewRange( aPStart, ScAddress(nDeleteCol1-1, nRow2, nTab) ); // 1
            rNewRanges.push_back(aNewRange);

            p->aStart.SetRow(nDeleteRow2+1); // 2
            r.aStart.SetRow(nDeleteRow2+1); // 2
            return true;
        }
    }
@@ -689,7 +689,7 @@ bool handleTwoRanges( const ScRange& rDeleteRange, ScRange* p, std::vector<ScRan
            ScRange aNewRange( ScAddress( nDeleteCol2+1, nDeleteRow1, nTab ), aPEnd ); // 2
            rNewRanges.push_back(aNewRange);

            p->aEnd.SetRow(nDeleteRow1-1); // 1
            r.aEnd.SetRow(nDeleteRow1-1); // 1
            return true;
        }
        else if (nRow1 <= nDeleteRow2 && nDeleteRow2 < nRow2 && nDeleteRow1 <= nRow1)
@@ -708,7 +708,7 @@ bool handleTwoRanges( const ScRange& rDeleteRange, ScRange* p, std::vector<ScRan
            ScRange aNewRange(nDeleteCol2+1, nRow1, nTab, nCol2, nDeleteRow2, nTab); // 1
            rNewRanges.push_back(aNewRange);

            p->aStart.SetRow(nDeleteRow2+1); // 2
            r.aStart.SetRow(nDeleteRow2+1); // 2
            return true;
        }
    }
@@ -725,7 +725,7 @@ bool handleTwoRanges( const ScRange& rDeleteRange, ScRange* p, std::vector<ScRan
        ScRange aNewRange( aPStart, ScAddress(nCol2, nDeleteRow1-1, nTab) ); // 1
        rNewRanges.push_back(aNewRange);

        p->aStart.SetRow(nDeleteRow2+1); // 2
        r.aStart.SetRow(nDeleteRow2+1); // 2
        return true;
    }
    else if (nCol1 < nDeleteCol1 && nDeleteCol2 < nCol2 && nDeleteRow1 <= nRow1 && nRow2 <= nDeleteRow2)
@@ -741,7 +741,7 @@ bool handleTwoRanges( const ScRange& rDeleteRange, ScRange* p, std::vector<ScRan
        ScRange aNewRange( aPStart, ScAddress(nDeleteCol1-1, nRow2, nTab) ); // 1
        rNewRanges.push_back(aNewRange);

        p->aStart.SetCol(nDeleteCol2+1); // 2
        r.aStart.SetCol(nDeleteCol2+1); // 2
        return true;
    }

@@ -785,12 +785,12 @@ bool checkForThreeRanges(
    return false;
}

bool handleThreeRanges( const ScRange& rDeleteRange, ScRange* p, std::vector<ScRange>& rNewRanges )
bool handleThreeRanges( const ScRange& rDeleteRange, ScRange& r, std::vector<ScRange>& rNewRanges )
{
    const ScAddress& rDelStart = rDeleteRange.aStart;
    const ScAddress& rDelEnd = rDeleteRange.aEnd;
    ScAddress aPStart = p->aStart;
    ScAddress aPEnd = p->aEnd;
    ScAddress aPStart = r.aStart;
    ScAddress aPEnd = r.aEnd;
    SCCOL nDeleteCol1 = rDelStart.Col();
    SCCOL nDeleteCol2 = rDelEnd.Col();
    SCROW nDeleteRow1 = rDelStart.Row();
@@ -819,7 +819,7 @@ bool handleThreeRanges( const ScRange& rDeleteRange, ScRange* p, std::vector<ScR
            aNewRange = ScRange(ScAddress(nDeleteCol1, nDeleteRow2+1, nTab), aPEnd); // 3
            rNewRanges.push_back(aNewRange);

            p->aEnd.SetCol(nDeleteCol1-1); // 1
            r.aEnd.SetCol(nDeleteCol1-1); // 1
        }
        else
        {
@@ -837,7 +837,7 @@ bool handleThreeRanges( const ScRange& rDeleteRange, ScRange* p, std::vector<ScR
            aNewRange = ScRange(nCol1, nDeleteRow2+1, nTab, nDeleteCol2, nRow2, nTab); // 3
            rNewRanges.push_back(aNewRange);

            p->aStart.SetCol(nDeleteCol2+1); // 2
            r.aStart.SetCol(nDeleteCol2+1); // 2
        }
        return true;
    }
@@ -861,7 +861,7 @@ bool handleThreeRanges( const ScRange& rDeleteRange, ScRange* p, std::vector<ScR
            aNewRange = ScRange(ScAddress(nDeleteCol2+1, nDeleteRow1, nTab), aPEnd); // 3
            rNewRanges.push_back( aNewRange );

            p->aEnd.SetRow(nDeleteRow1-1); // 1
            r.aEnd.SetRow(nDeleteRow1-1); // 1
        }
        else
        {
@@ -880,7 +880,7 @@ bool handleThreeRanges( const ScRange& rDeleteRange, ScRange* p, std::vector<ScR
            aNewRange = ScRange(nDeleteCol2+1, nRow1, nTab, nCol2, nDeleteRow2, nTab); // 2
            rNewRanges.push_back( aNewRange );

            p->aStart.SetRow(nDeleteRow2+1); // 3
            r.aStart.SetRow(nDeleteRow2+1); // 3
        }
        return true;
    }
@@ -888,12 +888,12 @@ bool handleThreeRanges( const ScRange& rDeleteRange, ScRange* p, std::vector<ScR
    return false;
}

bool handleFourRanges( const ScRange& rDelRange, ScRange* p, std::vector<ScRange>& rNewRanges )
bool handleFourRanges( const ScRange& rDelRange, ScRange& r, std::vector<ScRange>& rNewRanges )
{
    const ScAddress& rDelStart = rDelRange.aStart;
    const ScAddress& rDelEnd = rDelRange.aEnd;
    ScAddress aPStart = p->aStart;
    ScAddress aPEnd = p->aEnd;
    ScAddress aPStart = r.aStart;
    ScAddress aPEnd = r.aEnd;
    SCCOL nDeleteCol1 = rDelStart.Col();
    SCCOL nDeleteCol2 = rDelEnd.Col();
    SCROW nDeleteRow1 = rDelStart.Row();
@@ -926,7 +926,7 @@ bool handleFourRanges( const ScRange& rDelRange, ScRange* p, std::vector<ScRange
        aNewRange = ScRange(nDeleteCol2+1, nDeleteRow1, nTab, nCol2, nDeleteRow2, nTab); // 3
        rNewRanges.push_back( aNewRange );

        p->aEnd.SetRow(nDeleteRow1-1); // 1
        r.aEnd.SetRow(nDeleteRow1-1); // 1

        return true;
    }
@@ -960,7 +960,7 @@ bool ScRangeList::DeleteArea( SCCOL nCol1, SCROW nRow1, SCTAB nTab1,
        // 1. Delete area and pRange intersect
        // 2. Delete area and pRange are not intersecting
        // checking for 2 and if true skip this range
        if(!(*itr)->Intersects(aRange))
        if(!itr->Intersects(aRange))
            continue;

        // We get between 1 and 4 ranges from the difference of the first with the second
@@ -1016,14 +1016,14 @@ const ScRange* ScRangeList::Find( const ScAddress& rAdr ) const
{
    const_iterator itr = find_if(
        maRanges.begin(), maRanges.end(), FindEnclosingRange<ScAddress>(rAdr));
    return itr == maRanges.end() ? nullptr : *itr;
    return itr == maRanges.end() ? nullptr : &*itr;
}

ScRange* ScRangeList::Find( const ScAddress& rAdr )
{
    iterator itr = find_if(
        maRanges.begin(), maRanges.end(), FindEnclosingRange<ScAddress>(rAdr));
    return itr == maRanges.end() ? nullptr : *itr;
    return itr == maRanges.end() ? nullptr : &*itr;
}

ScRangeList::ScRangeList() : mnMaxRowUsed(-1) {}
@@ -1037,11 +1037,18 @@ ScRangeList::ScRangeList( const ScRangeList& rList ) :
    mnMaxRowUsed = rList.mnMaxRowUsed;
}

ScRangeList::ScRangeList( const ScRangeList&& rList ) :
    SvRefBase(),
    maRanges(rList.maRanges),
    mnMaxRowUsed(rList.mnMaxRowUsed)
{
}

ScRangeList::ScRangeList( const ScRange& rRange ) :
    mnMaxRowUsed(-1)
{
    maRanges.reserve(1);
    Append(rRange);
    push_back(rRange);
}

ScRangeList& ScRangeList::operator=(const ScRangeList& rList)
@@ -1053,10 +1060,11 @@ ScRangeList& ScRangeList::operator=(const ScRangeList& rList)
    return *this;
}

void ScRangeList::Append( const ScRange& rRange )
ScRangeList& ScRangeList::operator=(ScRangeList&& rList)
{
    ScRange* pR = new ScRange( rRange );
    push_back( pR );
    maRanges = std::move(rList.maRanges);
    mnMaxRowUsed = rList.mnMaxRowUsed;
    return *this;
}

bool ScRangeList::Intersects( const ScRange& rRange ) const
@@ -1080,16 +1088,11 @@ void ScRangeList::Remove(size_t nPos)
    if (maRanges.size() <= nPos)
        // Out-of-bound condition.  Bail out.
        return;

    iterator itr = maRanges.begin();
    advance(itr, nPos);
    delete *itr;
    maRanges.erase(itr);
    maRanges.erase(maRanges.begin() + nPos);
}

void ScRangeList::RemoveAll()
{
    for_each(maRanges.begin(), maRanges.end(), std::default_delete<ScRange>());
    maRanges.clear();
}

@@ -1099,11 +1102,11 @@ ScRange ScRangeList::Combine() const
        return ScRange();

    const_iterator itr = maRanges.begin(), itrEnd = maRanges.end();
    ScRange aRet = **itr;
    ScRange aRet = *itr;
    ++itr;
    for (; itr != itrEnd; ++itr)
    {
        const ScRange& r = **itr;
        const ScRange& r = *itr;
        SCROW nRow1 = r.aStart.Row(), nRow2 = r.aEnd.Row();
        SCCOL nCol1 = r.aStart.Col(), nCol2 = r.aEnd.Col();
        SCTAB nTab1 = r.aStart.Tab(), nTab2 = r.aEnd.Tab();
@@ -1123,51 +1126,11 @@ ScRange ScRangeList::Combine() const
    return aRet;
}

bool ScRangeList::empty() const
void ScRangeList::push_back(const ScRange & r)
{
    return maRanges.empty();
}

size_t ScRangeList::size() const
{
    return maRanges.size();
}

ScRange* ScRangeList::operator [](size_t idx)
{
    return maRanges[idx];
}

const ScRange* ScRangeList::operator [](size_t idx) const
{
    return maRanges[idx];
}

ScRange* ScRangeList::front()
{
    return maRanges.front();
}

const ScRange* ScRangeList::front() const
{
    return maRanges.front();
}

ScRange* ScRangeList::back()
{
    return maRanges.back();
}

const ScRange* ScRangeList::back() const
{
    return maRanges.back();
}

void ScRangeList::push_back(ScRange* p)
{
    maRanges.push_back(p);
    if (mnMaxRowUsed < p->aEnd.Row())
        mnMaxRowUsed = p->aEnd.Row();
    maRanges.push_back(r);
    if (mnMaxRowUsed < r.aEnd.Row())
        mnMaxRowUsed = r.aEnd.Row();
}

void ScRangeList::swap( ScRangeList& r )
@@ -1181,14 +1144,14 @@ ScAddress ScRangeList::GetTopLeftCorner() const
    if(empty())
        return ScAddress();

    ScAddress aAddr = maRanges[0]->aStart;
    ScAddress const * pAddr = &maRanges[0].aStart;
    for(size_t i = 1, n = size(); i < n; ++i)
    {
        if(maRanges[i]->aStart < aAddr)
            aAddr = maRanges[i]->aStart;
        if(maRanges[i].aStart < *pAddr)
            pAddr = &maRanges[i].aStart;
    }

    return aAddr;
    return *pAddr;
}

ScRangeList ScRangeList::GetIntersectedRange(const ScRange& rRange) const
@@ -1197,12 +1160,12 @@ ScRangeList ScRangeList::GetIntersectedRange(const ScRange& rRange) const
    for(const_iterator itr = maRanges.begin(), itrEnd = maRanges.end();
            itr != itrEnd; ++itr)
    {
        if((*itr)->Intersects(rRange))
        if(itr->Intersects(rRange))
        {
            SCCOL nColStart1, nColEnd1, nColStart2, nColEnd2;
            SCROW nRowStart1, nRowEnd1, nRowStart2, nRowEnd2;
            SCTAB nTabStart1, nTabEnd1, nTabStart2, nTabEnd2;
            (*itr)->GetVars(nColStart1, nRowStart1, nTabStart1,
            itr->GetVars(nColStart1, nRowStart1, nTabStart1,
                        nColEnd1, nRowEnd1, nTabEnd1);
            rRange.GetVars(nColStart2, nRowStart2, nTabStart2,
                        nColEnd2, nRowEnd2, nTabEnd2);
diff --git a/sc/source/core/tool/rangeutl.cxx b/sc/source/core/tool/rangeutl.cxx
index 67bd935..153fc21c 100644
--- a/sc/source/core/tool/rangeutl.cxx
+++ b/sc/source/core/tool/rangeutl.cxx
@@ -542,13 +542,13 @@ bool ScRangeStringConverter::GetRangeListFromString(
    sal_Int32 nOffset = 0;
    while( nOffset >= 0 )
    {
        std::unique_ptr<ScRange> pRange( new ScRange );
        ScRange aRange;
        if (
             GetRangeFromString( *pRange, rRangeListStr, pDocument, eConv, nOffset, cSeparator, cQuote ) &&
             GetRangeFromString( aRange, rRangeListStr, pDocument, eConv, nOffset, cSeparator, cQuote ) &&
             (nOffset >= 0)
           )
        {
            rRangeList.push_back( pRange.release() );
            rRangeList.push_back( aRange );
        }
        else if (nOffset > -1)
            bRet = false;
@@ -644,9 +644,8 @@ void ScRangeStringConverter::GetStringFromRangeList(
    {
        for( size_t nIndex = 0, nCount = pRangeList->size(); nIndex < nCount; nIndex++ )
        {
            const ScRange* pRange = (*pRangeList)[nIndex];
            if( pRange )
                GetStringFromRange( sRangeListStr, *pRange, pDocument, eConv, cSeparator, true );
            const ScRange & rRange = (*pRangeList)[nIndex];
            GetStringFromRange( sRangeListStr, rRange, pDocument, eConv, cSeparator, true );
        }
    }
    rString = sRangeListStr;
diff --git a/sc/source/core/tool/reftokenhelper.cxx b/sc/source/core/tool/reftokenhelper.cxx
index d1422f1..af6960e 100644
--- a/sc/source/core/tool/reftokenhelper.cxx
+++ b/sc/source/core/tool/reftokenhelper.cxx
@@ -163,7 +163,7 @@ void ScRefTokenHelper::getRangeListFromTokens(
    {
        ScRange aRange;
        getRangeFromToken(aRange, *itr, rPos);
        rRangeList.Append(aRange);
        rRangeList.push_back(aRange);
    }
}

@@ -187,13 +187,9 @@ void ScRefTokenHelper::getTokensFromRangeList(vector<ScTokenRef>& pTokens, const
    aTokens.reserve(nCount);
    for (size_t i = 0; i < nCount; ++i)
    {
        const ScRange* pRange = rRanges[i];
        if (!pRange)
            // failed.
            return;

        const ScRange & rRange = rRanges[i];
        ScTokenRef pToken;
        ScRefTokenHelper::getTokenFromRange(pToken,* pRange);
        ScRefTokenHelper::getTokenFromRange(pToken, rRange);
        aTokens.push_back(pToken);
    }
    pTokens.swap(aTokens);
diff --git a/sc/source/filter/excel/excform.cxx b/sc/source/filter/excel/excform.cxx
index 499c315..b7c7afa 100644
--- a/sc/source/filter/excel/excform.cxx
+++ b/sc/source/filter/excel/excform.cxx
@@ -1423,7 +1423,7 @@ void ExcelToSc::GetAbsRefs( ScRangeList& rRangeList, XclImpStream& rStrm, std::s
                    nRow1 &= 0x3FFF;
                    nRow2 &= 0x3FFF;
                    if( GetAddressConverter().ConvertRange( aScRange, XclRange( nCol1, nRow1, nCol2, nRow2 ), nTab1, nTab2, true ) )
                        rRangeList.Append( aScRange );
                        rRangeList.push_back( aScRange );
                }
                break;

diff --git a/sc/source/filter/excel/excform8.cxx b/sc/source/filter/excel/excform8.cxx
index ccd2211a..515e89c 100644
--- a/sc/source/filter/excel/excform8.cxx
+++ b/sc/source/filter/excel/excform8.cxx
@@ -1580,7 +1580,7 @@ void ExcelToSc8::GetAbsRefs( ScRangeList& r, XclImpStream& aIn, std::size_t nLen
                    nCol1 &= 0x3FFF;
                    nCol2 &= 0x3FFF;
                    if( GetAddressConverter().ConvertRange( aScRange, XclRange( nCol1, nRow1, nCol2, nRow2 ), nTab1, nTab2, true ) )
                        r.Append( aScRange );
                        r.push_back( aScRange );
                }
                break;
            case 0x1C: // Error Value                           [314 266]
diff --git a/sc/source/filter/excel/xecontent.cxx b/sc/source/filter/excel/xecontent.cxx
index 7eb0f68..473200a 100644
--- a/sc/source/filter/excel/xecontent.cxx
+++ b/sc/source/filter/excel/xecontent.cxx
@@ -258,7 +258,7 @@ void XclExpMergedcells::AppendRange( const ScRange& rRange, sal_uInt32 nBaseXFId
{
    if( GetBiff() == EXC_BIFF8 )
    {
        maMergedRanges.Append( rRange );
        maMergedRanges.push_back( rRange );
        maBaseXFIds.push_back( nBaseXFId );
    }
}
@@ -270,8 +270,8 @@ sal_uInt32 XclExpMergedcells::GetBaseXFId( const ScAddress& rPos ) const
    ScRangeList& rNCRanges = const_cast< ScRangeList& >( maMergedRanges );
    for ( size_t i = 0, nRanges = rNCRanges.size(); i < nRanges; ++i, ++aIt )
    {
        const ScRange* pScRange = rNCRanges[ i ];
        if( pScRange->In( rPos ) )
        const ScRange & rScRange = rNCRanges[ i ];
        if( rScRange.In( rPos ) )
            return *aIt;
    }
    return EXC_XFID_NOTFOUND;
@@ -308,12 +308,10 @@ void XclExpMergedcells::SaveXml( XclExpXmlStream& rStrm )
            FSEND );
    for( size_t i = 0; i < nCount; ++i )
    {
        if( const ScRange* pRange = maMergedRanges[ i ] )
        {
            rWorksheet->singleElement( XML_mergeCell,
                    XML_ref,    XclXmlUtils::ToOString( *pRange ).getStr(),
        const ScRange & rRange = maMergedRanges[ i ];
        rWorksheet->singleElement( XML_mergeCell,
                    XML_ref,    XclXmlUtils::ToOString( rRange ).getStr(),
                    FSEND );
        }
    }
    rWorksheet->endElement( XML_mergeCells );
}
@@ -540,9 +538,9 @@ XclExpLabelranges::XclExpLabelranges( const XclExpRoot& rRoot ) :
    // row labels only over 1 column (restriction of Excel97/2000/XP)
    for ( size_t i = 0, nRanges = maRowRanges.size(); i < nRanges; ++i )
    {
        ScRange* pScRange = maRowRanges[ i ];
        if( pScRange->aStart.Col() != pScRange->aEnd.Col() )
            pScRange->aEnd.SetCol( pScRange->aStart.Col() );
        ScRange & rScRange = maRowRanges[ i ];
        if( rScRange.aStart.Col() != rScRange.aEnd.Col() )
            rScRange.aEnd.SetCol( rScRange.aStart.Col() );
    }
    // col label ranges
    FillRangeList( maColRanges, rRoot.GetDoc().GetColNameRangesRef(), nScTab );
@@ -556,7 +554,7 @@ void XclExpLabelranges::FillRangeList( ScRangeList& rScRanges,
        ScRangePair* pRangePair = (*xLabelRangesRef)[i];
        const ScRange& rScRange = pRangePair->GetRange( 0 );
        if( rScRange.aStart.Tab() == nScTab )
            rScRanges.Append( rScRange );
            rScRanges.push_back( rScRange );
    }
}

@@ -1345,8 +1343,8 @@ XclExpColorScale::XclExpColorScale( const XclExpRoot& rRoot, const ScColorScaleF
    XclExpRoot( rRoot ),
    mnPriority( nPriority )
{
    const ScRange* pRange = rFormat.GetRange().front();
    ScAddress aAddr = pRange->aStart;
    const ScRange & rRange = rFormat.GetRange().front();
    ScAddress aAddr = rRange.aStart;
    for(ScColorScaleEntries::const_iterator itr = rFormat.begin();
            itr != rFormat.end(); ++itr)
    {
@@ -1385,8 +1383,8 @@ XclExpDataBar::XclExpDataBar( const XclExpRoot& rRoot, const ScDataBarFormat& rF
    mnPriority( nPriority ),
    maGUID(rGUID)
{
    const ScRange* pRange = rFormat.GetRange().front();
    ScAddress aAddr = pRange->aStart;
    const ScRange & rRange = rFormat.GetRange().front();
    ScAddress aAddr = rRange.aStart;
    // exact position is not important, we allow only absolute refs
    mpCfvoLowerLimit.reset( new XclExpCfvo( GetRoot(), *mrFormat.GetDataBarData()->mpLowerLimit.get(), aAddr, true ) );
    mpCfvoUpperLimit.reset( new XclExpCfvo( GetRoot(), *mrFormat.GetDataBarData()->mpUpperLimit.get(), aAddr, false ) );
@@ -1438,8 +1436,8 @@ XclExpIconSet::XclExpIconSet( const XclExpRoot& rRoot, const ScIconSetFormat& rF
    mrFormat( rFormat ),
    mnPriority( nPriority )
{
    const ScRange* pRange = rFormat.GetRange().front();
    ScAddress aAddr = pRange->aStart;
    const ScRange & rRange = rFormat.GetRange().front();
    ScAddress aAddr = rRange.aStart;
    for (auto const& itr : rFormat)
    {
        // exact position is not important, we allow only absolute refs
diff --git a/sc/source/filter/excel/xeextlst.cxx b/sc/source/filter/excel/xeextlst.cxx
index 52d90b1..0fa2819 100644
--- a/sc/source/filter/excel/xeextlst.cxx
+++ b/sc/source/filter/excel/xeextlst.cxx
@@ -308,7 +308,7 @@ XclExpExtConditionalFormatting::XclExpExtConditionalFormatting( const XclExpRoot
    XclExpRoot(rRoot),
    maRange(rRange)
{
    ScAddress aAddr = maRange.front()->aStart;
    ScAddress aAddr = maRange.front().aStart;
    for (auto itr = rData.begin(), itrEnd = rData.end(); itr != itrEnd; ++itr)
    {
        const ScFormatEntry* pEntry = itr->pEntry;
diff --git a/sc/source/filter/excel/xeformula.cxx b/sc/source/filter/excel/xeformula.cxx
index dab92a0..3cd1bd9 100644
--- a/sc/source/filter/excel/xeformula.cxx
+++ b/sc/source/filter/excel/xeformula.cxx
@@ -2630,7 +2630,7 @@ XclTokenArrayRef XclExpFormulaCompiler::CreateFormula( XclFormulaType eType, con
    {
        if( nIdx > 0 )
            aScTokArr.AddOpCode( ocUnion );
        lclPutRangeToTokenArray( aScTokArr, *rScRanges[ nIdx ], nCurrScTab, b3DRefOnly );
        lclPutRangeToTokenArray( aScTokArr, rScRanges[ nIdx ], nCurrScTab, b3DRefOnly );
    }
    return mxImpl->CreateFormula( eType, aScTokArr );
}
diff --git a/sc/source/filter/excel/xehelper.cxx b/sc/source/filter/excel/xehelper.cxx
index d9f7e38..0d9d7b4 100644
--- a/sc/source/filter/excel/xehelper.cxx
+++ b/sc/source/filter/excel/xehelper.cxx
@@ -250,8 +250,8 @@ void XclExpAddressConverter::ValidateRangeList( ScRangeList& rScRanges, bool bWa
{
    for ( size_t nRange = rScRanges.size(); nRange > 0; )
    {
        ScRange* pScRange = rScRanges[ --nRange ];
        if( !CheckRange( *pScRange, bWarn ) )
        ScRange & rScRange = rScRanges[ --nRange ];
        if( !CheckRange( rScRange, bWarn ) )
            rScRanges.Remove(nRange);
    }
}
@@ -262,12 +262,10 @@ void XclExpAddressConverter::ConvertRangeList( XclRangeList& rXclRanges,
    rXclRanges.clear();
    for( size_t nPos = 0, nCount = rScRanges.size(); nPos < nCount; ++nPos )
    {
        if( const ScRange* pScRange = rScRanges[ nPos ] )
        {
            XclRange aXclRange( ScAddress::UNINITIALIZED );
            if( ConvertRange( aXclRange, *pScRange, bWarn ) )
                rXclRanges.push_back( aXclRange );
        }
        const ScRange & rScRange = rScRanges[ nPos ];
        XclRange aXclRange( ScAddress::UNINITIALIZED );
        if( ConvertRange( aXclRange, rScRange, bWarn ) )
            rXclRanges.push_back( aXclRange );
    }
}

diff --git a/sc/source/filter/excel/xename.cxx b/sc/source/filter/excel/xename.cxx
index 7b315d1..d0f9579 100644
--- a/sc/source/filter/excel/xename.cxx
+++ b/sc/source/filter/excel/xename.cxx
@@ -602,7 +602,7 @@ void XclExpNameManagerImpl::CreateBuiltInNames()
                    aRange.aStart.SetTab( nScTab );
                    aRange.aEnd.SetTab( nScTab );
                    aRange.PutInOrder();
                    aRangeList.Append( aRange );
                    aRangeList.push_back( aRange );
                }
                // create the NAME record (do not warn if ranges are shrunken)
                GetAddressConverter().ValidateRangeList( aRangeList, false );
@@ -615,12 +615,12 @@ void XclExpNameManagerImpl::CreateBuiltInNames()
            ScRangeList aTitleList;
            // repeated columns
            if( const ScRange* pColRange = rDoc.GetRepeatColRange( nScTab ) )
                aTitleList.Append( ScRange(
                aTitleList.push_back( ScRange(
                    pColRange->aStart.Col(), 0, nScTab,
                    pColRange->aEnd.Col(), GetXclMaxPos().Row(), nScTab ) );
            // repeated rows
            if( const ScRange* pRowRange = rDoc.GetRepeatRowRange( nScTab ) )
                aTitleList.Append( ScRange(
                aTitleList.push_back( ScRange(
                    0, pRowRange->aStart.Row(), nScTab,
                    GetXclMaxPos().Col(), pRowRange->aEnd.Row(), nScTab ) );
            // create the NAME record
@@ -695,7 +695,7 @@ sal_uInt16 XclExpNameManager::InsertBuiltInName( sal_Unicode cBuiltIn, const ScR
    if( !rRangeList.empty() )
    {
        XclTokenArrayRef xTokArr = GetFormulaCompiler().CreateFormula( EXC_FMLATYPE_NAME, rRangeList );
        nNameIdx = mxImpl->InsertBuiltInName( cBuiltIn, xTokArr, rRangeList.front()->aStart.Tab(), rRangeList );
        nNameIdx = mxImpl->InsertBuiltInName( cBuiltIn, xTokArr, rRangeList.front().aStart.Tab(), rRangeList );
    }
    return nNameIdx;
}
diff --git a/sc/source/filter/excel/xestream.cxx b/sc/source/filter/excel/xestream.cxx
index 537c494..5a1c4a9 100644
--- a/sc/source/filter/excel/xestream.cxx
+++ b/sc/source/filter/excel/xestream.cxx
@@ -778,7 +778,7 @@ OString XclXmlUtils::ToOString( const XclRangeList& rRanges )
    for( XclRangeVector::const_iterator i = rRanges.begin(), end = rRanges.end();
            i != end; ++i )
    {
        aRanges.Append( lcl_ToRange( *i ) );
        aRanges.push_back( lcl_ToRange( *i ) );
    }
    return ToOString( aRanges );
}
diff --git a/sc/source/filter/excel/xicontent.cxx b/sc/source/filter/excel/xicontent.cxx
index 5c01b7e..91244a7 100644
--- a/sc/source/filter/excel/xicontent.cxx
+++ b/sc/source/filter/excel/xicontent.cxx
@@ -448,7 +448,6 @@ void XclImpLabelranges::ReadLabelranges( XclImpStream& rStrm )
    SCTAB nScTab = rRoot.GetCurrScTab();
    XclImpAddressConverter& rAddrConv = rRoot.GetAddressConverter();
    ScRangePairListRef xLabelRangesRef;
    const ScRange* pScRange = nullptr;

    XclRangeList aRowXclRanges, aColXclRanges;
    rStrm >> aRowXclRanges >> aColXclRanges;
@@ -459,8 +458,8 @@ void XclImpLabelranges::ReadLabelranges( XclImpStream& rStrm )
    xLabelRangesRef = rDoc.GetRowNameRangesRef();
    for ( size_t i = 0, nRanges = aRowScRanges.size(); i < nRanges; ++i )
    {
        pScRange = aRowScRanges[ i ];
        ScRange aDataRange( *pScRange );
        const ScRange & rScRange = aRowScRanges[ i ];
        ScRange aDataRange( rScRange );
        if( aDataRange.aEnd.Col() < MAXCOL )
        {
            aDataRange.aStart.SetCol( aDataRange.aEnd.Col() + 1 );
@@ -471,7 +470,7 @@ void XclImpLabelranges::ReadLabelranges( XclImpStream& rStrm )
            aDataRange.aEnd.SetCol( aDataRange.aStart.Col() - 1 );
            aDataRange.aStart.SetCol( 0 );
        }
        xLabelRangesRef->Append( ScRangePair( *pScRange, aDataRange ) );
        xLabelRangesRef->Append( ScRangePair( rScRange, aDataRange ) );
    }

    // column label ranges
@@ -481,8 +480,8 @@ void XclImpLabelranges::ReadLabelranges( XclImpStream& rStrm )

    for ( size_t i = 0, nRanges = aColScRanges.size(); i < nRanges; ++i )
    {
        pScRange = aColScRanges[ i ];
        ScRange aDataRange( *pScRange );
        const ScRange & rScRange = aColScRanges[ i ];
        ScRange aDataRange( rScRange );
        if( aDataRange.aEnd.Row() < MAXROW )
        {
            aDataRange.aStart.SetRow( aDataRange.aEnd.Row() + 1 );
@@ -493,7 +492,7 @@ void XclImpLabelranges::ReadLabelranges( XclImpStream& rStrm )
            aDataRange.aEnd.SetRow( aDataRange.aStart.Row() - 1 );
            aDataRange.aStart.SetRow( 0 );
        }
        xLabelRangesRef->Append( ScRangePair( *pScRange, aDataRange ) );
        xLabelRangesRef->Append( ScRangePair( rScRange, aDataRange ) );
    }
}

@@ -651,7 +650,7 @@ void XclImpCondFormat::ReadCF( XclImpStream& rStrm )

    // *** formulas ***

    const ScAddress& rPos = maRanges.front()->aStart;    // assured above that maRanges is not empty
    const ScAddress& rPos = maRanges.front().aStart;    // assured above that maRanges is not empty
    ExcelToSc& rFmlaConv = GetOldFmlaConverter();

    ::std::unique_ptr< ScTokenArray > xTokArr1;
@@ -690,7 +689,7 @@ void XclImpCondFormat::ReadCF( XclImpStream& rStrm )
    {
        mxScCondFmt.reset( new ScConditionalFormat( 0/*nKey*/, &GetDocRef() ) );
        if(maRanges.size() > 1)
            maRanges.Join(*maRanges[0], true);
            maRanges.Join(maRanges[0], true);
        mxScCondFmt->SetRange(maRanges);
    }

@@ -705,7 +704,7 @@ void XclImpCondFormat::Apply()
    {
        ScDocument& rDoc = GetDoc();

        SCTAB nTab = maRanges.front()->aStart.Tab();
        SCTAB nTab = maRanges.front().aStart.Tab();
        sal_uLong nKey = rDoc.AddCondFormat( mxScCondFmt->Clone(), nTab );

        rDoc.AddCondFormatData( maRanges, nTab, nKey );
@@ -888,7 +887,7 @@ void XclImpValidationManager::ReadDV( XclImpStream& rStrm )
        return;

    // first range for base address for relative references
    const ScRange& rScRange = *aScRanges.front();    // aScRanges is not empty
    const ScRange& rScRange = aScRanges.front();    // aScRanges is not empty

    // process string list of a list validity (convert to list of string tokens)
    if( xTokArr1.get() && (eValMode == SC_VALID_LIST) && ::get_flag( nFlags, EXC_DV_STRINGLIST ) )
@@ -938,9 +937,9 @@ void XclImpValidationManager::Apply()
        // apply all ranges
        for ( size_t i = 0, nRanges = rItem.maRanges.size(); i < nRanges; ++i )
        {
            const ScRange* pScRange = rItem.maRanges[ i ];
            rDoc.ApplyPatternAreaTab( pScRange->aStart.Col(), pScRange->aStart.Row(),
                pScRange->aEnd.Col(), pScRange->aEnd.Row(), pScRange->aStart.Tab(), aPattern );
            const ScRange & rScRange = rItem.maRanges[ i ];
            rDoc.ApplyPatternAreaTab( rScRange.aStart.Col(), rScRange.aStart.Row(),
                rScRange.aEnd.Col(), rScRange.aEnd.Row(), rScRange.aStart.Tab(), aPattern );
        }
    }
    maDVItems.clear();
diff --git a/sc/source/filter/excel/xiescher.cxx b/sc/source/filter/excel/xiescher.cxx
index f38c13f..94b2d01 100644
--- a/sc/source/filter/excel/xiescher.cxx
+++ b/sc/source/filter/excel/xiescher.cxx
@@ -1927,8 +1927,8 @@ void XclImpControlHelper::ReadCellLinkFormula( XclImpStream& rStrm, bool bWithBo
    // Use first cell of first range
    if ( !aScRanges.empty() )
    {
        const ScRange* pScRange = aScRanges.front();
        mxCellLink.reset( new ScAddress( pScRange->aStart ) );
        const ScRange & rScRange = aScRanges.front();
        mxCellLink.reset( new ScAddress( rScRange.aStart ) );
    }
}

@@ -1939,8 +1939,8 @@ void XclImpControlHelper::ReadSourceRangeFormula( XclImpStream& rStrm, bool bWit
    // Use first range
    if ( !aScRanges.empty() )
    {
        const ScRange* pScRange = aScRanges.front();
        mxSrcRange.reset( new ScRange( *pScRange ) );
        const ScRange & rScRange = aScRanges.front();
        mxSrcRange.reset( new ScRange( rScRange ) );
    }
}

diff --git a/sc/source/filter/excel/xihelper.cxx b/sc/source/filter/excel/xihelper.cxx
index 3633a01..c2b65d1 100644
--- a/sc/source/filter/excel/xihelper.cxx
+++ b/sc/source/filter/excel/xihelper.cxx
@@ -131,7 +131,7 @@ void XclImpAddressConverter::ConvertRangeList( ScRangeList& rScRanges,
    {
        ScRange aScRange( ScAddress::UNINITIALIZED );
        if( ConvertRange( aScRange, *aIt, nScTab, nScTab, bWarn ) )
            rScRanges.Append( aScRange );
            rScRanges.push_back( aScRange );
    }
}

diff --git a/sc/source/filter/excel/xistyle.cxx b/sc/source/filter/excel/xistyle.cxx
index 1059f88..75100c8 100644
--- a/sc/source/filter/excel/xistyle.cxx
+++ b/sc/source/filter/excel/xistyle.cxx
@@ -1905,11 +1905,11 @@ void XclImpXFRangeBuffer::SetXF( const ScAddress& rScPos, sal_uInt16 nXFIndex, X
        if( pXF && ((pXF->GetHorAlign() == EXC_XF_HOR_CENTER_AS) || (pXF->GetHorAlign() == EXC_XF_HOR_FILL)) )
        {
            // expand last merged range if this attribute is set repeatedly
            ScRange* pRange = maMergeList.empty() ? nullptr : maMergeList.back();
            ScRange* pRange = maMergeList.empty() ? nullptr : &maMergeList.back();
            if (pRange && (pRange->aEnd.Row() == nScRow) && (pRange->aEnd.Col() + 1 == nScCol) && (eMode == xlXFModeBlank))
                pRange->aEnd.IncCol();
            else if( eMode != xlXFModeBlank )   // do not merge empty cells
                maMergeList.Append( ScRange( nScCol, nScRow, 0 ) );
                maMergeList.push_back( ScRange( nScCol, nScRow, 0 ) );
        }
    }
}
@@ -1970,7 +1970,7 @@ void XclImpXFRangeBuffer::SetHyperlink( const XclRange& rXclRange, const OUStrin
void XclImpXFRangeBuffer::SetMerge( SCCOL nScCol1, SCROW nScRow1, SCCOL nScCol2, SCROW nScRow2 )
{
    if( (nScCol1 < nScCol2) || (nScRow1 < nScRow2) )
        maMergeList.Append( ScRange( nScCol1, nScRow1, 0, nScCol2, nScRow2, 0 ) );
        maMergeList.push_back( ScRange( nScCol1, nScRow1, 0, nScCol2, nScRow2, 0 ) );
}

void XclImpXFRangeBuffer::Finalize()
@@ -2029,17 +2029,17 @@ void XclImpXFRangeBuffer::Finalize()
    // apply cell merging
    for ( size_t i = 0, nRange = maMergeList.size(); i < nRange; ++i )
    {
        const ScRange* pRange = maMergeList[ i ];
        const ScAddress& rStart = pRange->aStart;
        const ScAddress& rEnd = pRange->aEnd;
        const ScRange & rRange = maMergeList[ i ];
        const ScAddress& rStart = rRange.aStart;
        const ScAddress& rEnd = rRange.aEnd;
        bool bMultiCol = rStart.Col() != rEnd.Col();
        bool bMultiRow = rStart.Row() != rEnd.Row();
        // set correct right border
        if( bMultiCol )
            SetBorderLine( *pRange, nScTab, SvxBoxItemLine::RIGHT );
            SetBorderLine( rRange, nScTab, SvxBoxItemLine::RIGHT );
        // set correct lower border
        if( bMultiRow )
            SetBorderLine( *pRange, nScTab, SvxBoxItemLine::BOTTOM );
            SetBorderLine( rRange, nScTab, SvxBoxItemLine::BOTTOM );
        // do merge
        if( bMultiCol || bMultiRow )
            rDoc.getDoc().DoMerge( nScTab, rStart.Col(), rStart.Row(), rEnd.Col(), rEnd.Row() );
diff --git a/sc/source/filter/html/htmlimp.cxx b/sc/source/filter/html/htmlimp.cxx
index 4065583..a5f1f11 100644
--- a/sc/source/filter/html/htmlimp.cxx
+++ b/sc/source/filter/html/htmlimp.cxx
@@ -221,7 +221,7 @@ OUString ScHTMLImport::GetHTMLRangeNameList( const ScDocument* pDoc, const OUStr
                    if( pRangeData->IsReference( aRange ) && !aRangeList.In( aRange ) )
                    {
                        aNewName = ScGlobal::addToken(aNewName, aToken, ';');
                        aRangeList.Append( aRange );
                        aRangeList.push_back( aRange );
                    }
                }
                else
diff --git a/sc/source/filter/html/htmlpars.cxx b/sc/source/filter/html/htmlpars.cxx
index fd596fb..e53eec4 100644
--- a/sc/source/filter/html/htmlpars.cxx
+++ b/sc/source/filter/html/htmlpars.cxx
@@ -445,10 +445,10 @@ void ScHTMLLayoutParser::SkipLocked( ScEEParseEntry* pE, bool bJoin )
            bAgain = false;
            for ( size_t i =  0, nRanges = xLockedList->size(); i < nRanges; ++i )
            {
                ScRange* pR = (*xLockedList)[i];
                if ( pR->Intersects( aRange ) )
                ScRange & rR = (*xLockedList)[i];
                if ( rR.Intersects( aRange ) )
                {
                    pE->nCol = pR->aEnd.Col() + 1;
                    pE->nCol = rR.aEnd.Col() + 1;
                    SCCOL nTmp = pE->nCol + pE->nColOverlap - 1;
                    if ( pE->nCol > MAXCOL || nTmp > MAXCOL )
                        bBadCol = true;
@@ -2428,7 +2428,7 @@ void ScHTMLTable::InsertNewCell( const ScHTMLSize& rSpanSize )
    }
    if( rSpanSize.mnRows > 1 )
    {
        maVMergedCells.Append( aNewRange );
        maVMergedCells.push_back( aNewRange );
        /*  Do not insert vertically merged ranges into maUsedCells yet,
            because they may be shrunken (see above). The final vertically
            merged ranges are inserted in FillEmptyCells(). */
@@ -2436,7 +2436,7 @@ void ScHTMLTable::InsertNewCell( const ScHTMLSize& rSpanSize )
    else
    {
        if( rSpanSize.mnCols > 1 )
            maHMergedCells.Append( aNewRange );
            maHMergedCells.push_back( aNewRange );
        /*  Insert horizontally merged ranges and single cells into
            maUsedCells, they will not be changed anymore. */
        maUsedCells.Join( aNewRange );
@@ -2589,8 +2589,8 @@ void ScHTMLTable::FillEmptyCells()
    // insert the final vertically merged ranges into maUsedCells
    for ( size_t i = 0, nRanges = maVMergedCells.size(); i < nRanges; ++i )
    {
        ScRange* pRange = maVMergedCells[ i ];
        maUsedCells.Join( *pRange );
        ScRange & rRange = maVMergedCells[ i ];
        maUsedCells.Join( rRange );
    }

    for( ScAddress aAddr; aAddr.Row() < maSize.mnRows; aAddr.IncRow() )
diff --git a/sc/source/filter/oox/addressconverter.cxx b/sc/source/filter/oox/addressconverter.cxx
index 9f77412..987cef4 100644
--- a/sc/source/filter/oox/addressconverter.cxx
+++ b/sc/source/filter/oox/addressconverter.cxx
@@ -421,7 +421,7 @@ bool AddressConverter::convertToCellRange( ScRange& orRange,
void AddressConverter::validateCellRangeList( ScRangeList& orRanges, bool bTrackOverflow )
{
    for( size_t nIndex = orRanges.size(); nIndex > 0; --nIndex )
        if( !validateCellRange( *orRanges[ nIndex - 1 ], true, bTrackOverflow ) )
        if( !validateCellRange( orRanges[ nIndex - 1 ], true, bTrackOverflow ) )
            orRanges.Remove( nIndex - 1 );
}

@@ -435,7 +435,7 @@ void AddressConverter::convertToCellRangeList( ScRangeList& orRanges,
    {
        OUString aToken = rString.getToken( 0, ' ', nPos );
        if( !aToken.isEmpty() && convertToCellRange( aRange, aToken, nSheet, true, bTrackOverflow ) )
            orRanges.Append(aRange);
            orRanges.push_back(aRange);
    }
}

@@ -445,7 +445,7 @@ void AddressConverter::convertToCellRangeList( ScRangeList& orRanges,
    ScRange aRange;
    for( ::std::vector< BinRange >::const_iterator aIt = rBinRanges.begin(), aEnd = rBinRanges.end(); aIt != aEnd; ++aIt )
        if( convertToCellRange( aRange, *aIt, nSheet, true, bTrackOverflow ) )
            orRanges.Append( aRange );
            orRanges.push_back( aRange );
}

Sequence<CellRangeAddress> AddressConverter::toApiSequence(const ScRangeList& orRanges)
@@ -455,7 +455,7 @@ Sequence<CellRangeAddress> AddressConverter::toApiSequence(const ScRangeList& or
    CellRangeAddress* pApiRanges = aRangeSequence.getArray();
    for (size_t i = 0; i < nSize; ++i)
    {
        ScUnoConversion::FillApiRange(pApiRanges[i], *orRanges[i]);
        ScUnoConversion::FillApiRange(pApiRanges[i], orRanges[i]);
    }
    return aRangeSequence;
}
diff --git a/sc/source/filter/oox/condformatbuffer.cxx b/sc/source/filter/oox/condformatbuffer.cxx
index 175b4a4..22f2445 100644
--- a/sc/source/filter/oox/condformatbuffer.cxx
+++ b/sc/source/filter/oox/condformatbuffer.cxx
@@ -1117,7 +1117,7 @@ void CondFormatBuffer::finalizeImport()
        ScDocument* pDoc = &getScDocument();

        const ScRangeList& rRange = (*itr)->getRange();
        SCTAB nTab = rRange.front()->aStart.Tab();
        SCTAB nTab = rRange.front().aStart.Tab();
        ScConditionalFormat* pFormat = findFormatByRange(rRange, pDoc, nTab);
        if (!pFormat)
        {
diff --git a/sc/source/filter/oox/defnamesbuffer.cxx b/sc/source/filter/oox/defnamesbuffer.cxx
index 5b6adf5..84bba72 100644
--- a/sc/source/filter/oox/defnamesbuffer.cxx
+++ b/sc/source/filter/oox/defnamesbuffer.cxx
@@ -378,7 +378,7 @@ void DefinedName::convertFormula( const css::uno::Sequence<css::sheet::ExternalL
                const ScAddress& rMaxPos = getAddressConverter().getMaxAddress();
                for (size_t i = 0, nSize = aTitleRanges.size(); i < nSize; ++i)
                {
                    const ScRange& rRange = *aTitleRanges[i];
                    const ScRange& rRange = aTitleRanges[i];
                    bool bFullRow = (rRange.aStart.Col() == 0) && ( rRange.aEnd.Col() >= rMaxPos.Col() );
                    bool bFullCol = (rRange.aStart.Row() == 0) && ( rRange.aEnd.Row() >= rMaxPos.Row() );
                    if( !bHasRowTitles && bFullRow && !bFullCol )
diff --git a/sc/source/filter/oox/extlstcontext.cxx b/sc/source/filter/oox/extlstcontext.cxx
index b5b3951..52fc82a 100644
--- a/sc/source/filter/oox/extlstcontext.cxx
+++ b/sc/source/filter/oox/extlstcontext.cxx
@@ -163,8 +163,8 @@ void ExtConditionalFormattingContext::onEndElement()
            SCTAB nTab = getSheetIndex();
            for (size_t i = 0; i < aRange.size(); ++i)
            {
                aRange[i]->aStart.SetTab(nTab);
                aRange[i]->aEnd.SetTab(nTab);
                aRange[i].aStart.SetTab(nTab);
                aRange[i].aEnd.SetTab(nTab);
            }

            std::vector< std::unique_ptr<ExtCfCondFormat> >& rExtFormats =  getCondFormats().importExtCondFormat();
diff --git a/sc/source/filter/oox/formulabase.cxx b/sc/source/filter/oox/formulabase.cxx
index 2cb2ae9..476f0de 100644
--- a/sc/source/filter/oox/formulabase.cxx
+++ b/sc/source/filter/oox/formulabase.cxx
@@ -1499,7 +1499,7 @@ TokenToRangeListState lclProcessRef( ScRangeList& orRanges, const Any& rData, sa
        ScAddress aAddress;
        // ignore invalid addresses (with #REF! errors), but do not stop parsing
        if( lclConvertToCellAddress( aAddress, aSingleRef, nForbiddenFlags, nFilterBySheet ) )
            orRanges.Append( ScRange(aAddress, aAddress) );
            orRanges.push_back( ScRange(aAddress, aAddress) );
        return STATE_REF;
    }
    ComplexReference aComplexRef;
@@ -1508,7 +1508,7 @@ TokenToRangeListState lclProcessRef( ScRangeList& orRanges, const Any& rData, sa
        ScRange aRange;
        // ignore invalid ranges (with #REF! errors), but do not stop parsing
        if( lclConvertToCellRange( aRange, aComplexRef, nForbiddenFlags, nFilterBySheet ) )
            orRanges.Append( aRange );
            orRanges.push_back( aRange );
        return STATE_REF;
    }
    return STATE_ERROR;
@@ -1610,7 +1610,7 @@ bool FormulaProcessorBase::extractCellRange( ScRange& orRange,
    lclProcessRef( aRanges, extractReference( rTokens ), -1 );
    if( !aRanges.empty() )
    {
        orRange = *aRanges.front();
        orRange = aRanges.front();
        return true;
    }
    return false;
diff --git a/sc/source/filter/oox/scenariobuffer.cxx b/sc/source/filter/oox/scenariobuffer.cxx
index 33dd467..aaa00d9 100644
--- a/sc/source/filter/oox/scenariobuffer.cxx
+++ b/sc/source/filter/oox/scenariobuffer.cxx
@@ -108,7 +108,7 @@ void Scenario::finalizeImport()
    ScRangeList aRanges;
    for( ScenarioCellVector::iterator aIt = maCells.begin(), aEnd = maCells.end(); aIt != aEnd; ++aIt )
        if( !aIt->mbDeleted && rAddrConv.checkCellAddress( aIt->maPos, true ) )
            aRanges.Append( ScRange(aIt->maPos, aIt->maPos) );
            aRanges.push_back( ScRange(aIt->maPos, aIt->maPos) );

    if( !aRanges.empty() && !maModel.maName.isEmpty() ) try
    {
diff --git a/sc/source/filter/oox/sheetdatabuffer.cxx b/sc/source/filter/oox/sheetdatabuffer.cxx
index d9d98b8..cf44072 100644
--- a/sc/source/filter/oox/sheetdatabuffer.cxx
+++ b/sc/source/filter/oox/sheetdatabuffer.cxx
@@ -336,7 +336,7 @@ void addIfNotInMyMap( const StylesBuffer& rStyles, std::map< FormatKeyPair, ScRa
                    // add ranges from the rangelist to the existing rangelist for the
                    // matching style ( should we check if they overlap ? )
                    for (size_t i = 0, nSize = rRangeList.size(); i < nSize; ++i)
                        it->second.Append(*rRangeList[i]);
                        it->second.push_back(rRangeList[i]);
                    return;
                }
            }
@@ -423,7 +423,7 @@ void SheetDataBuffer::finalizeImport()
    {
        const ScRangeList& rRanges( it->second );
        for (size_t i = 0, nSize = rRanges.size(); i < nSize; ++i)
            addColXfStyle( it->first.first, it->first.second, *rRanges[i]);
            addColXfStyle( it->first.first, it->first.second, rRanges[i]);
    }

    for ( std::map< sal_Int32, std::vector< ValueRange > >::iterator it = maXfIdRowRangeList.begin(), it_end =  maXfIdRowRangeList.end(); it != it_end; ++it )
@@ -660,7 +660,7 @@ void SheetDataBuffer::setCellFormat( const CellModel& rModel )
    if( rModel.mnXfId >= 0 )
    {
        ScRangeList& rRangeList = maXfIdRangeLists[ XfIdNumFmtKey( rModel.mnXfId, -1 ) ];
        ScRange* pLastRange = rRangeList.empty() ? nullptr : rRangeList.back();
        ScRange* pLastRange = rRangeList.empty() ? nullptr : &rRangeList.back();
        /* The xlsx sheet data contains row wise information.
         * It is sufficient to check if the row range size is one
         */
@@ -674,28 +674,28 @@ void SheetDataBuffer::setCellFormat( const CellModel& rModel )
        }
        else
        {
            rRangeList.Append(ScRange(rModel.maCellAddr));
            pLastRange = rRangeList.back();
            rRangeList.push_back(ScRange(rModel.maCellAddr));
            pLastRange = &rRangeList.back();
        }

        if (rRangeList.size() > 1)
        {
            for (size_t i = rRangeList.size() - 1; i != 0; --i)
            {
                ScRange* pMergeRange = rRangeList[i - 1];
                if (pLastRange->aStart.Tab() != pMergeRange->aStart.Tab())
                ScRange& rMergeRange = rRangeList[i - 1];
                if (pLastRange->aStart.Tab() != rMergeRange.aStart.Tab())
                    break;

                /* Try to merge this with the previous range */
                if (pLastRange->aStart.Row() == (pMergeRange->aEnd.Row() + 1) &&
                    pLastRange->aStart.Col() == pMergeRange->aStart.Col() &&
                    pLastRange->aEnd.Col() == pMergeRange->aEnd.Col())
                if (pLastRange->aStart.Row() == (rMergeRange.aEnd.Row() + 1) &&
                    pLastRange->aStart.Col() == rMergeRange.aStart.Col() &&
                    pLastRange->aEnd.Col() == rMergeRange.aEnd.Col())
                {
                    pMergeRange->aEnd.SetRow(pLastRange->aEnd.Row());
                    rMergeRange.aEnd.SetRow(pLastRange->aEnd.Row());
                    rRangeList.Remove(rRangeList.size() - 1);
                    break;
                }
                else if (pLastRange->aStart.Row() > (pMergeRange->aEnd.Row() + 1))
                else if (pLastRange->aStart.Row() > (rMergeRange.aEnd.Row() + 1))
                    break; // Un-necessary to check with any other rows
            }
        }
diff --git a/sc/source/filter/xcl97/xcl97rec.cxx b/sc/source/filter/xcl97/xcl97rec.cxx
index 7d5c910..a4ecfd8 100644
--- a/sc/source/filter/xcl97/xcl97rec.cxx
+++ b/sc/source/filter/xcl97/xcl97rec.cxx
@@ -1382,9 +1382,9 @@ ExcEScenario::ExcEScenario( const XclExpRoot& rRoot, SCTAB nTab )

    for( size_t nRange = 0; (nRange < pRList->size()) && bContLoop; nRange++ )
    {
        const ScRange* pRange = (*pRList)[nRange];
        for( nRow = pRange->aStart.Row(); (nRow <= pRange->aEnd.Row()) && bContLoop; nRow++ )
            for( nCol = pRange->aStart.Col(); (nCol <= pRange->aEnd.Col()) && bContLoop; nCol++ )
        const ScRange & rRange = (*pRList)[nRange];
        for( nRow = rRange.aStart.Row(); (nRow <= rRange.aEnd.Row()) && bContLoop; nRow++ )
            for( nCol = rRange.aStart.Col(); (nCol <= rRange.aEnd.Col()) && bContLoop; nCol++ )
            {
                if( rDoc.HasValueData( nCol, nRow, nTab ) )
                {
diff --git a/sc/source/filter/xml/xmlcondformat.cxx b/sc/source/filter/xml/xmlcondformat.cxx
index 3db4904..6fdcdee 100644
--- a/sc/source/filter/xml/xmlcondformat.cxx
+++ b/sc/source/filter/xml/xmlcondformat.cxx
@@ -264,7 +264,7 @@ void SAL_CALL ScXMLConditionalFormatContext::endFastElement( sal_Int32 /*nElemen
            // conditions could be loosened, but I am too tired to think on that right now.)
            if (pFormat->size() == 1 &&
                pFormat->GetRange().size() == 1 &&
                pFormat->GetRange()[0]->aStart == aSrcPos &&
                pFormat->GetRange()[0].aStart == aSrcPos &&
                HasOneSingleFullyRelativeReference( pTokens, aOffsetForSingleRelRef ))
            {
                bSingleRelativeReference = true;
@@ -327,7 +327,7 @@ void SAL_CALL ScXMLConditionalFormatContext::endFastElement( sal_Int32 /*nElemen
                    // Mark cache entry as fresh, do necessary mangling of it and just return
                    aCacheEntry.mnAge = 0;
                    for (size_t k = 0; k < pFormat->GetRange().size(); ++k)
                        aCacheEntry.mpFormat->GetRangeList().Join(*(pFormat->GetRange()[k]));
                        aCacheEntry.mpFormat->GetRangeList().Join(pFormat->GetRange()[k]);
                    return;
                }
            }
diff --git a/sc/source/filter/xml/xmlsceni.cxx b/sc/source/filter/xml/xmlsceni.cxx
index 5a934b0..ed3c8b0 100644
--- a/sc/source/filter/xml/xmlsceni.cxx
+++ b/sc/source/filter/xml/xmlsceni.cxx
@@ -114,10 +114,9 @@ void SAL_CALL ScXMLTableScenarioContext::endFastElement( sal_Int32 /*nElement*/ 
        pDoc->SetScenarioData( nCurrTable, sComment, aBorderColor, nFlags );
        for( size_t i = 0; i < aScenarioRanges.size(); ++i )
        {
            ScRange* pRange(aScenarioRanges[ i ]);
            if( pRange )
                pDoc->ApplyFlagsTab( pRange->aStart.Col(), pRange->aStart.Row(),
                    pRange->aEnd.Col(), pRange->aEnd.Row(), nCurrTable, ScMF::Scenario );
            ScRange const & rRange = aScenarioRanges[ i ];
            pDoc->ApplyFlagsTab( rRange.aStart.Col(), rRange.aStart.Row(),
                rRange.aEnd.Col(), rRange.aEnd.Row(), nCurrTable, ScMF::Scenario );
        }
        pDoc->SetActiveScenario( nCurrTable, bIsActive );
    }
diff --git a/sc/source/filter/xml/xmlstyli.cxx b/sc/source/filter/xml/xmlstyli.cxx
index 0970b1a..5087bf0 100644
--- a/sc/source/filter/xml/xmlstyli.cxx
+++ b/sc/source/filter/xml/xmlstyli.cxx
@@ -511,8 +511,8 @@ void XMLTableStyleContext::ApplyCondFormat( const uno::Sequence<table::CellRange
            size_t n = aRangeList.size();
            for(size_t i = 0; i < n; ++i)
            {
                const ScRange* pRange = aRangeList[i];
                rRangeList.Join(*pRange);
                const ScRange & rRange = aRangeList[i];
                rRangeList.Join(rRange);
            }

            pDoc->AddCondFormatData( aRangeList, nTab, nCondId );
diff --git a/sc/source/filter/xml/xmlsubti.cxx b/sc/source/filter/xml/xmlsubti.cxx
index a71d38e..520d484 100644
--- a/sc/source/filter/xml/xmlsubti.cxx
+++ b/sc/source/filter/xml/xmlsubti.cxx
@@ -275,7 +275,7 @@ void ScMyTables::AddMatrixRange(
        nEndColumn, nEndRow, maCurrentCellPos.Tab()
    );

    maMatrixRangeList.Append(aScRange);
    maMatrixRangeList.push_back(aScRange);

    ScDocumentImport& rDoc = rImport.GetDoc();
    ScTokenArray aCode;
diff --git a/sc/source/filter/xml/xmltabi.cxx b/sc/source/filter/xml/xmltabi.cxx
index 6cfa897..82e8c90 100644
--- a/sc/source/filter/xml/xmltabi.cxx
+++ b/sc/source/filter/xml/xmltabi.cxx
@@ -368,7 +368,7 @@ void SAL_CALL ScXMLTableContext::endFastElement(sal_Int32 /*nElement*/)
        size_t nCount = aRangeList.size();
        for (size_t i=0; i< nCount; i++ )
        {
            pDoc->AddPrintRange( nCurTab, *aRangeList[i] );
            pDoc->AddPrintRange( nCurTab, aRangeList[i] );
        }
    }
    else if (!bPrintEntireSheet)
diff --git a/sc/source/ui/Accessibility/AccessibleCell.cxx b/sc/source/ui/Accessibility/AccessibleCell.cxx
index e589d1d..3093137 100644
--- a/sc/source/ui/Accessibility/AccessibleCell.cxx
+++ b/sc/source/ui/Accessibility/AccessibleCell.cxx
@@ -588,7 +588,7 @@ bool ScAccessibleCell::IsDropdown()
            SCTAB nRangeCount = aRanges.size();
            for (i=0; i<nRangeCount; i++)
            {
                ScRange aRange = *aRanges[i];
                ScRange aRange = aRanges[i];
                mpDoc->ExtendTotalMerge( aRange );
                bool bTextBelow = ( aRange.aStart.Row() == 0 );
                // MT IA2: Not used: sal_Bool bIsInScen = sal_False;
diff --git a/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx b/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx
index 0111d54..09b7f61 100644
--- a/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx
+++ b/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx
@@ -54,16 +54,13 @@ ScMyAddress ScAccessibleSpreadsheet::CalcScAddressFromRangeList(ScRangeList *pMa
{
    if (pMarkedRanges->size() <= 1)
    {
        ScRange* pRange = pMarkedRanges->front();
        if (pRange)
        {
            // MT IA2: Not used.
            // const int nRowNum = pRange->aEnd.Row() - pRange->aStart.Row() + 1;
            const int nColNum = pRange->aEnd.Col() - pRange->aStart.Col() + 1;
            const int nCurCol = nSelectedChildIndex % nColNum;
            const int nCurRow = (nSelectedChildIndex - nCurCol)/nColNum;
            return ScMyAddress(static_cast<SCCOL>(pRange->aStart.Col() + nCurCol), pRange->aStart.Row() + nCurRow, maActiveCell.Tab());
        }
        ScRange const & rRange = pMarkedRanges->front();
        // MT IA2: Not used.
        // const int nRowNum = rRange.aEnd.Row() - rRange.aStart.Row() + 1;
        const int nColNum = rRange.aEnd.Col() - rRange.aStart.Col() + 1;
        const int nCurCol = nSelectedChildIndex % nColNum;
        const int nCurRow = (nSelectedChildIndex - nCurCol)/nColNum;
        return ScMyAddress(static_cast<SCCOL>(rRange.aStart.Col() + nCurCol), rRange.aStart.Row() + nCurRow, maActiveCell.Tab());
    }
    else
    {
@@ -73,24 +70,24 @@ ScMyAddress ScAccessibleSpreadsheet::CalcScAddressFromRangeList(ScRangeList *pMa
        size_t nSize = pMarkedRanges->size();
        for (size_t i = 0; i < nSize; ++i)
        {
            ScRange* pRange = (*pMarkedRanges)[i];
            if (pRange->aStart.Tab() != pRange->aEnd.Tab())
            ScRange const & rRange = (*pMarkedRanges)[i];
            if (rRange.aStart.Tab() != rRange.aEnd.Tab())
            {
                if ((maActiveCell.Tab() >= pRange->aStart.Tab()) ||
                    maActiveCell.Tab() <= pRange->aEnd.Tab())
                if ((maActiveCell.Tab() >= rRange.aStart.Tab()) ||
                    maActiveCell.Tab() <= rRange.aEnd.Tab())
                {
                    m_vecTempRange.push_back(pRange);
                    nMinRow = std::min(pRange->aStart.Row(),nMinRow);
                    nMaxRow = std::max(pRange->aEnd.Row(),nMaxRow);
                    m_vecTempRange.push_back(rRange);
                    nMinRow = std::min(rRange.aStart.Row(),nMinRow);
                    nMaxRow = std::max(rRange.aEnd.Row(),nMaxRow);
                }
                else
                    SAL_WARN("sc", "Range of wrong table");
            }
            else if(pRange->aStart.Tab() == maActiveCell.Tab())
            else if(rRange.aStart.Tab() == maActiveCell.Tab())
            {
                m_vecTempRange.push_back(pRange);
                nMinRow = std::min(pRange->aStart.Row(),nMinRow);
                nMaxRow = std::max(pRange->aEnd.Row(),nMaxRow);
                m_vecTempRange.push_back(rRange);
                nMinRow = std::min(rRange.aStart.Row(),nMinRow);
                nMaxRow = std::max(rRange.aEnd.Row(),nMaxRow);
            }
            else
                SAL_WARN("sc", "Range of wrong table");
@@ -103,10 +100,10 @@ ScMyAddress ScAccessibleSpreadsheet::CalcScAddressFromRangeList(ScRangeList *pMa
                VEC_RANGE::const_iterator vi = m_vecTempRange.begin();
                for (; vi < m_vecTempRange.end(); ++vi)
                {
                    ScRange *p = *vi;
                    if ( row >= p->aStart.Row() && row <= p->aEnd.Row())
                    ScRange const & r = *vi;
                    if ( row >= r.aStart.Row() && row <= r.aEnd.Row())
                    {
                        m_vecTempCol.emplace_back(p->aStart.Col(),p->aEnd.Col());
                        m_vecTempCol.emplace_back(r.aStart.Col(),r.aEnd.Col());
                    }
                }
            }
@@ -129,46 +126,46 @@ ScMyAddress ScAccessibleSpreadsheet::CalcScAddressFromRangeList(ScRangeList *pMa
    return ScMyAddress(0,0,maActiveCell.Tab());
}

bool ScAccessibleSpreadsheet::CalcScRangeDifferenceMax(const ScRange *pSrc, const ScRange *pDest, int nMax, VEC_MYADDR &vecRet, int &nSize)
bool ScAccessibleSpreadsheet::CalcScRangeDifferenceMax(const ScRange & rSrc, const ScRange & rDest, int nMax, VEC_MYADDR &vecRet, int &nSize)
{
    //Src Must be :Src > Dest
    if (pDest->In(*pSrc))
    if (rDest.In(rSrc))
    {//Here is Src In Dest,Src <= Dest
        return false;
    }
    if (!pDest->Intersects(*pSrc))
    if (!rDest.Intersects(rSrc))
    {
        int nCellCount = sal_uInt32(pDest->aEnd.Col() - pDest->aStart.Col() + 1)
            * sal_uInt32(pDest->aEnd.Row() - pDest->aStart.Row() + 1)
            * sal_uInt32(pDest->aEnd.Tab() - pDest->aStart.Tab() + 1);
        int nCellCount = sal_uInt32(rDest.aEnd.Col() - rDest.aStart.Col() + 1)
            * sal_uInt32(rDest.aEnd.Row() - rDest.aStart.Row() + 1)
            * sal_uInt32(rDest.aEnd.Tab() - rDest.aStart.Tab() + 1);
        if (nCellCount + nSize > nMax)
        {
            return true;
        }
        else if(nCellCount > 0)
        {
            for (sal_Int32 row = pDest->aStart.Row(); row <=  pDest->aEnd.Row();++row)
            for (sal_Int32 row = rDest.aStart.Row(); row <=  rDest.aEnd.Row();++row)
            {
                for (sal_uInt16 col = pDest->aStart.Col(); col <=  pDest->aEnd.Col();++col)
                for (sal_uInt16 col = rDest.aStart.Col(); col <=  rDest.aEnd.Col();++col)
                {
                    vecRet.emplace_back(col,row,pDest->aStart.Tab());
                    vecRet.emplace_back(col,row,rDest.aStart.Tab());
                }
            }
        }
        return false;
    }
    sal_Int32 nMinRow = pSrc->aStart.Row();
    sal_Int32 nMaxRow = pSrc->aEnd.Row();
    sal_Int32 nMinRow = rSrc.aStart.Row();
    sal_Int32 nMaxRow = rSrc.aEnd.Row();
    for (; nMinRow <= nMaxRow ; ++nMinRow,--nMaxRow)
    {
        for (sal_uInt16 col = pSrc->aStart.Col(); col <=  pSrc->aEnd.Col();++col)
        for (sal_uInt16 col = rSrc.aStart.Col(); col <=  rSrc.aEnd.Col();++col)
        {
            if (nSize > nMax)
            {
                return true;
            }
            ScMyAddress cell(col,nMinRow,pSrc->aStart.Tab());
            if(!pDest->In(cell))
            ScMyAddress cell(col,nMinRow,rSrc.aStart.Tab());
            if(!rDest.In(cell))
            {//In Src ,Not In Dest
                vecRet.push_back(cell);
                ++nSize;
@@ -176,14 +173,14 @@ bool ScAccessibleSpreadsheet::CalcScRangeDifferenceMax(const ScRange *pSrc, cons
        }
        if (nMinRow != nMaxRow)
        {
            for (sal_uInt16 col = pSrc->aStart.Col(); col <=  pSrc->aEnd.Col();++col)
            for (sal_uInt16 col = rSrc.aStart.Col(); col <=  rSrc.aEnd.Col();++col)
            {
                if (nSize > nMax)
                {
                    return true;
                }
                ScMyAddress cell(col,nMaxRow,pSrc->aStart.Tab());
                if(!pDest->In(cell))
                ScMyAddress cell(col,nMaxRow,rSrc.aStart.Tab());
                if(!rDest.In(cell))
                {//In Src ,Not In Dest
                    vecRet.push_back(cell);
                    ++nSize;
@@ -213,12 +210,12 @@ bool ScAccessibleSpreadsheet::CalcScRangeListDifferenceMax(ScRangeList *pSrc,ScR
        size_t nSrcSize = pSrc->size();
        for (size_t i = 0; i < nSrcSize; ++i)
        {
            ScRange* pRange = (*pSrc)[i];
            for (sal_Int32 row = pRange->aStart.Row(); row <=  pRange->aEnd.Row();++row)
            ScRange const & rRange = (*pSrc)[i];
            for (sal_Int32 row = rRange.aStart.Row(); row <= rRange.aEnd.Row();++row)
            {
                for (sal_uInt16 col = pRange->aStart.Col(); col <=  pRange->aEnd.Col();++col)
                for (sal_uInt16 col = rRange.aStart.Col(); col <= rRange.aEnd.Col();++col)
                {
                    vecRet.emplace_back(col,row,pRange->aStart.Tab());
                    vecRet.emplace_back(col,row, rRange.aStart.Tab());
                }
            }
        }
@@ -229,12 +226,12 @@ bool ScAccessibleSpreadsheet::CalcScRangeListDifferenceMax(ScRangeList *pSrc,ScR
    size_t nSizeSrc = pSrc->size();
    for (size_t i = 0; i < nSizeSrc; ++i)
    {
        ScRange* pRange = (*pSrc)[i];
        ScRange const & rRange = (*pSrc)[i];
        size_t nSizeDest = pDest->size();
        for (size_t j = 0; j < nSizeDest; ++j)
        {
            ScRange* pRangeDest = (*pDest)[j];
            if (CalcScRangeDifferenceMax(pRange,pRangeDest,nMax,vecRet,nSize))
            ScRange const & rRangeDest = (*pDest)[j];
            if (CalcScRangeDifferenceMax(rRange,rRangeDest,nMax,vecRet,nSize))
            {
                return true;
            }
diff --git a/sc/source/ui/StatisticsDialogs/AnalysisOfVarianceDialog.cxx b/sc/source/ui/StatisticsDialogs/AnalysisOfVarianceDialog.cxx
index 7cb1520..f6613f6 100644
--- a/sc/source/ui/StatisticsDialogs/AnalysisOfVarianceDialog.cxx
+++ b/sc/source/ui/StatisticsDialogs/AnalysisOfVarianceDialog.cxx
@@ -66,7 +66,7 @@ OUString lclCreateMultiParameterFormula(
    OUString aResult;
    for (size_t i = 0; i < aRangeList.size(); i++)
    {
        OUString aRangeString(aRangeList[i]->Format(ScRefFlags::RANGE_ABS, pDocument, aAddressDetails));
        OUString aRangeString(aRangeList[i].Format(ScRefFlags::RANGE_ABS, pDocument, aAddressDetails));
        OUString aFormulaString = aFormulaTemplate.replaceAll(aWildcard, aRangeString);
        aResult += aFormulaString;
        if(i != aRangeList.size() - 1) // Not Last
@@ -86,7 +86,7 @@ void lclMakeSubRangesList(ScRangeList& rRangeList, const ScRange& rInputRange, S
    for( ; pIterator->hasNext(); pIterator->next() )
    {
        ScRange aRange = pIterator->get();
        rRangeList.Append(aRange);
        rRangeList.push_back(aRange);
    }
}

@@ -170,9 +170,9 @@ void ScAnalysisOfVarianceDialog::RowColumn(ScRangeList& rRangeList, AddressWalke
    {
        for (size_t i = 0; i < rRangeList.size(); i++)
        {
            ScRange* pRange = rRangeList[i];
            ScRange const & rRange = rRangeList[i];
            aTemplate.setTemplate(sFormula);
            aTemplate.applyRange(strWildcardRange, *pRange);
            aTemplate.applyRange(strWildcardRange, rRange);
            aOutput.writeFormula(aTemplate.getTemplate());
            if (pResultRange != nullptr)
                pResultRange->aEnd = aOutput.current();
@@ -249,7 +249,7 @@ void ScAnalysisOfVarianceDialog::AnovaSingleFactor(AddressWalkerWriter& output, 
    }
    output.nextRow();

    aTemplate.autoReplaceRange("%FIRST_COLUMN%", *aRangeList[0]);
    aTemplate.autoReplaceRange("%FIRST_COLUMN%", aRangeList[0]);

    // Between Groups
    {
@@ -416,8 +416,8 @@ void ScAnalysisOfVarianceDialog::AnovaTwoFactor(AddressWalkerWriter& output, For

    // Setup auto-replace strings
    aTemplate.autoReplaceRange(strWildcardRange, mInputRange);
    aTemplate.autoReplaceRange("%FIRST_COLUMN%", *aColumnRangeList[0]);
    aTemplate.autoReplaceRange("%FIRST_ROW%",    *aRowRangeList[0]);
    aTemplate.autoReplaceRange("%FIRST_COLUMN%", aColumnRangeList[0]);
    aTemplate.autoReplaceRange("%FIRST_ROW%",    aRowRangeList[0]);

    // Rows
    {
diff --git a/sc/source/ui/StatisticsDialogs/MatrixComparisonGenerator.cxx b/sc/source/ui/StatisticsDialogs/MatrixComparisonGenerator.cxx
index 6342228..98d022c 100644
--- a/sc/source/ui/StatisticsDialogs/MatrixComparisonGenerator.cxx
+++ b/sc/source/ui/StatisticsDialogs/MatrixComparisonGenerator.cxx
@@ -38,8 +38,8 @@ namespace
                if (j >= i)
                {
                    aTemplate.setTemplate(aTemplateString);
                    aTemplate.applyRange("%VAR1%", *aRangeList[i]);
                    aTemplate.applyRange("%VAR2%", *aRangeList[j]);
                    aTemplate.applyRange("%VAR1%", aRangeList[i]);
                    aTemplate.applyRange("%VAR2%", aRangeList[j]);
                    aOutput.writeFormula(aTemplate.getTemplate());
                }
                aOutput.nextRow();
diff --git a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx
index 7c4ca72..b654bea 100644
--- a/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx
+++ b/sc/source/ui/StatisticsDialogs/RandomNumberGeneratorDialog.cxx
@@ -361,7 +361,7 @@ IMPL_LINK_NOARG(ScRandomNumberGeneratorDialog, InputRangeModified, Edit&, void)
{
    ScRangeList aRangeList;
    bool bValid = ParseWithNames( aRangeList, mpInputRangeEdit->GetText(), mpDoc);
    const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
    const ScRange* pRange = (bValid && aRangeList.size() == 1) ? &aRangeList[0] : nullptr;
    if (pRange)
    {
        maInputRange = *pRange;
diff --git a/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx b/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx
index 106fa50..4288714 100644
--- a/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx
+++ b/sc/source/ui/StatisticsDialogs/SamplingDialog.cxx
@@ -344,7 +344,7 @@ IMPL_LINK_NOARG(ScSamplingDialog, RefInputModifyHandler, Edit&, void)
        {
            ScRangeList aRangeList;
            bool bValid = ParseWithNames( aRangeList, mpInputRangeEdit->GetText(), mDocument);
            const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
            const ScRange* pRange = (bValid && aRangeList.size() == 1) ? &aRangeList[0] : nullptr;
            if (pRange)
            {
                mInputRange = *pRange;
@@ -360,7 +360,7 @@ IMPL_LINK_NOARG(ScSamplingDialog, RefInputModifyHandler, Edit&, void)
        {
            ScRangeList aRangeList;
            bool bValid = ParseWithNames( aRangeList, mpOutputRangeEdit->GetText(), mDocument);
            const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
            const ScRange* pRange = (bValid && aRangeList.size() == 1) ? &aRangeList[0] : nullptr;
            if (pRange)
            {
                mOutputAddress = pRange->aStart;
diff --git a/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx b/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx
index 6b17b50..5064519 100644
--- a/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx
+++ b/sc/source/ui/StatisticsDialogs/StatisticsInputOutputDialog.cxx
@@ -33,7 +33,7 @@ ScRangeList ScStatisticsInputOutputDialog::MakeColumnRangeList(SCTAB aTab, ScAdd
            ScAddress(inCol, aStart.Row(), aTab),
            ScAddress(inCol, aEnd.Row(),   aTab) );

        aRangeList.Append(aColumnRange);
        aRangeList.push_back(aColumnRange);
    }
    return aRangeList;
}
@@ -47,7 +47,7 @@ ScRangeList ScStatisticsInputOutputDialog::MakeRowRangeList(SCTAB aTab, ScAddres
            ScAddress(aStart.Col(), inRow, aTab),
            ScAddress(aEnd.Col(),   inRow, aTab) );

        aRangeList.Append(aRowRange);
        aRangeList.push_back(aRowRange);
    }
    return aRangeList;
}
@@ -233,7 +233,7 @@ IMPL_LINK_NOARG( ScStatisticsInputOutputDialog, RefInputModifyHandler, Edit&, vo
        {
            ScRangeList aRangeList;
            bool bValid = ParseWithNames( aRangeList, mpInputRangeEdit->GetText(), mDocument);
            const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
            const ScRange* pRange = (bValid && aRangeList.size() == 1) ? &aRangeList[0] : nullptr;
            if (pRange)
            {
                mInputRange = *pRange;
@@ -249,7 +249,7 @@ IMPL_LINK_NOARG( ScStatisticsInputOutputDialog, RefInputModifyHandler, Edit&, vo
        {
            ScRangeList aRangeList;
            bool bValid = ParseWithNames( aRangeList, mpOutputRangeEdit->GetText(), mDocument);
            const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
            const ScRange* pRange = (bValid && aRangeList.size() == 1) ? &aRangeList[0] : nullptr;
            if (pRange)
            {
                mOutputAddress = pRange->aStart;
diff --git a/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx b/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx
index 163044c..0fa8c96 100644
--- a/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx
+++ b/sc/source/ui/StatisticsDialogs/StatisticsTwoVariableDialog.cxx
@@ -256,7 +256,7 @@ IMPL_LINK_NOARG( ScStatisticsTwoVariableDialog, RefInputModifyHandler, Edit&, vo
        {
            ScRangeList aRangeList;
            bool bValid = ParseWithNames( aRangeList, mpVariable1RangeEdit->GetText(), mDocument);
            const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
            const ScRange* pRange = (bValid && aRangeList.size() == 1) ? &aRangeList[0] : nullptr;
            if (pRange)
            {
                mVariable1Range = *pRange;
@@ -272,7 +272,7 @@ IMPL_LINK_NOARG( ScStatisticsTwoVariableDialog, RefInputModifyHandler, Edit&, vo
        {
            ScRangeList aRangeList;
            bool bValid = ParseWithNames( aRangeList, mpVariable2RangeEdit->GetText(), mDocument);
            const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
            const ScRange* pRange = (bValid && aRangeList.size() == 1) ? &aRangeList[0] : nullptr;
            if (pRange)
            {
                mVariable2Range = *pRange;
@@ -288,7 +288,7 @@ IMPL_LINK_NOARG( ScStatisticsTwoVariableDialog, RefInputModifyHandler, Edit&, vo
        {
            ScRangeList aRangeList;
            bool bValid = ParseWithNames( aRangeList, mpOutputRangeEdit->GetText(), mDocument);
            const ScRange* pRange = (bValid && aRangeList.size() == 1) ? aRangeList[0] : nullptr;
            const ScRange* pRange = (bValid && aRangeList.size() == 1) ? &aRangeList[0] : nullptr;
            if (pRange)
            {
                mOutputAddress = pRange->aStart;
diff --git a/sc/source/ui/condformat/condformatdlg.cxx b/sc/source/ui/condformat/condformatdlg.cxx
index b162591..fa56769 100644
--- a/sc/source/ui/condformat/condformatdlg.cxx
+++ b/sc/source/ui/condformat/condformatdlg.cxx
@@ -542,8 +542,7 @@ ScCondFormatDlg::ScCondFormatDlg(SfxBindings* pB, SfxChildWindow* pCW,
        if(aRange.empty())
        {
            ScAddress aPos(mpViewData->GetCurX(), mpViewData->GetCurY(), mpViewData->GetTabNo());
            ScRange* pRange = new ScRange(aPos);
            aRange.push_back(pRange);
            aRange.push_back(ScRange(aPos));
        }
        mnKey = 0;
    }
diff --git a/sc/source/ui/dialogs/searchresults.cxx b/sc/source/ui/dialogs/searchresults.cxx
index f72bb74..374ce58 100644
--- a/sc/source/ui/dialogs/searchresults.cxx
+++ b/sc/source/ui/dialogs/searchresults.cxx
@@ -107,17 +107,17 @@ void SearchResultsDlg::FillResults( ScDocument* pDoc, const ScRangeList &rMatche
            /* TODO: a CellNotes iterator would come handy and might speed
             * things up a little, though we only loop through the
             * search/replace result positions here. */
            ScRange aRange( *rMatchedRanges[i] );
            ScRange const & rRange( rMatchedRanges[i] );
            // Bear in mind that mostly the range is one address position
            // or a column or a row joined.
            ScAddress aPos( aRange.aStart );
            for ( ; aPos.Tab() <= aRange.aEnd.Tab(); aPos.IncTab())
            ScAddress aPos( rRange.aStart );
            for ( ; aPos.Tab() <= rRange.aEnd.Tab(); aPos.IncTab())
            {
                if (aPos.Tab() >= nTabCount)
                    break;  // can this even happen? we just searched on existing sheets ...
                for (aPos.SetCol( aRange.aStart.Col()); aPos.Col() <= aRange.aEnd.Col(); aPos.IncCol())
                for (aPos.SetCol( rRange.aStart.Col()); aPos.Col() <= rRange.aEnd.Col(); aPos.IncCol())
                {
                    for (aPos.SetRow( aRange.aStart.Row()); aPos.Row() <= aRange.aEnd.Row(); aPos.IncRow())
                    for (aPos.SetRow( rRange.aStart.Row()); aPos.Row() <= rRange.aEnd.Row(); aPos.IncRow())
                    {
                        const ScPostIt* pNote = pDoc->GetNote( aPos);
                        if (pNote)
@@ -133,7 +133,7 @@ void SearchResultsDlg::FillResults( ScDocument* pDoc, const ScRangeList &rMatche
    {
        for (size_t i = 0, n = nMatchMax; i < n; ++i)
        {
            ScCellIterator aIter(pDoc, *rMatchedRanges[i]);
            ScCellIterator aIter(pDoc, rMatchedRanges[i]);
            for (bool bHas = aIter.first(); bHas; bHas = aIter.next())
            {
                ScAddress aPos = aIter.GetPos();
diff --git a/sc/source/ui/docshell/arealink.cxx b/sc/source/ui/docshell/arealink.cxx
index e9ce36f..3e719df 100644
--- a/sc/source/ui/docshell/arealink.cxx
+++ b/sc/source/ui/docshell/arealink.cxx
@@ -281,7 +281,7 @@ bool ScAreaLink::Refresh( const OUString& rNewFile, const OUString& rNewFilter,
        SCROW nEndRow = 0;
        if (rSrcDoc.GetCellArea( 0, nEndCol, nEndRow))
        {
            aSourceRanges.Append( ScRange( 0,0,0, nEndCol, nEndRow, 0));
            aSourceRanges.push_back( ScRange( 0,0,0, nEndCol, nEndRow, 0));
            nWidth = nEndCol + 1;
            nHeight = nEndRow + 2;
        }
@@ -295,7 +295,7 @@ bool ScAreaLink::Refresh( const OUString& rNewFile, const OUString& rNewFilter,
        ScRange aTokenRange;
        if( FindExtRange( aTokenRange, &rSrcDoc, aToken ) )
        {
            aSourceRanges.Append( aTokenRange);
            aSourceRanges.push_back( aTokenRange);
            // columns: find maximum
            nWidth = std::max( nWidth, static_cast<SCCOL>(aTokenRange.aEnd.Col() - aTokenRange.aStart.Col() + 1) );
            // rows: add row range + 1 empty row
@@ -373,13 +373,13 @@ bool ScAreaLink::Refresh( const OUString& rNewFile, const OUString& rNewFilter,
            ScRange aNewTokenRange( aNewRange.aStart );
            for (size_t nRange = 0; nRange < aSourceRanges.size(); ++nRange)
            {
                ScRange aTokenRange( *aSourceRanges[nRange]);
                SCTAB nSrcTab = aTokenRange.aStart.Tab();
                ScRange const & rTokenRange( aSourceRanges[nRange]);
                SCTAB nSrcTab = rTokenRange.aStart.Tab();
                ScMarkData aSourceMark;
                aSourceMark.SelectOneTable( nSrcTab );      // selecting for CopyToClip
                aSourceMark.SetMarkArea( aTokenRange );
                aSourceMark.SetMarkArea( rTokenRange );

                ScClipParam aClipParam(aTokenRange, false);
                ScClipParam aClipParam(rTokenRange, false);
                rSrcDoc.CopyToClip(aClipParam, &aClipDoc, &aSourceMark, false, false);

                if ( aClipDoc.HasAttrib( 0,0,nSrcTab, MAXCOL,MAXROW,nSrcTab,
@@ -393,8 +393,8 @@ bool ScAreaLink::Refresh( const OUString& rNewFile, const OUString& rNewFilter,
                    aClipDoc.ApplyPatternAreaTab( 0,0, MAXCOL,MAXROW, nSrcTab, aPattern );
                }

                aNewTokenRange.aEnd.SetCol( aNewTokenRange.aStart.Col() + (aTokenRange.aEnd.Col() - aTokenRange.aStart.Col()) );
                aNewTokenRange.aEnd.SetRow( aNewTokenRange.aStart.Row() + (aTokenRange.aEnd.Row() - aTokenRange.aStart.Row()) );
                aNewTokenRange.aEnd.SetCol( aNewTokenRange.aStart.Col() + (rTokenRange.aEnd.Col() - rTokenRange.aStart.Col()) );
                aNewTokenRange.aEnd.SetRow( aNewTokenRange.aStart.Row() + (rTokenRange.aEnd.Row() - rTokenRange.aStart.Row()) );
                ScMarkData aDestMark;
                aDestMark.SelectOneTable( nDestTab );
                aDestMark.SetMarkArea( aNewTokenRange );
diff --git a/sc/source/ui/docshell/dbdocfun.cxx b/sc/source/ui/docshell/dbdocfun.cxx
index c81d665..7e21ade 100644
--- a/sc/source/ui/docshell/dbdocfun.cxx
+++ b/sc/source/ui/docshell/dbdocfun.cxx
@@ -1161,8 +1161,8 @@ bool isEditable(ScDocShell& rDocShell, const ScRangeList& rRanges, bool bApi)

    for (size_t i = 0, n = rRanges.size(); i < n; ++i)
    {
        const ScRange* p = rRanges[i];
        ScEditableTester aTester(&rDoc, *p);
        const ScRange & r = rRanges[i];
        ScEditableTester aTester(&rDoc, r);
        if (!aTester.IsEditable())
        {
            if (!bApi)
@@ -1254,8 +1254,8 @@ bool ScDBDocFunc::DataPilotUpdate( ScDPObject* pOldObj, const ScDPObject* pNewOb
    WaitObject aWait( ScDocShell::GetActiveDialogParent() );

    ScRangeList aRanges;
    aRanges.Append(pOldObj->GetOutRange());
    aRanges.Append(pNewObj->GetOutRange().aStart); // at least one cell in the output position must be editable.
    aRanges.push_back(pOldObj->GetOutRange());
    aRanges.push_back(pNewObj->GetOutRange().aStart); // at least one cell in the output position must be editable.
    if (!isEditable(rDocShell, aRanges, bApi))
        return false;

diff --git a/sc/source/ui/docshell/docfunc.cxx b/sc/source/ui/docshell/docfunc.cxx
index e8705d7..6b0ee19 100644
--- a/sc/source/ui/docshell/docfunc.cxx
+++ b/sc/source/ui/docshell/docfunc.cxx
@@ -528,21 +528,20 @@ static void lcl_collectAllPredOrSuccRanges(
    ScRangeList aSrcRanges(rSrcRanges);
    if (aSrcRanges.empty())
        return;
    ScRange* p = aSrcRanges.front();
    ScDetectiveFunc aDetFunc(&rDoc, p->aStart.Tab());
    ScRangeList aDestRanges;
    ScRange const & rFrontRange = aSrcRanges.front();
    ScDetectiveFunc aDetFunc(&rDoc, rFrontRange.aStart.Tab());
    for (size_t i = 0, n = aSrcRanges.size(); i < n; ++i)
    {
        p = aSrcRanges[i];
        ScRange const & r = aSrcRanges[i];
        if (bPred)
        {
            aDetFunc.GetAllPreds(
                p->aStart.Col(), p->aStart.Row(), p->aEnd.Col(), p->aEnd.Row(), aRefTokens);
                r.aStart.Col(), r.aStart.Row(), r.aEnd.Col(), r.aEnd.Row(), aRefTokens);
        }
        else
        {
            aDetFunc.GetAllSuccs(
                p->aStart.Col(), p->aStart.Row(), p->aEnd.Col(), p->aEnd.Row(), aRefTokens);
                r.aStart.Col(), r.aStart.Row(), r.aEnd.Col(), r.aEnd.Row(), aRefTokens);
        }
    }
    rRefTokens.swap(aRefTokens);
diff --git a/sc/source/ui/docshell/docsh3.cxx b/sc/source/ui/docshell/docsh3.cxx
index 582f39a..8adcbfb 100644
--- a/sc/source/ui/docshell/docsh3.cxx
+++ b/sc/source/ui/docshell/docsh3.cxx
@@ -104,7 +104,7 @@ void ScDocShell::PostPaint( const ScRangeList& rRanges, PaintPartFlags nPart, sa
    ScRangeList aPaintRanges;
    for (size_t i = 0, n = rRanges.size(); i < n; ++i)
    {
        const ScRange& rRange = *rRanges[i];
        const ScRange& rRange = rRanges[i];
        SCCOL nCol1 = rRange.aStart.Col(), nCol2 = rRange.aEnd.Col();
        SCROW nRow1 = rRange.aStart.Row(), nRow2 = rRange.aEnd.Row();
        SCTAB nTab1 = rRange.aStart.Tab(), nTab2 = rRange.aEnd.Tab();
@@ -159,7 +159,7 @@ void ScDocShell::PostPaint( const ScRangeList& rRanges, PaintPartFlags nPart, sa
                nCol2 = MAXCOL;
            }
        }
        aPaintRanges.Append(ScRange(nCol1, nRow1, nTab1, nCol2, nRow2, nTab2));
        aPaintRanges.push_back(ScRange(nCol1, nRow1, nTab1, nCol2, nRow2, nTab2));
    }

    Broadcast(ScPaintHint(aPaintRanges.Combine(), nPart));
@@ -255,9 +255,9 @@ void ScDocShell::UnlockPaint_Impl(bool bDoc)
                for ( size_t i = 0, nCount = xRangeList->size(); i < nCount; i++ )
                {
                    //! nExtFlags ???
                    ScRange aRange = *(*xRangeList)[i];
                    PostPaint( aRange.aStart.Col(), aRange.aStart.Row(), aRange.aStart.Tab(),
                                aRange.aEnd.Col(), aRange.aEnd.Row(), aRange.aEnd.Tab(),
                    ScRange const & rRange = (*xRangeList)[i];
                    PostPaint( rRange.aStart.Col(), rRange.aStart.Row(), rRange.aStart.Tab(),
                                rRange.aEnd.Col(), rRange.aEnd.Row(), rRange.aEnd.Tab(),
                                nParts );
                }
            }
diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx
index d0d95a2..81f321d 100644
--- a/sc/source/ui/docshell/docsh4.cxx
+++ b/sc/source/ui/docshell/docsh4.cxx
@@ -331,7 +331,7 @@ void ScDocShell::Execute( SfxRequest& rReq )
                    if ( !aRangeListRef->empty() )
                    {
                        bMultiRange = true;
                        aSingleRange = *aRangeListRef->front(); // for header
                        aSingleRange = aRangeListRef->front(); // for header
                        bValid = true;
                    }
                    else
diff --git a/sc/source/ui/docshell/docsh5.cxx b/sc/source/ui/docshell/docsh5.cxx
index 8b1730a..acd05f0 100644
--- a/sc/source/ui/docshell/docsh5.cxx
+++ b/sc/source/ui/docshell/docsh5.cxx
@@ -865,7 +865,7 @@ sal_uLong ScDocShell::TransferTab( ScDocShell& rSrcDocShell, SCTAB nSrcPos,
    // set the transferred area to the copyparam to make adjusting formulas possible
    ScClipParam aParam;
    ScRange aRange(0, 0, nSrcPos, MAXCOL, MAXROW, nSrcPos);
    aParam.maRanges.Append(aRange);
    aParam.maRanges.push_back(aRange);
    rSrcDoc.SetClipParam(aParam);

    sal_uLong nErrVal =  aDocument.TransferTab( &rSrcDoc, nSrcPos, nDestPos,
diff --git a/sc/source/ui/docshell/externalrefmgr.cxx b/sc/source/ui/docshell/externalrefmgr.cxx
index 9676d89..4ca3df9 100644
--- a/sc/source/ui/docshell/externalrefmgr.cxx
+++ b/sc/source/ui/docshell/externalrefmgr.cxx
@@ -435,10 +435,7 @@ void ScExternalRefCache::Table::setCachedCell(SCCOL nCol, SCROW nRow)
void ScExternalRefCache::Table::setCachedCellRange(SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2)
{
    ScRange aRange(nCol1, nRow1, 0, nCol2, nRow2, 0);
    if ( maCachedRanges.empty() )
        maCachedRanges.Append(aRange);
    else
        maCachedRanges.Join(aRange);
    maCachedRanges.Join(aRange);
}

void ScExternalRefCache::Table::setWholeTableCached()
diff --git a/sc/source/ui/docshell/tablink.cxx b/sc/source/ui/docshell/tablink.cxx
index f8dd7e3..224e88a 100644
--- a/sc/source/ui/docshell/tablink.cxx
+++ b/sc/source/ui/docshell/tablink.cxx
@@ -322,11 +322,11 @@ bool ScTableLink::Refresh(const OUString& rNewFile, const OUString& rNewFilter,

                        for (size_t nPos=0; nPos < nRanges; nPos++)
                        {
                            const ScRange* pRange = aErrorCells[ nPos ];
                            SCCOL nStartCol = pRange->aStart.Col();
                            SCROW nStartRow = pRange->aStart.Row();
                            SCCOL nEndCol = pRange->aEnd.Col();
                            SCROW nEndRow = pRange->aEnd.Row();
                            const ScRange & rRange = aErrorCells[ nPos ];
                            SCCOL nStartCol = rRange.aStart.Col();
                            SCROW nStartRow = rRange.aStart.Row();
                            SCCOL nEndCol = rRange.aEnd.Col();
                            SCROW nEndRow = rRange.aEnd.Row();
                            for (SCROW nRow=nStartRow; nRow<=nEndRow; nRow++)
                                for (SCCOL nCol=nStartCol; nCol<=nEndCol; nCol++)
                                {
diff --git a/sc/source/ui/drawfunc/fuins2.cxx b/sc/source/ui/drawfunc/fuins2.cxx
index a041c7b..b494a11 100644
--- a/sc/source/ui/drawfunc/fuins2.cxx
+++ b/sc/source/ui/drawfunc/fuins2.cxx
@@ -462,10 +462,10 @@ FuInsertChart::FuInsertChart(ScTabViewShell* pViewSh, vcl::Window* pWin, ScDrawV
            // get "total" range for positioning
            if ( !aRanges.empty() )
            {
                aPositionRange = *aRanges[ 0 ];
                aPositionRange = aRanges[ 0 ];
                for ( size_t i = 1, nCount = aRanges.size(); i < nCount; ++i )
                {
                    aPositionRange.ExtendTo( *aRanges[ i ] );
                    aPositionRange.ExtendTo( aRanges[ i ] );
                }
            }

diff --git a/sc/source/ui/inc/AccessibleSpreadsheet.hxx b/sc/source/ui/inc/AccessibleSpreadsheet.hxx
index baf47f0..ade94b0 100644
--- a/sc/source/ui/inc/AccessibleSpreadsheet.hxx
+++ b/sc/source/ui/inc/AccessibleSpreadsheet.hxx
@@ -269,7 +269,7 @@ public:
    ScRange       m_aLastWithInMarkRange;
    OUString      m_strCurCellValue;
    ScRangeList   m_LastMarkedRanges;
    typedef std::vector<ScRange*> VEC_RANGE;
    typedef std::vector<ScRange> VEC_RANGE;
    VEC_RANGE     m_vecTempRange;
    typedef std::pair<sal_uInt16,sal_uInt16> PAIR_COL;
    typedef std::vector<PAIR_COL> VEC_COL;
@@ -280,7 +280,7 @@ public:
    bool IsScAddrFormulaSel (const ScAddress &addr) const;
    bool IsFormulaMode();
    ScMyAddress CalcScAddressFromRangeList(ScRangeList *pMarkedRanges,sal_Int32 nSelectedChildIndex);
    static bool CalcScRangeDifferenceMax(const ScRange *pSrc, const ScRange *pDest,int nMax,VEC_MYADDR &vecRet,int &nSize);
    static bool CalcScRangeDifferenceMax(const ScRange & rSrc, const ScRange & rDest,int nMax,VEC_MYADDR &vecRet,int &nSize);
    static bool CalcScRangeListDifferenceMax(ScRangeList *pSrc,ScRangeList *pDest,int nMax,VEC_MYADDR &vecRet);
};

diff --git a/sc/source/ui/inc/docsh.hxx b/sc/source/ui/inc/docsh.hxx
index 50bcf63..197ca46 100644
--- a/sc/source/ui/inc/docsh.hxx
+++ b/sc/source/ui/inc/docsh.hxx
@@ -475,8 +475,7 @@ namespace HelperNotifyChanges
    {
        if (ScModelObj* pModelObj = getMustPropagateChangesModel(rDocShell))
        {
            ScRangeList aChangeRanges;
            aChangeRanges.Append(rRange);
            ScRangeList aChangeRanges(rRange);
            Notify(*pModelObj, aChangeRanges, rType);
        }
    }
diff --git a/sc/source/ui/miscdlgs/acredlin.cxx b/sc/source/ui/miscdlgs/acredlin.cxx
index 6a6f6f3..210392e 100644
--- a/sc/source/ui/miscdlgs/acredlin.cxx
+++ b/sc/source/ui/miscdlgs/acredlin.cxx
@@ -244,8 +244,8 @@ void ScAcceptChgDlg::Init()

    if( !aChangeViewSet.GetTheRangeList().empty() )
    {
        const ScRange* pRangeEntry = aChangeViewSet.GetTheRangeList().front();
        OUString aRefStr(pRangeEntry->Format(ScRefFlags::RANGE_ABS_3D, pDoc));
        const ScRange & rRangeEntry = aChangeViewSet.GetTheRangeList().front();
        OUString aRefStr(rRangeEntry.Format(ScRefFlags::RANGE_ABS_3D, pDoc));
        pTPFilter->SetRange(aRefStr);
    }

@@ -338,8 +338,8 @@ bool ScAcceptChgDlg::IsValidAction(const ScChangeAction* pScChangeAction)
        {
            for ( size_t i = 0, nRanges = aRangeList.size(); i < nRanges; ++i )
            {
                ScRange* pRangeEntry = aRangeList[ i ];
                if (pRangeEntry->Intersects(aRef)) {
                ScRange const & rRangeEntry = aRangeList[ i ];
                if (rRangeEntry.Intersects(aRef)) {
                    bFlag = true;
                    break;
                }
@@ -457,8 +457,8 @@ SvTreeListEntry* ScAcceptChgDlg::AppendChangeAction(
            {
                for ( size_t i = 0, nRanges = aRangeList.size(); i < nRanges; ++i )
                {
                    ScRange* pRangeEntry = aRangeList[ i ];
                    if( pRangeEntry->Intersects(aRef) )
                    ScRange const & rRangeEntry = aRangeList[ i ];
                    if( rRangeEntry.Intersects(aRef) )
                    {
                        bHasFilterEntry=true;
                        bFlag=true;
@@ -527,8 +527,8 @@ SvTreeListEntry* ScAcceptChgDlg::AppendFilteredAction(
        {
            for ( size_t i = 0, nRanges = aRangeList.size(); i < nRanges; ++i )
            {
                ScRange* pRangeEntry=aRangeList[ i ];
                if( pRangeEntry->Intersects(aRef) )
                ScRange const & rRangeEntry=aRangeList[ i ];
                if( rRangeEntry.Intersects(aRef) )
                {
                    if( pScChangeAction->GetState()==eState )
                        bFlag = true;
@@ -647,8 +647,8 @@ SvTreeListEntry* ScAcceptChgDlg::InsertChangeActionContent(const ScChangeActionC
        {
            for ( size_t i = 0, nRanges = aRangeList.size(); i < nRanges; ++i )
            {
                ScRange* pRangeEntry = aRangeList[ i ];
                if( pRangeEntry->Intersects(aRef) )
                ScRange const & rRangeEntry = aRangeList[ i ];
                if( rRangeEntry.Intersects(aRef) )
                {
                    bFlag=true;
                    break;
diff --git a/sc/source/ui/miscdlgs/anyrefdg.cxx b/sc/source/ui/miscdlgs/anyrefdg.cxx
index 8a9c71e..e4e51f9 100644
--- a/sc/source/ui/miscdlgs/anyrefdg.cxx
+++ b/sc/source/ui/miscdlgs/anyrefdg.cxx
@@ -144,9 +144,9 @@ void ScFormulaReferenceHelper::ShowSimpleReference(const OUString& rStr)
            {
                for ( size_t i = 0, nRanges = aRangeList.size(); i < nRanges; ++i )
                {
                    ScRange* pRangeEntry = aRangeList[ i ];
                    ScRange const & rRangeEntry = aRangeList[ i ];
                    Color aColName = ScRangeFindList::GetColorName( i );
                    pTabViewShell->AddHighlightRange( *pRangeEntry, aColName );
                    pTabViewShell->AddHighlightRange( rRangeEntry, aColName );
               }
            }
        }
@@ -173,10 +173,10 @@ bool ScFormulaReferenceHelper::ParseWithNames( ScRangeList& rRanges, const OUStr
                aRange.aStart.SetTab( nRefTab );
            if ( (nFlags & ScRefFlags::TAB2_3D) == ScRefFlags::ZERO )
                aRange.aEnd.SetTab( aRange.aStart.Tab() );
            rRanges.Append( aRange );
            rRanges.push_back( aRange );
        }
        else if ( ScRangeUtil::MakeRangeFromName( aRangeStr, pDoc, nRefTab, aRange, RUTL_NAMES, aDetails ) )
            rRanges.Append( aRange );
            rRanges.push_back( aRange );
        else
            bError = true;
    }
@@ -304,13 +304,13 @@ void ScFormulaReferenceHelper::ReleaseFocus( formula::RefEdit* pEdit )
            {
                if ( !aRangeList.empty() )
                {
                    const ScRange* pRange = aRangeList.front();
                    pViewShell->SetTabNo( pRange->aStart.Tab() );
                    pViewShell->MoveCursorAbs(  pRange->aStart.Col(),
                        pRange->aStart.Row(), SC_FOLLOW_JUMP, false, false );
                    pViewShell->MoveCursorAbs( pRange->aEnd.Col(),
                        pRange->aEnd.Row(), SC_FOLLOW_JUMP, true, false );
                    m_pDlg->SetReference( *pRange, pDoc );
                    const ScRange & rRange = aRangeList.front();
                    pViewShell->SetTabNo( rRange.aStart.Tab() );
                    pViewShell->MoveCursorAbs(  rRange.aStart.Col(),
                        rRange.aStart.Row(), SC_FOLLOW_JUMP, false, false );
                    pViewShell->MoveCursorAbs( rRange.aEnd.Col(),
                        rRange.aEnd.Row(), SC_FOLLOW_JUMP, true, false );
                    m_pDlg->SetReference( rRange, pDoc );
                }
            }
        }
diff --git a/sc/source/ui/miscdlgs/highred.cxx b/sc/source/ui/miscdlgs/highred.cxx
index 9601a7c..627fb68a 100644
--- a/sc/source/ui/miscdlgs/highred.cxx
+++ b/sc/source/ui/miscdlgs/highred.cxx
@@ -123,8 +123,8 @@ void ScHighlightChgDlg::Init()

    if ( !aChangeViewSet.GetTheRangeList().empty() )
    {
        const ScRange* pRangeEntry = aChangeViewSet.GetTheRangeList().front();
        OUString aRefStr(pRangeEntry->Format(ScRefFlags::RANGE_ABS_3D, pDoc));
        const ScRange & rRangeEntry = aChangeViewSet.GetTheRangeList().front();
        OUString aRefStr(rRangeEntry.Format(ScRefFlags::RANGE_ABS_3D, pDoc));
        m_pFilterCtr->SetRange(aRefStr);
    }
    m_pFilterCtr->Enable();
diff --git a/sc/source/ui/miscdlgs/optsolver.cxx b/sc/source/ui/miscdlgs/optsolver.cxx
index 73141f4..6ffb40c 100644
--- a/sc/source/ui/miscdlgs/optsolver.cxx
+++ b/sc/source/ui/miscdlgs/optsolver.cxx
@@ -868,7 +868,7 @@ bool ScOptSolverDlg::CallSolver()       // return true -> close dialog after cal

    for ( size_t nRangePos=0, nRange = aVarRanges.size(); nRangePos < nRange; ++nRangePos )
    {
        ScRange aRange(*aVarRanges[ nRangePos ] );
        ScRange aRange( aVarRanges[ nRangePos ] );
        aRange.PutInOrder();
        SCTAB nTab = aRange.aStart.Tab();

diff --git a/sc/source/ui/undo/undobase.cxx b/sc/source/ui/undo/undobase.cxx
index 6198c87..d88d29d7 100644
--- a/sc/source/ui/undo/undobase.cxx
+++ b/sc/source/ui/undo/undobase.cxx
@@ -388,7 +388,7 @@ void ScMultiBlockUndo::ShowBlock()
        return;

    // Move to the sheet of the first range.
    ScRange aRange = *maBlockRanges.front();
    ScRange aRange = maBlockRanges.front();
    ShowTable(aRange);
    pViewShell->MoveCursorAbs(
        aRange.aStart.Col(), aRange.aStart.Row(), SC_FOLLOW_JUMP, false, false);
@@ -399,7 +399,7 @@ void ScMultiBlockUndo::ShowBlock()

    for (size_t i = 1, n = maBlockRanges.size(); i < n; ++i)
    {
        aRange = *maBlockRanges[i];
        aRange = maBlockRanges[i];
        aRange.aStart.SetTab(nTab);
        aRange.aEnd.SetTab(nTab);
        pViewShell->MarkRange(aRange, false, true);
diff --git a/sc/source/ui/undo/undoblk.cxx b/sc/source/ui/undo/undoblk.cxx
index a59b5d5..6d96cda 100644
--- a/sc/source/ui/undo/undoblk.cxx
+++ b/sc/source/ui/undo/undoblk.cxx
@@ -919,7 +919,7 @@ void ScUndoPaste::SetChangeTrack()
    {
        for (size_t i = 0, n = maBlockRanges.size(); i < n; ++i)
        {
            pChangeTrack->AppendContentRange(*maBlockRanges[i], pUndoDoc,
            pChangeTrack->AppendContentRange(maBlockRanges[i], pUndoDoc,
                nStartChangeAction, nEndChangeAction, SC_CACM_PASTE );
        }
    }
@@ -963,7 +963,7 @@ void ScUndoPaste::DoChange(bool bUndo)
            bool bRowInfo = true;
            for (size_t i = 0, n = maBlockRanges.size(); i < n; ++i)
            {
                const ScRange& r = *maBlockRanges[i];
                const ScRange& r = maBlockRanges[i];
                bColInfo &= (r.aStart.Row() == 0 && r.aEnd.Row() == MAXROW);
                bRowInfo &= (r.aStart.Col() == 0 && r.aEnd.Col() == MAXCOL);
                if (!bColInfo && !bRowInfo)
@@ -977,7 +977,7 @@ void ScUndoPaste::DoChange(bool bUndo)
        //  all sheets - CopyToDocument skips those that don't exist in pRedoDoc
        for (size_t i = 0, n = maBlockRanges.size(); i < n; ++i)
        {
            ScRange aCopyRange = *maBlockRanges[i];
            ScRange aCopyRange = maBlockRanges[i];
            aCopyRange.aStart.SetTab(0);
            aCopyRange.aEnd.SetTab(nTabCount-1);
            rDoc.CopyToDocument(aCopyRange, nUndoFlags, false, *pRedoDoc);
@@ -992,7 +992,7 @@ void ScUndoPaste::DoChange(bool bUndo)
    aMarkData.MarkToMulti();
    rDoc.DeleteSelection(nUndoFlags, aMarkData, false); // no broadcasting here
    for (size_t i = 0, n = maBlockRanges.size(); i < n; ++i)
        rDoc.BroadcastCells(*maBlockRanges[i], SfxHintId::ScDataChanged);
        rDoc.BroadcastCells(maBlockRanges[i], SfxHintId::ScDataChanged);

    aMarkData.MarkToSimple();

@@ -1002,7 +1002,7 @@ void ScUndoPaste::DoChange(bool bUndo)
    {
        for (size_t i = 0, n = maBlockRanges.size(); i < n; ++i)
        {
            ScRange aRange = *maBlockRanges[i];
            ScRange aRange = maBlockRanges[i];
            aRange.aStart.SetTab(nFirstSelected);
            aRange.aEnd.SetTab(nFirstSelected);
            pRedoDoc->UndoToDocument(aRange, nUndoFlags, false, rDoc);
@@ -1023,7 +1023,7 @@ void ScUndoPaste::DoChange(bool bUndo)
    {
        pWorkRefData->DoUndo( &rDoc, true );     // true = bSetChartRangeLists for SetChartListenerCollection
        if (!maBlockRanges.empty() &&
            rDoc.RefreshAutoFilter(0, 0, MAXCOL, MAXROW, maBlockRanges[0]->aStart.Tab()))
            rDoc.RefreshAutoFilter(0, 0, MAXCOL, MAXROW, maBlockRanges[0].aStart.Tab()))
            bPaintAll = true;
    }

@@ -1034,7 +1034,7 @@ void ScUndoPaste::DoChange(bool bUndo)
    {
        for (size_t i = 0, n = maBlockRanges.size(); i < n; ++i)
        {
            ScRange aRange = *maBlockRanges[i];
            ScRange aRange = maBlockRanges[i];
            ScMarkData::iterator itr = aMarkData.begin(), itrEnd = aMarkData.end();
            for (; itr != itrEnd && *itr < nTabCount; ++itr)
            {
@@ -1058,7 +1058,7 @@ void ScUndoPaste::DoChange(bool bUndo)
    PaintPartFlags nPaint = PaintPartFlags::Grid;
    for (size_t i = 0, n = aDrawRanges.size(); i < n; ++i)
    {
        ScRange& rDrawRange = *aDrawRanges[i];
        ScRange& rDrawRange = aDrawRanges[i];
        rDoc.ExtendMerge(rDrawRange, true);      // only needed for single sheet (text/rtf etc.)
        if (bPaintAll)
        {
@@ -1072,12 +1072,12 @@ void ScUndoPaste::DoChange(bool bUndo)
        }
        else
        {
            if (maBlockRanges[i]->aStart.Row() == 0 && maBlockRanges[i]->aEnd.Row() == MAXROW) // whole column
            if (maBlockRanges[i].aStart.Row() == 0 && maBlockRanges[i].aEnd.Row() == MAXROW) // whole column
            {
                nPaint |= PaintPartFlags::Top;
                rDrawRange.aEnd.SetCol(MAXCOL);
            }
            if (maBlockRanges[i]->aStart.Col() == 0 && maBlockRanges[i]->aEnd.Col() == MAXCOL) // whole row
            if (maBlockRanges[i].aStart.Col() == 0 && maBlockRanges[i].aEnd.Col() == MAXCOL) // whole row
            {
                nPaint |= PaintPartFlags::Left;
                rDrawRange.aEnd.SetRow(MAXROW);
@@ -1109,7 +1109,7 @@ void ScUndoPaste::Undo()
    BeginUndo();
    DoChange(true);
    if (!maBlockRanges.empty())
        ShowTable(*maBlockRanges.front());
        ShowTable(maBlockRanges.front());
    EndUndo();
    SfxGetpApp()->Broadcast( SfxHint( SfxHintId::ScAreaLinksChanged ) );
}
@@ -1380,8 +1380,8 @@ void ScUndoDragDrop::Undo()

    for (size_t i = 0; i < maPaintRanges.size(); ++i)
    {
        const ScRange* p = maPaintRanges[i];
        PaintArea(*p, mnPaintExtFlags);
        const ScRange& r = maPaintRanges[i];
        PaintArea(r, mnPaintExtFlags);
    }

    EndUndo();
@@ -2339,16 +2339,16 @@ static ScRange lcl_TotalRange( const ScRangeList& rRanges )
    ScRange aTotal;
    if ( !rRanges.empty() )
    {
        aTotal = *rRanges[ 0 ];
        aTotal = rRanges[ 0 ];
        for ( size_t i = 1, nCount = rRanges.size(); i < nCount; ++i )
        {
            ScRange aRange = *rRanges[ i ];
            if (aRange.aStart.Col() < aTotal.aStart.Col()) aTotal.aStart.SetCol(aRange.aStart.Col());
            if (aRange.aStart.Row() < aTotal.aStart.Row()) aTotal.aStart.SetRow(aRange.aStart.Row());
            if (aRange.aStart.Tab() < aTotal.aStart.Tab()) aTotal.aStart.SetTab(aRange.aStart.Tab());
            if (aRange.aEnd.Col()   > aTotal.aEnd.Col()  ) aTotal.aEnd.SetCol(  aRange.aEnd.Col()  );
            if (aRange.aEnd.Row()   > aTotal.aEnd.Row()  ) aTotal.aEnd.SetRow(  aRange.aEnd.Row()  );
            if (aRange.aEnd.Tab()   > aTotal.aEnd.Tab()  ) aTotal.aEnd.SetTab(aRange.aEnd.Tab()    );
            ScRange const & rRange = rRanges[ i ];
            if (rRange.aStart.Col() < aTotal.aStart.Col()) aTotal.aStart.SetCol(rRange.aStart.Col());
            if (rRange.aStart.Row() < aTotal.aStart.Row()) aTotal.aStart.SetRow(rRange.aStart.Row());
            if (rRange.aStart.Tab() < aTotal.aStart.Tab()) aTotal.aStart.SetTab(rRange.aStart.Tab());
            if (rRange.aEnd.Col()   > aTotal.aEnd.Col()  ) aTotal.aEnd.SetCol(  rRange.aEnd.Col()  );
            if (rRange.aEnd.Row()   > aTotal.aEnd.Row()  ) aTotal.aEnd.SetRow(  rRange.aEnd.Row()  );
            if (rRange.aEnd.Tab()   > aTotal.aEnd.Tab()  ) aTotal.aEnd.SetTab(rRange.aEnd.Tab()    );
        }
    }
    return aTotal;
@@ -2391,17 +2391,17 @@ void ScUndoBorder::Redo()
    size_t nCount = xRanges->size();
    for (size_t i = 0; i < nCount; ++i )
    {
        ScRange aRange = *(*xRanges)[i];
        SCTAB nTab = aRange.aStart.Tab();
        ScRange const & rRange = (*xRanges)[i];
        SCTAB nTab = rRange.aStart.Tab();

        ScMarkData aMark;
        aMark.SetMarkArea( aRange );
        aMark.SetMarkArea( rRange );
        aMark.SelectTable( nTab, true );

        rDoc.ApplySelectionFrame(aMark, *xOuter, xInner.get());
    }
    for (size_t i = 0; i < nCount; ++i)
        pDocShell->PostPaint( *(*xRanges)[i], PaintPartFlags::Grid, SC_PF_LINES | SC_PF_TESTMERGE );
        pDocShell->PostPaint( (*xRanges)[i], PaintPartFlags::Grid, SC_PF_LINES | SC_PF_TESTMERGE );

    EndRedo();
}
diff --git a/sc/source/ui/undo/undocell.cxx b/sc/source/ui/undo/undocell.cxx
index 7734e2a..522914e 100644
--- a/sc/source/ui/undo/undocell.cxx
+++ b/sc/source/ui/undo/undocell.cxx
@@ -60,7 +60,7 @@ namespace HelperNotifyChanges

            for (const auto & rOldValue : rOldValues)
            {
                aChangeRanges.Append( ScRange(rPos.Col(), rPos.Row(), rOldValue.mnTab));
                aChangeRanges.push_back( ScRange(rPos.Col(), rPos.Row(), rOldValue.mnTab));
            }

            Notify(*pModelObj, aChangeRanges, "cell-change");
diff --git a/sc/source/ui/undo/undodat.cxx b/sc/source/ui/undo/undodat.cxx
index b3de44e..d3cef47 100644
--- a/sc/source/ui/undo/undodat.cxx
+++ b/sc/source/ui/undo/undodat.cxx
@@ -1676,7 +1676,7 @@ ScUndoChartData::ScUndoChartData( ScDocShell* pNewDocShell, const OUString& rNam
    bAddRange( bAdd )
{
    aNewRangeListRef = new ScRangeList;
    aNewRangeListRef->Append( rNew );
    aNewRangeListRef->push_back( rNew );

    Init();
}
diff --git a/sc/source/ui/unoobj/cellsuno.cxx b/sc/source/ui/unoobj/cellsuno.cxx
index d68573a..0e6b0ef 100644
--- a/sc/source/ui/unoobj/cellsuno.cxx
+++ b/sc/source/ui/unoobj/cellsuno.cxx
@@ -919,19 +919,17 @@ static SCTAB lcl_FirstTab( const ScRangeList& rRanges )
{
    if (rRanges.empty())
        throw std::out_of_range("empty range");
    const ScRange* pFirst = rRanges[0];
    if (pFirst)
        return pFirst->aStart.Tab();
    return 0;   // shouldn't happen
    const ScRange & rFirst = rRanges[0];
    return rFirst.aStart.Tab();
}

static bool lcl_WholeSheet( const ScRangeList& rRanges )
{
    if ( rRanges.size() == 1 )
    {
        const ScRange* pRange = rRanges[0];
        if ( pRange && pRange->aStart.Col() == 0 && pRange->aEnd.Col() == MAXCOL &&
                       pRange->aStart.Row() == 0 && pRange->aEnd.Row() == MAXROW )
        const ScRange & rRange = rRanges[0];
        if ( rRange.aStart.Col() == 0 && rRange.aEnd.Col() == MAXCOL &&
             rRange.aStart.Row() == 0 && rRange.aEnd.Row() == MAXROW )
            return true;
    }
    return false;
@@ -1062,8 +1060,8 @@ void ScHelperFunctions::ApplyBorder( ScDocShell* pDocShell, const ScRangeList& r
    size_t nCount = rRanges.size();
    for (size_t i = 0; i < nCount; ++i)
    {
        ScRange aRange( *rRanges[ i ] );
        SCTAB nTab = aRange.aStart.Tab();
        ScRange const & rRange = rRanges[ i ];
        SCTAB nTab = rRange.aStart.Tab();

        if (bUndo)
        {
@@ -1071,11 +1069,11 @@ void ScHelperFunctions::ApplyBorder( ScDocShell* pDocShell, const ScRangeList& r
                pUndoDoc->InitUndo( &rDoc, nTab, nTab );
            else
                pUndoDoc->AddUndoTab( nTab, nTab );
            rDoc.CopyToDocument(aRange, InsertDeleteFlags::ATTRIB, false, *pUndoDoc);
            rDoc.CopyToDocument(rRange, InsertDeleteFlags::ATTRIB, false, *pUndoDoc);
        }

        ScMarkData aMark;
        aMark.SetMarkArea( aRange );
        aMark.SetMarkArea( rRange );
        aMark.SelectTable( nTab, true );

        rDoc.ApplySelectionFrame(aMark, rOuter, &rInner);
@@ -1089,7 +1087,7 @@ void ScHelperFunctions::ApplyBorder( ScDocShell* pDocShell, const ScRangeList& r
    }

    for (size_t i = 0; i < nCount; ++i )
        pDocShell->PostPaint( *rRanges[ i ], PaintPartFlags::Grid, SC_PF_LINES | SC_PF_TESTMERGE );
        pDocShell->PostPaint( rRanges[ i ], PaintPartFlags::Grid, SC_PF_LINES | SC_PF_TESTMERGE );

    pDocShell->SetDocumentModified();
}
@@ -1422,7 +1420,7 @@ ScCellRangesBase::ScCellRangesBase(ScDocShell* pDocSh, const ScRange& rR) :

    ScRange aCellRange(rR);
    aCellRange.PutInOrder();
    aRanges.Append( aCellRange );
    aRanges.push_back( aCellRange );

    if (pDocShell)  // Null if created with createInstance
    {
@@ -1585,14 +1583,11 @@ void ScCellRangesBase::Notify( SfxBroadcaster&, const SfxHint& rHint )
               )
            {
                // #101755#; the range size of a sheet does not change
                ScRange* pR = aRanges.front();
                if (pR)
                {
                    pR->aStart.SetCol(0);
                    pR->aStart.SetRow(0);
                    pR->aEnd.SetCol(MAXCOL);
                    pR->aEnd.SetRow(MAXROW);
                }
                ScRange & rR = aRanges.front();
                rR.aStart.SetCol(0);
                rR.aStart.SetRow(0);
                rR.aEnd.SetCol(MAXCOL);
                rR.aEnd.SetRow(MAXROW);
            }
            RefChanged();

@@ -1689,7 +1684,7 @@ void ScCellRangesBase::RefChanged()

        ScDocument& rDoc = pDocShell->GetDocument();
        for ( size_t i = 0, nCount = aRanges.size(); i < nCount; ++i )
            rDoc.StartListeningArea( *aRanges[ i ], false, pValueListener );
            rDoc.StartListeningArea( aRanges[ i ], false, pValueListener );
    }

    ForgetCurrentAttrs();
@@ -1713,7 +1708,7 @@ void ScCellRangesBase::InitInsertRange(ScDocShell* pDocSh, const ScRange& rR)
        ScRange aCellRange(rR);
        aCellRange.PutInOrder();
        aRanges.RemoveAll();
        aRanges.Append( aCellRange );
        aRanges.push_back( aCellRange );

        pDocShell->GetDocument().AddUnoObject(*this);

@@ -1726,7 +1721,7 @@ void ScCellRangesBase::AddRange(const ScRange& rRange, const bool bMergeRanges)
    if (bMergeRanges)
        aRanges.Join(rRange);
    else
        aRanges.Append(rRange);
        aRanges.push_back(rRange);
    RefChanged();
}

@@ -1736,7 +1731,7 @@ void ScCellRangesBase::SetNewRange(const ScRange& rNew)
    aCellRange.PutInOrder();

    aRanges.RemoveAll();
    aRanges.Append( aCellRange );
    aRanges.push_back( aCellRange );
    RefChanged();
}

@@ -1818,7 +1813,7 @@ uno::Sequence<sal_Int8> SAL_CALL ScCellRangesBase::getImplementationId()
void ScCellRangesBase::PaintGridRanges_Impl( )
{
    for (size_t i = 0, nCount = aRanges.size(); i < nCount; ++i)
        pDocShell->PostPaint( *aRanges[ i ], PaintPartFlags::Grid );
        pDocShell->PostPaint( aRanges[ i ], PaintPartFlags::Grid );
}

// XSheetOperation
@@ -2095,7 +2090,7 @@ uno::Any SAL_CALL ScCellRangesBase::getPropertyDefault( const OUString& aPropert
                                   formula::FormulaGrammar::mapAPItoGrammar( bEnglish, bXML));

                            aAny <<= uno::Reference<sheet::XSheetConditionalEntries>(
                                    new ScTableConditionalFormat( &rDoc, 0, aRanges[0]->aStart.Tab(), eGrammar ));
                                    new ScTableConditionalFormat( &rDoc, 0, aRanges[0].aStart.Tab(), eGrammar ));
                        }
                        break;
                    case SC_WID_UNO_VALIDAT:
@@ -2301,10 +2296,10 @@ void ScCellRangesBase::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pE
                    {
                        for (size_t i = 0, n = aRanges.size(); i < n; ++i)
                        {
                            ScRange aRange = *aRanges[i];
                            ScRange const & rRange = aRanges[i];

                            /* TODO: Iterate through the range */
                            ScAddress aAddr = aRange.aStart;
                            ScAddress aAddr = rRange.aStart;
                            ScDocument& rDoc = pDocShell->GetDocument();
                            ScRefCellValue aCell(rDoc, aAddr);

@@ -2327,7 +2322,7 @@ void ScCellRangesBase::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pE
                            aEngine.QuickSetAttribs(aAttr, ESelection(0, 0, 0, aStr.getLength()));

                            // The cell will own the text object instance.
                            rDoc.SetEditText(aRanges[0]->aStart, aEngine.CreateTextObject());
                            rDoc.SetEditText(aRanges[0].aStart, aEngine.CreateTextObject());
                        }
                    }
                }
@@ -2392,16 +2387,16 @@ void ScCellRangesBase::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pE
                                       formula::FormulaGrammar::GRAM_UNSPECIFIED :
                                       formula::FormulaGrammar::mapAPItoGrammar( bEnglish, bXML));

                                SCTAB nTab = aRanges.front()->aStart.Tab();
                                SCTAB nTab = aRanges.front().aStart.Tab();
                                // To remove conditional formats for all cells in aRanges we need to:
                                // Remove conditional format data from cells' attributes
                                rDoc.RemoveCondFormatData( aRanges, nTab,  0 );
                                // And also remove ranges from conditional formats list
                                for (size_t i = 0; i < aRanges.size(); ++i)
                                {
                                    rDoc.GetCondFormList( aRanges[i]->aStart.Tab() )->DeleteArea(
                                        aRanges[i]->aStart.Col(), aRanges[i]->aStart.Row(),
                                        aRanges[i]->aEnd.Col(), aRanges[i]->aEnd.Row() );
                                    rDoc.GetCondFormList( aRanges[i].aStart.Tab() )->DeleteArea(
                                        aRanges[i].aStart.Col(), aRanges[i].aStart.Row(),
                                        aRanges[i].aEnd.Col(), aRanges[i].aEnd.Row() );
                                }

                                // Then we can apply new conditional format if there is one
@@ -2415,7 +2410,7 @@ void ScCellRangesBase::SetOnePropertyValue( const SfxItemPropertySimpleEntry* pE

                                // and repaint
                                for (size_t i = 0; i < aRanges.size(); ++i)
                                    pDocShell->PostPaint(*aRanges[i], PaintPartFlags::Grid);
                                    pDocShell->PostPaint(aRanges[i], PaintPartFlags::Grid);
                                pDocShell->SetDocumentModified();
                            }
                        }
@@ -2538,14 +2533,14 @@ void ScCellRangesBase::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pE
                        //! loop through all ranges
                        if ( !aRanges.empty() )
                        {
                            const ScRange* pFirst = aRanges[ 0 ];
                            const ScRange & rFirst = aRanges[ 0 ];
                            SvxBoxItem aOuter(ATTR_BORDER);
                            SvxBoxInfoItem aInner(ATTR_BORDER_INNER);

                            ScDocument& rDoc = pDocShell->GetDocument();
                            ScMarkData aMark;
                            aMark.SetMarkArea( *pFirst );
                            aMark.SelectTable( pFirst->aStart.Tab(), true );
                            aMark.SetMarkArea( rFirst );
                            aMark.SelectTable( rFirst.aStart.Tab(), true );
                            rDoc.GetSelectionFrame( aMark, aOuter, aInner );

                            if (pEntry->nWID == SC_WID_UNO_TBLBORD2)
@@ -2574,7 +2569,7 @@ void ScCellRangesBase::GetOnePropertyValue( const SfxItemPropertySimpleEntry* pE
                            if(!rIndex.empty())
                                nIndex = rIndex[0];
                            rAny <<= uno::Reference<sheet::XSheetConditionalEntries>(
                                    new ScTableConditionalFormat( &rDoc, nIndex, aRanges.front()->aStart.Tab(), eGrammar ));
                                    new ScTableConditionalFormat( &rDoc, nIndex, aRanges.front().aStart.Tab(), eGrammar ));
                        }
                    }
                    break;
@@ -3012,11 +3007,11 @@ ScMemChart* ScCellRangesBase::CreateMemChart_Impl() const
            //  (only here - Listeners are registered for the whole area)
            //! check immediately if a ScTableSheetObj?

            const ScRange* pRange = aRanges[0];
            if ( pRange->aStart.Col() == 0 && pRange->aEnd.Col() == MAXCOL &&
                 pRange->aStart.Row() == 0 && pRange->aEnd.Row() == MAXROW )
            const ScRange & rRange = aRanges[0];
            if ( rRange.aStart.Col() == 0 && rRange.aEnd.Col() == MAXCOL &&
                 rRange.aStart.Row() == 0 && rRange.aEnd.Row() == MAXROW )
            {
                SCTAB nTab = pRange->aStart.Tab();
                SCTAB nTab = rRange.aStart.Tab();

                SCCOL nStartX;
                SCROW nStartY; // Get start
@@ -3034,8 +3029,7 @@ ScMemChart* ScCellRangesBase::CreateMemChart_Impl() const
                    nEndY = 0;
                }

                xChartRanges = new ScRangeList;
                xChartRanges->Append( ScRange( nStartX, nStartY, nTab, nEndX, nEndY, nTab ) );
                xChartRanges = new ScRangeList( ScRange( nStartX, nStartY, nTab, nEndX, nEndY, nTab ) );
            }
        }
        if (!xChartRanges.is())         //  otherwise take Ranges directly
@@ -3081,13 +3075,13 @@ ScRangeListRef ScCellRangesBase::GetLimitedChartRanges_Impl( long nDataColumns, 
{
    if ( aRanges.size() == 1 )
    {
        const ScRange* pRange = aRanges[0];
        if ( pRange->aStart.Col() == 0 && pRange->aEnd.Col() == MAXCOL &&
             pRange->aStart.Row() == 0 && pRange->aEnd.Row() == MAXROW )
        const ScRange & rRange = aRanges[0];
        if ( rRange.aStart.Col() == 0 && rRange.aEnd.Col() == MAXCOL &&
             rRange.aStart.Row() == 0 && rRange.aEnd.Row() == MAXROW )
        {
            //  if aRanges is a complete sheet, limit to given size

            SCTAB nTab = pRange->aStart.Tab();
            SCTAB nTab = rRange.aStart.Tab();

            long nEndColumn = nDataColumns - 1 + ( bChartColAsHdr ? 1 : 0 );
            if ( nEndColumn < 0 )
@@ -3101,8 +3095,7 @@ ScRangeListRef ScCellRangesBase::GetLimitedChartRanges_Impl( long nDataColumns, 
            if ( nEndRow > MAXROW )
                nEndRow = MAXROW;

            ScRangeListRef xChartRanges = new ScRangeList;
            xChartRanges->Append( ScRange( 0, 0, nTab, static_cast<SCCOL>(nEndColumn), static_cast<SCROW>(nEndRow), nTab ) );
            ScRangeListRef xChartRanges = new ScRangeList( ScRange( 0, 0, nTab, static_cast<SCCOL>(nEndColumn), static_cast<SCROW>(nEndRow), nTab ) );
            return xChartRanges;
        }
    }
@@ -3386,7 +3379,7 @@ void SAL_CALL ScCellRangesBase::addModifyListener(const uno::Reference<util::XMo

        ScDocument& rDoc = pDocShell->GetDocument();
        for ( size_t i = 0, nCount = aRanges.size(); i < nCount; i++)
            rDoc.StartListeningArea( *aRanges[ i ], false, pValueListener );
            rDoc.StartListeningArea( aRanges[ i ], false, pValueListener );

        acquire();  // don't lose this object (one ref for all listeners)
    }
@@ -3475,9 +3468,9 @@ uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryEmptyCel
        //  mark occupied cells
        for (size_t i = 0, nCount = aRanges.size(); i < nCount; ++i)
        {
            ScRange aRange = *aRanges[ i ];
            ScRange const & rRange = aRanges[ i ];

            ScCellIterator aIter( &rDoc, aRange );
            ScCellIterator aIter( &rDoc, rRange );
            for (bool bHasCell = aIter.first(); bHasCell; bHasCell = aIter.next())
            {
                //  notes count as non-empty
@@ -3510,9 +3503,9 @@ uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryContentC
        //  select matching cells
        for ( size_t i = 0, nCount = aRanges.size(); i < nCount; ++i )
        {
            ScRange aRange = *aRanges[ i ];
            ScRange const & rRange = aRanges[ i ];

            ScCellIterator aIter( &rDoc, aRange );
            ScCellIterator aIter( &rDoc, rRange );
            for (bool bHasCell = aIter.first(); bHasCell; bHasCell = aIter.next())
            {
                bool bAdd = false;
@@ -3599,9 +3592,9 @@ uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryFormulaC
        //  select matching cells
        for ( size_t i = 0, nCount = aRanges.size(); i < nCount; ++i )
        {
            ScRange aRange = *aRanges[ i ];
            ScRange const & rRange = aRanges[ i ];

            ScCellIterator aIter( &rDoc, aRange );
            ScCellIterator aIter( &rDoc, rRange );
            for (bool bHasCell = aIter.first(); bHasCell; bHasCell = aIter.next())
            {
                if (aIter.getType() == CELLTYPE_FORMULA)
@@ -3673,7 +3666,7 @@ uno::Reference<sheet::XSheetCellRanges> ScCellRangesBase::QueryDifferences_Impl(

            for (i=0; i<nRangeCount; i++)
            {
                ScRange aRange( *aRanges[ i ] );
                ScRange aRange( aRanges[ i ] );
                if ( aRange.Intersects( aCellRange ) )
                {
                    if (bColumnDiff)
@@ -3697,9 +3690,9 @@ uno::Reference<sheet::XSheetCellRanges> ScCellRangesBase::QueryDifferences_Impl(
        ScAddress aCmpAddr;
        for (i=0; i<nRangeCount; i++)
        {
            ScRange aRange( *aRanges[ i ] );
            ScRange const & rRange = aRanges[ i ];

            ScCellIterator aIter( &rDoc, aRange );
            ScCellIterator aIter( &rDoc, rRange );
            for (bool bHasCell = aIter.first(); bHasCell; bHasCell = aIter.next())
            {
                if (bColumnDiff)
@@ -3748,7 +3741,7 @@ uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryIntersec
    ScRangeList aNew;
    for ( size_t i = 0, nCount = aRanges.size(); i < nCount; ++i )
    {
        ScRange aTemp( *aRanges[ i ] );
        ScRange aTemp( aRanges[ i ] );
        if ( aTemp.Intersects( aMask ) )
            aNew.Join( ScRange( std::max( aTemp.aStart.Col(), aMask.aStart.Col() ),
                                std::max( aTemp.aStart.Row(), aMask.aStart.Row() ),
@@ -3784,8 +3777,8 @@ uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryPreceden

            for (size_t nR = 0, nCount = aNewRanges.size(); nR<nCount; ++nR)
            {
                ScRange aRange( *aNewRanges[ nR] );
                ScCellIterator aIter( &rDoc, aRange );
                ScRange const & rRange = aNewRanges[ nR];
                ScCellIterator aIter( &rDoc, rRange );
                for (bool bHasCell = aIter.first(); bHasCell; bHasCell = aIter.next())
                {
                    if (aIter.getType() != CELLTYPE_FORMULA)
@@ -3842,14 +3835,17 @@ uno::Reference<sheet::XSheetCellRanges> SAL_CALL ScCellRangesBase::queryDependen
                bool bMark = false;
                ScDetectiveRefIter aIter(aCellIter.getFormulaCell());
                ScRange aRefRange;
                while ( aIter.GetNextRef( aRefRange) )
                while ( aIter.GetNextRef( aRefRange) && !bMark )
                {
                    size_t nRangesCount = aNewRanges.size();
                    for (size_t nR = 0; nR < nRangesCount; ++nR)
                    {
                        ScRange aRange( *aNewRanges[ nR ] );
                        if (aRange.Intersects(aRefRange))
                        ScRange const & rRange = aNewRanges[ nR ];
                        if (rRange.Intersects(aRefRange))
                        {
                            bMark = true;                   // depending on part of Range
                            break;
                        }
                    }
                }
                if (bMark)
@@ -3984,7 +3980,7 @@ uno::Reference<uno::XInterface> SAL_CALL ScCellRangesBase::findNext(
            const ScRangeList& rStartRanges = pRangesImp->GetRangeList();
            if ( rStartRanges.size() == 1 )
            {
                ScAddress aStartPos = rStartRanges[ 0 ]->aStart;
                ScAddress aStartPos = rStartRanges[ 0 ].aStart;
                return Find_Impl( xDesc, &aStartPos );
            }
        }
@@ -4194,11 +4190,11 @@ ScCellRangeObj* ScCellRangesObj::GetObjectByIndex_Impl(sal_Int32 nIndex) const
    const ScRangeList& rRanges = GetRangeList();
    if ( pDocSh && nIndex >= 0 && nIndex < sal::static_int_cast<sal_Int32>(rRanges.size()) )
    {
        ScRange aRange( *rRanges[ nIndex ] );
        if ( aRange.aStart == aRange.aEnd )
            return new ScCellObj( pDocSh, aRange.aStart );
        ScRange const & rRange = rRanges[ nIndex ];
        if ( rRange.aStart == rRange.aEnd )
            return new ScCellObj( pDocSh, rRange.aStart );
        else
            return new ScCellRangeObj( pDocSh, aRange );
            return new ScCellRangeObj( pDocSh, rRange );
    }

    return nullptr;        // no DocShell or wrong index
@@ -4217,7 +4213,7 @@ uno::Sequence<table::CellRangeAddress> SAL_CALL ScCellRangesObj::getRangeAddress
        table::CellRangeAddress* pAry = aSeq.getArray();
        for ( size_t i=0; i < nCount; i++)
        {
            ScUnoConversion::FillApiRange( aRangeAddress, *rRanges[ i ] );
            ScUnoConversion::FillApiRange( aRangeAddress, rRanges[ i ] );
            pAry[i] = aRangeAddress;
        }
        return aSeq;
@@ -4285,13 +4281,13 @@ void SAL_CALL ScCellRangesObj::removeRangeAddress( const table::CellRangeAddress
    ScRangeList aNotSheetRanges;
    for (size_t i = 0; i < rRanges.size(); ++i)
    {
        if (rRanges[ i]->aStart.Tab() == rRange.Sheet)
        if (rRanges[ i].aStart.Tab() == rRange.Sheet)
        {
            aSheetRanges.Append( *rRanges[ i ] );
            aSheetRanges.push_back( rRanges[ i ] );
        }
        else
        {
            aNotSheetRanges.Append( *rRanges[ i ] );
            aNotSheetRanges.push_back( rRanges[ i ] );
        }
    }
    ScMarkData aMarkData;
@@ -4317,7 +4313,7 @@ void SAL_CALL ScCellRangesObj::removeRangeAddress( const table::CellRangeAddress
    aMarkData.FillRangeListWithMarks( &aNew, false );
    for ( size_t j = 0; j < aNew.size(); ++j)
    {
        AddRange(*aNew[ j ], false);
        AddRange(aNew[ j ], false);
    }
}

@@ -4396,7 +4392,7 @@ void SAL_CALL ScCellRangesObj::insertByName( const OUString& aName, const uno::A
            const ScRangeList& rAddRanges = pRangesImp->GetRangeList();
            size_t nAddCount = rAddRanges.size();
            for ( size_t i = 0; i < nAddCount; i++ )
                aNew.Join( *rAddRanges[ i ] );
                aNew.Join( rAddRanges[ i ] );
            SetNewRanges(aNew);
            bDone = true;

@@ -4405,7 +4401,7 @@ void SAL_CALL ScCellRangesObj::insertByName( const OUString& aName, const uno::A
                //  if a name is given, also insert into list of named entries
                //  (only possible for a single range)
                //  name is not in m_pImpl->m_aNamedEntries (tested above)
                m_pImpl->m_aNamedEntries.emplace_back( aName, *rAddRanges[ 0 ] );
                m_pImpl->m_aNamedEntries.emplace_back( aName, rAddRanges[ 0 ] );
            }
        }
    }
@@ -4426,7 +4422,7 @@ static bool lcl_FindRangeByName( const ScRangeList& rRanges, ScDocShell* pDocSh,
        ScDocument& rDoc = pDocSh->GetDocument();
        for ( size_t i = 0, nCount = rRanges.size(); i < nCount; i++ )
        {
            aRangeStr = rRanges[ i ]->Format(ScRefFlags::VALID | ScRefFlags::TAB_3D, &rDoc);
            aRangeStr = rRanges[ i ].Format(ScRefFlags::VALID | ScRefFlags::TAB_3D, &rDoc);
            if ( aRangeStr == rName )
            {
                rIndex = i;
@@ -4446,7 +4442,7 @@ static bool lcl_FindRangeOrEntry( const ScNamedEntryArr_Impl& rNamedEntries,
    size_t nIndex = 0;
    if ( lcl_FindRangeByName( rRanges, pDocSh, rName, nIndex ) )
    {
        rFound = *rRanges[ nIndex ];
        rFound = rRanges[ nIndex ];
        return true;
    }

@@ -4504,7 +4500,7 @@ void SAL_CALL ScCellRangesObj::removeByName( const OUString& aName )
        ScRangeList aNew;
        for ( size_t i = 0, nCount = rRanges.size(); i < nCount; i++ )
            if (i != nIndex)
                aNew.Append( *rRanges[ i ] );
                aNew.push_back( rRanges[ i ] );
        SetNewRanges(aNew);
        bDone = true;
    }
@@ -4521,7 +4517,7 @@ void SAL_CALL ScCellRangesObj::removeByName( const OUString& aName )
                if (m_pImpl->m_aNamedEntries[n].GetName() == aName)
                {
                    aDiff.RemoveAll();
                    aDiff.Append(m_pImpl->m_aNamedEntries[n].GetRange());
                    aDiff.push_back(m_pImpl->m_aNamedEntries[n].GetRange());
                    bValid = true;
                }
        }
@@ -4532,9 +4528,9 @@ void SAL_CALL ScCellRangesObj::removeByName( const OUString& aName )

            for ( size_t i = 0, nDiffCount = aDiff.size(); i < nDiffCount; i++ )
            {
                ScRange* pDiffRange = aDiff[ i ];
                if (aMarkData.GetTableSelect( pDiffRange->aStart.Tab() ))
                    aMarkData.SetMultiMarkArea( *pDiffRange, false );
                ScRange const & rDiffRange = aDiff[ i ];
                if (aMarkData.GetTableSelect( rDiffRange.aStart.Tab() ))
                    aMarkData.SetMultiMarkArea( rDiffRange, false );
            }

            ScRangeList aNew;
@@ -4616,11 +4612,11 @@ uno::Sequence<OUString> SAL_CALL ScCellRangesObj::getElementNames()
        for (size_t i=0; i < nCount; i++)
        {
            //  use given name if for exactly this range, otherwise just format
            ScRange aRange = *rRanges[ i ];
            ScRange const & rRange = rRanges[ i ];
            if (m_pImpl->m_aNamedEntries.empty() ||
                !lcl_FindEntryName(m_pImpl->m_aNamedEntries, aRange, aRangeStr))
                !lcl_FindEntryName(m_pImpl->m_aNamedEntries, rRange, aRangeStr))
            {
                aRangeStr = aRange.Format(ScRefFlags::VALID | ScRefFlags::TAB_3D, &rDoc);
                aRangeStr = rRange.Format(ScRefFlags::VALID | ScRefFlags::TAB_3D, &rDoc);
            }
            pAry[i] = aRangeStr;
        }
@@ -4727,8 +4723,8 @@ void ScCellRangeObj::RefChanged()
    OSL_ENSURE(rRanges.size() == 1, "What ranges ?!?!");
    if ( !rRanges.empty() )
    {
        const ScRange* pFirst = rRanges[0];
        aRange = ScRange(*pFirst);
        const ScRange & rFirst = rRanges[0];
        aRange = rFirst;
        aRange.PutInOrder();
    }
}
@@ -5979,8 +5975,7 @@ void ScCellObj::RefChanged()
    OSL_ENSURE(rRanges.size() == 1, "What ranges ?!?!");
    if ( !rRanges.empty() )
    {
        const ScRange* pFirst = rRanges[ 0 ];
        aCellPos = pFirst->aStart;
        aCellPos = rRanges[ 0 ].aStart;
    }
}

@@ -6827,8 +6822,7 @@ SCTAB ScTableSheetObj::GetTab_Impl() const
    OSL_ENSURE(rRanges.size() == 1, "What ranges ?!?!");
    if ( !rRanges.empty() )
    {
        const ScRange* pFirst = rRanges[ 0 ];
        return pFirst->aStart.Tab();
        return rRanges[ 0 ].aStart.Tab();
    }
    return 0;
}
@@ -6924,7 +6918,7 @@ uno::Reference<sheet::XSheetCellCursor> SAL_CALL ScTableSheetObj::createCursorBy
        {
            const ScRangeList& rRanges = pRangesImp->GetRangeList();
            OSL_ENSURE( rRanges.size() == 1, "Range? Ranges?" );
            return new ScCellCursorObj( pDocSh, *rRanges[ 0 ] );
            return new ScCellCursorObj( pDocSh, rRanges[ 0 ] );
        }
    }
    return nullptr;
@@ -7933,12 +7927,12 @@ uno::Sequence< table::CellRangeAddress > SAL_CALL ScTableSheetObj::getRanges(  )
            table::CellRangeAddress* pAry = aRetRanges.getArray();
            for( size_t nIndex = 0; nIndex < nCount; nIndex++ )
            {
                const ScRange* pRange = (*pRangeList)[nIndex];
                pAry->StartColumn = pRange->aStart.Col();
                pAry->StartRow = pRange->aStart.Row();
                pAry->EndColumn = pRange->aEnd.Col();
                pAry->EndRow = pRange->aEnd.Row();
                pAry->Sheet = pRange->aStart.Tab();
                const ScRange & rRange = (*pRangeList)[nIndex];
                pAry->StartColumn = rRange.aStart.Col();
                pAry->StartRow = rRange.aStart.Row();
                pAry->EndColumn = rRange.aEnd.Col();
                pAry->EndRow = rRange.aEnd.Row();
                pAry->Sheet = rRange.aStart.Tab();
                ++pAry;
            }
            return aRetRanges;
@@ -8941,10 +8935,7 @@ ScCellsEnumeration::ScCellsEnumeration(ScDocShell* pDocSh, const ScRangeList& rR
        bAtEnd = true;
    else
    {
        SCTAB nTab = 0;
        const ScRange* pFirst = aRanges[ 0 ];
        if (pFirst)
            nTab = pFirst->aStart.Tab();
        SCTAB nTab = aRanges[ 0 ].aStart.Tab();
        aPos = ScAddress(0,0,nTab);
        CheckPos_Impl();                    // set aPos on first matching cell
    }
@@ -9016,13 +9007,12 @@ void ScCellsEnumeration::Notify( SfxBroadcaster&, const SfxHint& rHint )

            if (!bAtEnd)        // adjust aPos
            {
                ScRangeList aNew;
                aNew.Append(ScRange(aPos));
                ScRangeList aNew { ScRange(aPos) };
                aNew.UpdateReference( pRefHint->GetMode(), &pDocShell->GetDocument(), pRefHint->GetRange(),
                                      pRefHint->GetDx(), pRefHint->GetDy(), pRefHint->GetDz() );
                if (aNew.size()==1)
                {
                    aPos = aNew[ 0 ]->aStart;
                    aPos = aNew[ 0 ].aStart;
                    CheckPos_Impl();
                }
            }
@@ -9401,8 +9391,7 @@ const ScRangeList& ScUniqueFormatsEntry::GetRanges()
{
    if ( eState == STATE_SINGLE )
    {
        aReturnRanges = new ScRangeList;
        aReturnRanges->Append( aSingleRange );
        aReturnRanges = new ScRangeList( aSingleRange );
        return *aReturnRanges;
    }

@@ -9422,7 +9411,7 @@ const ScRangeList& ScUniqueFormatsEntry::GetRanges()
    aReturnRanges = new ScRangeList;
    ScRangeVector::const_iterator aCompEnd( aCompletedRanges.end() );
    for ( ScRangeVector::const_iterator aCompIter( aCompletedRanges.begin() ); aCompIter != aCompEnd; ++aCompIter )
        aReturnRanges->Append( *aCompIter );
        aReturnRanges->push_back( *aCompIter );
    aCompletedRanges.clear();

    return *aReturnRanges;
@@ -9439,7 +9428,7 @@ struct ScUniqueFormatsOrder
        OSL_ENSURE( rList1.size() > 0 && rList2.size() > 0, "ScUniqueFormatsOrder: empty list" );

        // compare start positions using ScAddress comparison operator
        return ( rList1[ 0 ]->aStart < rList2[ 0 ]->aStart );
        return ( rList1[ 0 ].aStart < rList2[ 0 ].aStart );
    }
};

diff --git a/sc/source/ui/unoobj/chart2uno.cxx b/sc/source/ui/unoobj/chart2uno.cxx
index 96f527e..e0def91 100644
--- a/sc/source/ui/unoobj/chart2uno.cxx
+++ b/sc/source/ui/unoobj/chart2uno.cxx
@@ -2669,10 +2669,9 @@ void ScChart2DataSequence::UpdateTokensFromRanges(const ScRangeList& rRanges)
    for ( size_t i = 0, nCount = rRanges.size(); i < nCount; ++i )
    {
        ScTokenRef pToken;
        const ScRange* pRange = rRanges[i];
        OSL_ENSURE(pRange, "range object is nullptr.");
        const ScRange & rRange = rRanges[i];

        ScRefTokenHelper::getTokenFromRange(pToken, *pRange);
        ScRefTokenHelper::getTokenFromRange(pToken, rRange);
        sal_uInt32 nOrigPos = (*m_pRangeIndices)[i];
        m_aTokens[nOrigPos] = pToken;
    }
@@ -2756,7 +2755,7 @@ void ScChart2DataSequence::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint
            {
                ScRange aRange;
                ScRefTokenHelper::getRangeFromToken(aRange, *itr, ScAddress());
                aRanges.Append(aRange);
                aRanges.push_back(aRange);
                sal_uInt32 nPos = distance(itrBeg, itr);
                m_pRangeIndices->push_back(nPos);
            }
diff --git a/sc/source/ui/unoobj/chartuno.cxx b/sc/source/ui/unoobj/chartuno.cxx
index 1c7cb56..c146e3a 100644
--- a/sc/source/ui/unoobj/chartuno.cxx
+++ b/sc/source/ui/unoobj/chartuno.cxx
@@ -166,7 +166,7 @@ void SAL_CALL ScChartsObj::addNewByName( const OUString& rName,
        {
            ScRange aRange( static_cast<SCCOL>(pAry[i].StartColumn), pAry[i].StartRow, pAry[i].Sheet,
                            static_cast<SCCOL>(pAry[i].EndColumn),   pAry[i].EndRow,   pAry[i].Sheet );
            pList->Append( aRange );
            pList->push_back( aRange );
        }
    }
    ScRangeListRef xNewRanges( pList );
@@ -531,7 +531,7 @@ void ScChartObj::setFastPropertyValue_NoBroadcast( sal_Int32 nHandle, const uno:
                    {
                        ScRange aRange;
                        ScUnoConversion::FillScRange( aRange, aCellRange );
                        rRangeList->Append( aRange );
                        rRangeList->push_back( aRange );
                    }
                    if ( pDocShell )
                    {
@@ -576,9 +576,9 @@ void ScChartObj::getFastPropertyValue( uno::Any& rValue, sal_Int32 nHandle ) con
            table::CellRangeAddress* pCellRanges = aCellRanges.getArray();
            for (size_t i = 0; i < nCount; ++i)
            {
                ScRange aRange(*(*rRangeList)[i]);
                ScRange const & rRange = (*rRangeList)[i];
                table::CellRangeAddress aCellRange;
                ScUnoConversion::FillApiRange(aCellRange, aRange);
                ScUnoConversion::FillApiRange(aCellRange, rRange);
                pCellRanges[i] = aCellRange;
            }
            rValue <<= aCellRanges;
@@ -661,13 +661,13 @@ uno::Sequence<table::CellRangeAddress> SAL_CALL ScChartObj::getRanges()
        table::CellRangeAddress* pAry = aSeq.getArray();
        for (size_t i = 0; i < nCount; i++)
        {
            ScRange aRange( *(*xRanges)[i] );
            ScRange const & rRange = (*xRanges)[i];

            aRangeAddress.Sheet       = aRange.aStart.Tab();
            aRangeAddress.StartColumn = aRange.aStart.Col();
            aRangeAddress.StartRow    = aRange.aStart.Row();
            aRangeAddress.EndColumn   = aRange.aEnd.Col();
            aRangeAddress.EndRow      = aRange.aEnd.Row();
            aRangeAddress.Sheet       = rRange.aStart.Tab();
            aRangeAddress.StartColumn = rRange.aStart.Col();
            aRangeAddress.StartRow    = rRange.aStart.Row();
            aRangeAddress.EndColumn   = rRange.aEnd.Col();
            aRangeAddress.EndRow      = rRange.aEnd.Row();

            pAry[i] = aRangeAddress;
        }
@@ -694,7 +694,7 @@ void SAL_CALL ScChartObj::setRanges( const uno::Sequence<table::CellRangeAddress
        {
            ScRange aRange( static_cast<SCCOL>(pAry[i].StartColumn), pAry[i].StartRow, pAry[i].Sheet,
                            static_cast<SCCOL>(pAry[i].EndColumn),   pAry[i].EndRow,   pAry[i].Sheet );
            pList->Append( aRange );
            pList->push_back( aRange );
        }
    }
    ScRangeListRef xNewRanges( pList );
diff --git a/sc/source/ui/unoobj/condformatuno.cxx b/sc/source/ui/unoobj/condformatuno.cxx
index 50fb8a7..4f1a5e4 100644
--- a/sc/source/ui/unoobj/condformatuno.cxx
+++ b/sc/source/ui/unoobj/condformatuno.cxx
@@ -354,7 +354,7 @@ sal_Int32 ScCondFormatsObj::createByRange(const uno::Reference< sheet::XSheetCel
    if (aCoreRange.empty())
        throw lang::IllegalArgumentException();

    SCTAB nTab = aCoreRange[0]->aStart.Tab();
    SCTAB nTab = aCoreRange[0].aStart.Tab();

    ScConditionalFormat* pNewFormat = new ScConditionalFormat(0, &mpDocShell->GetDocument());
    pNewFormat->SetRange(aCoreRange);
diff --git a/sc/source/ui/unoobj/cursuno.cxx b/sc/source/ui/unoobj/cursuno.cxx
index edeaa08..9431200 100644
--- a/sc/source/ui/unoobj/cursuno.cxx
+++ b/sc/source/ui/unoobj/cursuno.cxx
@@ -98,7 +98,7 @@ void SAL_CALL ScCellCursorObj::collapseToCurrentRegion()
    SolarMutexGuard aGuard;
    const ScRangeList& rRanges = GetRangeList();
    OSL_ENSURE( rRanges.size() == 1, "Range? Ranges?" );
    ScRange aOneRange( *rRanges[ 0 ] );
    ScRange aOneRange( rRanges[ 0 ] );

    aOneRange.PutInOrder();
    ScDocShell* pDocSh = GetDocShell();
@@ -123,7 +123,7 @@ void SAL_CALL ScCellCursorObj::collapseToCurrentArray()
    SolarMutexGuard aGuard;
    const ScRangeList& rRanges = GetRangeList();
    OSL_ENSURE( rRanges.size() == 1, "Range? Ranges?" );
    ScRange aOneRange( *rRanges[ 0 ] );
    ScRange aOneRange( rRanges[ 0 ] );

    aOneRange.PutInOrder();
    ScAddress aCursor(aOneRange.aStart);        //  use the start address of the range
@@ -158,7 +158,7 @@ void SAL_CALL ScCellCursorObj::collapseToMergedArea()
    {
        const ScRangeList& rRanges = GetRangeList();
        OSL_ENSURE( rRanges.size() == 1, "Range? Ranges?" );
        ScRange aNewRange( *rRanges[ 0 ] );
        ScRange aNewRange( rRanges[ 0 ] );

        ScDocument& rDoc = pDocSh->GetDocument();
        rDoc.ExtendOverlapped( aNewRange );
@@ -173,7 +173,7 @@ void SAL_CALL ScCellCursorObj::expandToEntireColumns()
    SolarMutexGuard aGuard;
    const ScRangeList& rRanges = GetRangeList();
    OSL_ENSURE( rRanges.size() == 1, "Range? Ranges?" );
    ScRange aNewRange( *rRanges[ 0 ] );
    ScRange aNewRange( rRanges[ 0 ] );

    aNewRange.aStart.SetRow( 0 );
    aNewRange.aEnd.SetRow( MAXROW );
@@ -186,7 +186,7 @@ void SAL_CALL ScCellCursorObj::expandToEntireRows()
    SolarMutexGuard aGuard;
    const ScRangeList& rRanges = GetRangeList();
    OSL_ENSURE( rRanges.size() == 1, "Range? Ranges?" );
    ScRange aNewRange( *rRanges[ 0 ] );
    ScRange aNewRange( rRanges[ 0 ] );

    aNewRange.aStart.SetCol( 0 );
    aNewRange.aEnd.SetCol( MAXCOL );
@@ -206,7 +206,7 @@ void SAL_CALL ScCellCursorObj::collapseToSize( sal_Int32 nColumns, sal_Int32 nRo
    {
        const ScRangeList& rRanges = GetRangeList();
        OSL_ENSURE( rRanges.size() == 1, "Range? Ranges?" );
        ScRange aNewRange( *rRanges[ 0 ] );
        ScRange aNewRange( rRanges[ 0 ] );

        aNewRange.PutInOrder();    //! really?

@@ -237,7 +237,7 @@ void SAL_CALL ScCellCursorObj::gotoStartOfUsedArea(sal_Bool bExpand)
    {
        const ScRangeList& rRanges = GetRangeList();
        OSL_ENSURE( rRanges.size() == 1, "Range? Ranges?" );
        ScRange aNewRange( *rRanges[0] );
        ScRange aNewRange( rRanges[0] );
        SCTAB nTab = aNewRange.aStart.Tab();

        SCCOL nUsedX = 0;       // fetch the beginning
@@ -264,7 +264,7 @@ void SAL_CALL ScCellCursorObj::gotoEndOfUsedArea( sal_Bool bExpand )
    {
        const ScRangeList& rRanges = GetRangeList();
        OSL_ENSURE( rRanges.size() == 1, "Range? Ranges?" );
        ScRange aNewRange( *rRanges[ 0 ]);
        ScRange aNewRange( rRanges[ 0 ]);
        SCTAB nTab = aNewRange.aStart.Tab();

        SCCOL nUsedX = 0;       // fetch the end
@@ -293,7 +293,7 @@ void SAL_CALL ScCellCursorObj::gotoStart()
    SolarMutexGuard aGuard;
    const ScRangeList& rRanges = GetRangeList();
    OSL_ENSURE( rRanges.size() == 1, "Range? Ranges?" );
    ScRange aOneRange( *rRanges[ 0 ]);
    ScRange aOneRange( rRanges[ 0 ]);

    aOneRange.PutInOrder();
    ScDocShell* pDocSh = GetDocShell();
@@ -321,7 +321,7 @@ void SAL_CALL ScCellCursorObj::gotoEnd()
    SolarMutexGuard aGuard;
    const ScRangeList& rRanges = GetRangeList();
    OSL_ENSURE( rRanges.size() == 1, "Range? Ranges?" );
    ScRange aOneRange( *rRanges[ 0 ] );
    ScRange aOneRange( rRanges[ 0 ] );

    aOneRange.PutInOrder();
    ScDocShell* pDocSh = GetDocShell();
@@ -346,7 +346,7 @@ void SAL_CALL ScCellCursorObj::gotoNext()
    SolarMutexGuard aGuard;
    const ScRangeList& rRanges = GetRangeList();
    OSL_ENSURE( rRanges.size() == 1, "Range? Ranges?" );
    ScRange aOneRange( *rRanges[ 0 ] );
    ScRange aOneRange( rRanges[ 0 ] );

    aOneRange.PutInOrder();
    ScAddress aCursor(aOneRange.aStart);        //  always use start of block
@@ -368,7 +368,7 @@ void SAL_CALL ScCellCursorObj::gotoPrevious()
    SolarMutexGuard aGuard;
    const ScRangeList& rRanges = GetRangeList();
    OSL_ENSURE( rRanges.size() == 1, "Range? Ranges?" );
    ScRange aOneRange( *rRanges[ 0 ] );
    ScRange aOneRange( rRanges[ 0 ] );

    aOneRange.PutInOrder();
    ScAddress aCursor(aOneRange.aStart);        //  always use start of block
@@ -390,7 +390,7 @@ void SAL_CALL ScCellCursorObj::gotoOffset( sal_Int32 nColumnOffset, sal_Int32 nR
    SolarMutexGuard aGuard;
    const ScRangeList& rRanges = GetRangeList();
    OSL_ENSURE( rRanges.size() == 1, "Range? Ranges?" );
    ScRange aOneRange( *rRanges[ 0 ] );
    ScRange aOneRange( rRanges[ 0 ] );
    aOneRange.PutInOrder();

    if ( aOneRange.aStart.Col() + nColumnOffset >= 0 &&
diff --git a/sc/source/ui/unoobj/dapiuno.cxx b/sc/source/ui/unoobj/dapiuno.cxx
index 0f4af4a..9c2a26d 100644
--- a/sc/source/ui/unoobj/dapiuno.cxx
+++ b/sc/source/ui/unoobj/dapiuno.cxx
@@ -1310,18 +1310,13 @@ void ScDataPilotTableObj::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
    else if ( dynamic_cast<const ScUpdateRefHint*>(&rHint) )
    {
        ScRange aRange( 0, 0, nTab );
        ScRangeList aRanges;
        aRanges.Append( aRange );
        ScRangeList aRanges( aRange );
        const ScUpdateRefHint& rRef = static_cast< const ScUpdateRefHint& >( rHint );
        if ( aRanges.UpdateReference( rRef.GetMode(), &GetDocShell()->GetDocument(), rRef.GetRange(),
                 rRef.GetDx(), rRef.GetDy(), rRef.GetDz() ) &&
             aRanges.size() == 1 )
        {
            const ScRange* pRange = aRanges.front();
            if ( pRange )
            {
                nTab = pRange->aStart.Tab();
            }
            nTab = aRanges.front().aStart.Tab();
        }
    }

diff --git a/sc/source/ui/unoobj/docuno.cxx b/sc/source/ui/unoobj/docuno.cxx
index 8d3881b..6eeeef3 100644
--- a/sc/source/ui/unoobj/docuno.cxx
+++ b/sc/source/ui/unoobj/docuno.cxx
@@ -2952,14 +2952,14 @@ void ScModelObj::NotifyChanges( const OUString& rOperation, const ScRangeList& r
        {
            uno::Reference< table::XCellRange > xRangeObj;

            ScRange aRange( *rRanges[ nIndex ] );
            if ( aRange.aStart == aRange.aEnd )
            ScRange const & rRange = rRanges[ nIndex ];
            if ( rRange.aStart == rRange.aEnd )
            {
                xRangeObj.set( new ScCellObj( pDocShell, aRange.aStart ) );
                xRangeObj.set( new ScCellObj( pDocShell, rRange.aStart ) );
            }
            else
            {
                xRangeObj.set( new ScCellRangeObj( pDocShell, aRange ) );
                xRangeObj.set( new ScCellRangeObj( pDocShell, rRange ) );
            }

            util::ElementChange& rChange = aEvent.Changes[ static_cast< sal_Int32 >( nIndex ) ];
@@ -3003,9 +3003,9 @@ void ScModelObj::NotifyChanges( const OUString& rOperation, const ScRangeList& r
                    size_t nRangeCount = rRanges.size();
                    for ( size_t nIndex = 0; nIndex < nRangeCount; ++nIndex )
                    {
                        ScRange aRange( *rRanges[ nIndex ] );
                        if ( aRange.aStart.Tab() == nTab )
                            aTabRanges.Append( aRange );
                        ScRange const & rRange = rRanges[ nIndex ];
                        if ( rRange.aStart.Tab() == nTab )
                            aTabRanges.push_back( rRange );
                    }
                    size_t nTabRangeCount = aTabRanges.size();
                    if ( nTabRangeCount > 0 )
@@ -3013,11 +3013,11 @@ void ScModelObj::NotifyChanges( const OUString& rOperation, const ScRangeList& r
                        uno::Reference<uno::XInterface> xTarget;
                        if ( nTabRangeCount == 1 )
                        {
                            ScRange aRange( *aTabRanges[ 0 ] );
                            if ( aRange.aStart == aRange.aEnd )
                                xTarget.set( static_cast<cppu::OWeakObject*>( new ScCellObj( pDocShell, aRange.aStart ) ) );
                            ScRange const & rRange = aTabRanges[ 0 ];
                            if ( rRange.aStart == rRange.aEnd )
                                xTarget.set( static_cast<cppu::OWeakObject*>( new ScCellObj( pDocShell, rRange.aStart ) ) );
                            else
                                xTarget.set( static_cast<cppu::OWeakObject*>( new ScCellRangeObj( pDocShell, aRange ) ) );
                                xTarget.set( static_cast<cppu::OWeakObject*>( new ScCellRangeObj( pDocShell, rRange ) ) );
                        }
                        else
                            xTarget.set( static_cast<cppu::OWeakObject*>( new ScCellRangesObj( pDocShell, aTabRanges ) ) );
@@ -3633,9 +3633,8 @@ uno::Sequence < uno::Reference< table::XCellRange > > SAL_CALL ScTableSheetsObj:
    xRet.realloc(nCount);
    for( size_t nIndex = 0; nIndex < nCount; nIndex++ )
    {
        const ScRange* pRange = aRangeList[ nIndex ];
        if( pRange )
            xRet[nIndex] = new ScCellRangeObj(pDocShell, *pRange);
        const ScRange & rRange = aRangeList[ nIndex ];
        xRet[nIndex] = new ScCellRangeObj(pDocShell, rRange);
    }

    return xRet;
diff --git a/sc/source/ui/unoobj/funcuno.cxx b/sc/source/ui/unoobj/funcuno.cxx
index 01f2026..68cf909 100644
--- a/sc/source/ui/unoobj/funcuno.cxx
+++ b/sc/source/ui/unoobj/funcuno.cxx
@@ -549,18 +549,18 @@ uno::Any SAL_CALL ScFunctionAccess::callFunction( const OUString& aName,
                const ScRangeList& rRanges = pImpl->GetRangeList();
                if ( pSrcDoc && rRanges.size() == 1 )
                {
                    ScRange aSrcRange = *rRanges[ 0 ];
                    ScRange const & rSrcRange = rRanges[ 0 ];

                    long nStartRow = nDocRow;
                    long nColCount = aSrcRange.aEnd.Col() - aSrcRange.aStart.Col() + 1;
                    long nRowCount = aSrcRange.aEnd.Row() - aSrcRange.aStart.Row() + 1;
                    long nColCount = rSrcRange.aEnd.Col() - rSrcRange.aStart.Col() + 1;
                    long nRowCount = rSrcRange.aEnd.Row() - rSrcRange.aStart.Row() + 1;

                    if ( nStartRow + nRowCount > MAXROWCOUNT )
                        bOverflow = true;
                    else
                    {
                        // copy data
                        if ( !lcl_CopyData( pSrcDoc, aSrcRange, pDoc, ScAddress( 0, static_cast<SCROW>(nDocRow), 0 ) ) )
                        if ( !lcl_CopyData( pSrcDoc, rSrcRange, pDoc, ScAddress( 0, static_cast<SCROW>(nDocRow), 0 ) ) )
                            bOverflow = true;
                    }

diff --git a/sc/source/ui/unoobj/viewuno.cxx b/sc/source/ui/unoobj/viewuno.cxx
index d253827..ec637f1 100644
--- a/sc/source/ui/unoobj/viewuno.cxx
+++ b/sc/source/ui/unoobj/viewuno.cxx
@@ -626,8 +626,8 @@ static bool lcl_TabInRanges( SCTAB nTab, const ScRangeList& rRanges )
{
    for (size_t i = 0, nCount = rRanges.size(); i < nCount; ++i)
    {
        const ScRange* pRange = rRanges[ i ];
        if ( nTab >= pRange->aStart.Tab() && nTab <= pRange->aEnd.Tab() )
        const ScRange & rRange = rRanges[ i ];
        if ( nTab >= rRange.aStart.Tab() && nTab <= rRange.aEnd.Tab() )
            return true;
    }
    return false;
@@ -739,25 +739,22 @@ sal_Bool SAL_CALL ScTabViewObj::select( const uno::Any& aSelection )
            if ( nRangeCount == 0 )
                pViewSh->Unmark();
            else if ( nRangeCount == 1 )
                pViewSh->MarkRange( *rRanges[ 0 ] );
                pViewSh->MarkRange( rRanges[ 0 ] );
            else
            {
                // multiselection

                const ScRange* pFirst = rRanges[ 0 ];
                if ( pFirst && !lcl_TabInRanges( rViewData.GetTabNo(), rRanges ) )
                    pViewSh->SetTabNo( pFirst->aStart.Tab() );
                const ScRange & rFirst = rRanges[ 0 ];
                if ( !lcl_TabInRanges( rViewData.GetTabNo(), rRanges ) )
                    pViewSh->SetTabNo( rFirst.aStart.Tab() );
                pViewSh->DoneBlockMode();
                pViewSh->InitOwnBlockMode();
                rViewData.GetMarkData().MarkFromRangeList( rRanges, true );
                pViewSh->MarkDataChanged();
                rViewData.GetDocShell()->PostPaintGridAll();   // Marks (old&new)
                if ( pFirst )
                {
                    pViewSh->AlignToCursor( pFirst->aStart.Col(), pFirst->aStart.Row(),
                                                SC_FOLLOW_JUMP );
                    pViewSh->SetCursor( pFirst->aStart.Col(), pFirst->aStart.Row() );
                }
                pViewSh->AlignToCursor( rFirst.aStart.Col(), rFirst.aStart.Row(),
                                            SC_FOLLOW_JUMP );
                pViewSh->SetCursor( rFirst.aStart.Col(), rFirst.aStart.Row() );

                //! method of the view to select RangeList
            }
@@ -922,7 +919,7 @@ uno::Any SAL_CALL ScTabViewObj::getSelection()
                    break;
                case 1:
                    {
                        const ScRange& rRange = *(aRangeList[ 0 ]);
                        const ScRange& rRange = aRangeList[ 0 ];
                        if (rRange.aStart == rRange.aEnd)
                            pObj = new ScCellObj( pDocSh, rRange.aStart );
                        else
@@ -1086,7 +1083,7 @@ void SAL_CALL ScTabViewObj::setActiveSheet( const uno::Reference<sheet::XSpreads
            const ScRangeList& rRanges = pRangesImp->GetRangeList();
            if ( rRanges.size() == 1 )
            {
                SCTAB nNewTab = rRanges[ 0 ]->aStart.Tab();
                SCTAB nNewTab = rRanges[ 0 ].aStart.Tab();
                if ( pViewSh->GetViewData().GetDocument()->HasTable(nNewTab) )
                    pViewSh->SetTabNo( nNewTab );
            }
diff --git a/sc/source/ui/vba/vbaapplication.cxx b/sc/source/ui/vba/vbaapplication.cxx
index 58cc3e9..978de71 100644
--- a/sc/source/ui/vba/vbaapplication.cxx
+++ b/sc/source/ui/vba/vbaapplication.cxx
@@ -1127,11 +1127,11 @@ uno::Reference< excel::XRange > lclCreateVbaRange(

    ScRangeList aCellRanges;
    for( ListOfScRange::const_iterator aIt = rList.begin(), aEnd = rList.end(); aIt != aEnd; ++aIt )
        aCellRanges.Append( *aIt );
        aCellRanges.push_back( *aIt );

    if( aCellRanges.size() == 1 )
    {
        uno::Reference< table::XCellRange > xRange( new ScCellRangeObj( pDocShell, *aCellRanges.front() ) );
        uno::Reference< table::XCellRange > xRange( new ScCellRangeObj( pDocShell, aCellRanges.front() ) );
        return new ScVbaRange( excel::getUnoSheetModuleObj( xRange ), rxContext, xRange );
    }
    if( aCellRanges.size() > 1 )
diff --git a/sc/source/ui/vba/vbaeventshelper.cxx b/sc/source/ui/vba/vbaeventshelper.cxx
index 24ae774..400f645 100644
--- a/sc/source/ui/vba/vbaeventshelper.cxx
+++ b/sc/source/ui/vba/vbaeventshelper.cxx
@@ -385,7 +385,7 @@ void SAL_CALL ScVbaEventListener::changesOccurred( const util::ChangesEvent& rEv
            {
                ScRange aRange;
                ScUnoConversion::FillScRange( aRange, xCellRangeAddressable->getRangeAddress() );
                aRangeList.Append( aRange );
                aRangeList.push_back( aRange );
            }
        }
    }
@@ -829,7 +829,7 @@ bool lclSelectionChanged( const ScRangeList& rLeft, const ScRangeList& rRight )
        return !(bLeftEmpty && bRightEmpty);

    // check sheet indexes of the range lists (assuming that all ranges in a list are on the same sheet)
    if (rLeft[0]->aStart.Tab() != rRight[0]->aStart.Tab())
    if (rLeft[0].aStart.Tab() != rRight[0].aStart.Tab())
        return false;

    // compare all ranges
diff --git a/sc/source/ui/vba/vbahyperlinks.cxx b/sc/source/ui/vba/vbahyperlinks.cxx
index 148e774..7e46e38 100644
--- a/sc/source/ui/vba/vbahyperlinks.cxx
+++ b/sc/source/ui/vba/vbahyperlinks.cxx
@@ -42,7 +42,7 @@ bool lclContains( const ScRangeList& rScOuter, const uno::Reference< excel::XRan
        throw uno::RuntimeException("Empty range objects" );

    for( size_t nIndex = 0, nCount = rScInner.size(); nIndex < nCount; ++nIndex )
        if( !rScOuter.In( *rScInner[ nIndex ] ) )
        if( !rScOuter.In( rScInner[ nIndex ] ) )
            return false;
    return true;
}
@@ -89,7 +89,7 @@ bool EqualAnchorFunctor::operator()( const uno::Reference< excel::XHyperlink >& 
            uno::Reference< excel::XRange > xAnchorRange( rxHlink->getRange(), uno::UNO_QUERY_THROW );
            const ScRangeList& rScRanges1 = ScVbaRange::getScRangeList( xAnchorRange );
            const ScRangeList& rScRanges2 = ScVbaRange::getScRangeList( mxAnchorRange );
            return (rScRanges1.size() == 1) && (rScRanges2.size() == 1) && (*rScRanges1[ 0 ] == *rScRanges2[ 0 ]);
            return (rScRanges1.size() == 1) && (rScRanges2.size() == 1) && (rScRanges1[ 0 ] == rScRanges2[ 0 ]);
        }
        case office::MsoHyperlinkType::msoHyperlinkShape:
        case office::MsoHyperlinkType::msoHyperlinkInlineShape:
diff --git a/sc/source/ui/vba/vbanames.cxx b/sc/source/ui/vba/vbanames.cxx
index 553d796..42b290c 100644
--- a/sc/source/ui/vba/vbanames.cxx
+++ b/sc/source/ui/vba/vbanames.cxx
@@ -170,7 +170,7 @@ ScVbaNames::Add( const css::uno::Any& Name ,
                    if ( ScVbaRange::getCellRangesForAddress( nFlags, sFormula, pDocSh, aCellRanges, eConv , ',' ) )
                    {
                        if ( aCellRanges.size() == 1 )
                            xUnoRange =  new ScCellRangeObj( pDocSh, *aCellRanges.front() );
                            xUnoRange =  new ScCellRangeObj( pDocSh, aCellRanges.front() );
                        else
                        {
                            uno::Reference< sheet::XSheetCellRangeContainer > xRanges( new ScCellRangesObj( pDocSh, aCellRanges ) );
diff --git a/sc/source/ui/vba/vbapagesetup.cxx b/sc/source/ui/vba/vbapagesetup.cxx
index dd4a016..a86c013 100644
--- a/sc/source/ui/vba/vbapagesetup.cxx
+++ b/sc/source/ui/vba/vbapagesetup.cxx
@@ -78,7 +78,7 @@ OUString SAL_CALL ScVbaPageSetup::getPrintArea()
        {
            ScRange aRange;
            ScUnoConversion::FillScRange( aRange, aSeq[i] );
            aRangeList.Append( aRange );
            aRangeList.push_back( aRange );
        }
        ScDocument& rDoc = excel::getDocShell( mxModel )->GetDocument();
        aRangeList.Format( aPrintArea, ScRefFlags::RANGE_ABS, &rDoc, formula::FormulaGrammar::CONV_XL_A1, ','  );
@@ -106,9 +106,9 @@ void SAL_CALL ScVbaPageSetup::setPrintArea( const OUString& rAreas )
            uno::Sequence< table::CellRangeAddress > aSeq( aCellRanges.size() );
            for ( size_t i = 0, nRanges = aCellRanges.size(); i < nRanges; ++i )
            {
                ScRange* pRange = aCellRanges[ i ];
                ScRange & rRange = aCellRanges[ i ];
                table::CellRangeAddress aRangeAddress;
                ScUnoConversion::FillApiRange( aRangeAddress, *pRange );
                ScUnoConversion::FillApiRange( aRangeAddress, rRange );
                aSeq[ i++ ] = aRangeAddress;
            }
            xPrintAreas->setPrintAreas( aSeq );
diff --git a/sc/source/ui/vba/vbarange.cxx b/sc/source/ui/vba/vbarange.cxx
index f9577e4..00e3b6c 100644
--- a/sc/source/ui/vba/vbarange.cxx
+++ b/sc/source/ui/vba/vbarange.cxx
@@ -236,12 +236,12 @@ static uno::Reference< excel::XRange > lcl_makeXRangeFromSheetCellRanges( const 
    {
        ScRange refRange;
        ScUnoConversion::FillScRange( refRange, sAddresses[ index ] );
        aCellRanges.Append( refRange );
        aCellRanges.push_back( refRange );
    }
    // Single range
    if ( aCellRanges.size() == 1 )
    {
        uno::Reference< table::XCellRange > xTmpRange( new ScCellRangeObj( pDoc, *aCellRanges.front() ) );
        uno::Reference< table::XCellRange > xTmpRange( new ScCellRangeObj( pDoc, aCellRanges.front() ) );
        xRange = new ScVbaRange( xParent, xContext, xTmpRange );
    }
    else
@@ -883,7 +883,7 @@ protected:
                if ( pUnoRangesBase )
                {
                    ScRangeList aCellRanges = pUnoRangesBase->GetRangeList();
                    ScCompiler aCompiler( m_pDoc, aCellRanges.front()->aStart, m_eGrammar );
                    ScCompiler aCompiler( m_pDoc, aCellRanges.front().aStart, m_eGrammar );
                    // compile the string in the format passed in
                    std::unique_ptr<ScTokenArray> pArray(aCompiler.CompileString(sFormula));
                    // set desired convention to that of the document
@@ -926,7 +926,7 @@ public:
            pUnoRangesBase )
        {
            ScRangeList aCellRanges = pUnoRangesBase->GetRangeList();
            ScCompiler aCompiler( m_pDoc, aCellRanges.front()->aStart, formula::FormulaGrammar::GRAM_DEFAULT );
            ScCompiler aCompiler( m_pDoc, aCellRanges.front().aStart, formula::FormulaGrammar::GRAM_DEFAULT );
            std::unique_ptr<ScTokenArray> pArray(aCompiler.CompileString(sVal));
            // set desired convention
            aCompiler.SetGrammar( m_eGrammar );
@@ -1217,13 +1217,13 @@ bool getScRangeListForAddress( const OUString& sName, ScDocShell* pDocSh, const 

        for ( size_t i = 0, nRanges = aCellRanges.size(); i < nRanges; ++i )
        {
            ScRange* pRange = aCellRanges[ i ];
            pRange->aStart.SetCol( refRange.aStart.Col() + pRange->aStart.Col() );
            pRange->aStart.SetRow( refRange.aStart.Row() + pRange->aStart.Row() );
            pRange->aStart.SetTab( bTabFromReferrer ? refRange.aStart.Tab()  : pRange->aStart.Tab() );
            pRange->aEnd.SetCol( refRange.aStart.Col() + pRange->aEnd.Col() );
            pRange->aEnd.SetRow( refRange.aStart.Row() + pRange->aEnd.Row() );
            pRange->aEnd.SetTab( bTabFromReferrer ? refRange.aEnd.Tab()  : pRange->aEnd.Tab() );
            ScRange & rRange = aCellRanges[ i ];
            rRange.aStart.SetCol( refRange.aStart.Col() + rRange.aStart.Col() );
            rRange.aStart.SetRow( refRange.aStart.Row() + rRange.aStart.Row() );
            rRange.aStart.SetTab( bTabFromReferrer ? refRange.aStart.Tab()  : rRange.aStart.Tab() );
            rRange.aEnd.SetCol( refRange.aStart.Col() + rRange.aEnd.Col() );
            rRange.aEnd.SetRow( refRange.aStart.Row() + rRange.aEnd.Row() );
            rRange.aEnd.SetTab( bTabFromReferrer ? refRange.aEnd.Tab()  : rRange.aEnd.Tab() );
        }
    }
    return true;
@@ -1241,7 +1241,7 @@ getRangeForName( const uno::Reference< uno::XComponentContext >& xContext, const
    // Single range
    if ( aCellRanges.size() == 1 )
    {
        uno::Reference< table::XCellRange > xRange( new ScCellRangeObj( pDocSh, *aCellRanges.front() ) );
        uno::Reference< table::XCellRange > xRange( new ScCellRangeObj( pDocSh, aCellRanges.front() ) );
        uno::Reference< XHelperInterface > xFixThisParent = excel::getUnoSheetModuleObj( xRange );
        return new ScVbaRange( xFixThisParent, xContext, xRange );
    }
@@ -1305,7 +1305,7 @@ uno::Reference< sheet::XSheetCellRangeContainer > lclExpandToMerged( const uno::
        table::CellRangeAddress aRangeAddr = lclGetRangeAddress( lclExpandToMerged( xRange, bRecursive ) );
        ScRange aScRange;
        ScUnoConversion::FillScRange( aScRange, aRangeAddr );
        aScRanges.Append( aScRange );
        aScRanges.push_back( aScRange );
    }
    return new ScCellRangesObj( getDocShellFromRanges( rxCellRanges ), aScRanges );
}
@@ -1387,7 +1387,7 @@ table::CellRangeAddress getCellRangeAddressForVBARange( const uno::Any& aParam, 
                if ( aCellRanges.size() == 1 )
                {
                    table::CellRangeAddress aRangeAddress;
                    ScUnoConversion::FillApiRange( aRangeAddress, *aCellRanges.front() );
                    ScUnoConversion::FillApiRange( aRangeAddress, aCellRanges.front() );
                    return aRangeAddress;
                }
            }
@@ -1786,8 +1786,8 @@ ScVbaRange::HasFormula()
        // check if there are holes (where some cells are not formulas)
        // or returned range is not equal to this range
        if (  ( pFormulaRanges->GetRangeList().size() > 1 )
           || ( pFormulaRanges->GetRangeList().front()->aStart != pThisRanges->GetRangeList().front()->aStart )
           || ( pFormulaRanges->GetRangeList().front()->aEnd   != pThisRanges->GetRangeList().front()->aEnd   )
           || ( pFormulaRanges->GetRangeList().front().aStart != pThisRanges->GetRangeList().front().aStart )
           || ( pFormulaRanges->GetRangeList().front().aEnd   != pThisRanges->GetRangeList().front().aEnd   )
           )
            return aNULL(); // should return aNULL;
    }
@@ -1872,16 +1872,16 @@ ScVbaRange::Offset( const ::uno::Any &nRowOff, const uno::Any &nColOff )

    for ( size_t i = 0, nRanges = aCellRanges.size(); i < nRanges; ++i )
    {
        ScRange* pRange = aCellRanges[ i ];
        ScRange & rRange = aCellRanges[ i ];
        if ( bIsColumnOffset )
        {
            pRange->aStart.SetCol( pRange->aStart.Col() + nColOffset );
            pRange->aEnd.SetCol( pRange->aEnd.Col() + nColOffset );
            rRange.aStart.SetCol( rRange.aStart.Col() + nColOffset );
            rRange.aEnd.SetCol( rRange.aEnd.Col() + nColOffset );
        }
        if ( bIsRowOffset )
        {
            pRange->aStart.SetRow( pRange->aStart.Row() + nRowOffset );
            pRange->aEnd.SetRow( pRange->aEnd.Row() + nRowOffset );
            rRange.aStart.SetRow( rRange.aStart.Row() + nRowOffset );
            rRange.aEnd.SetRow( rRange.aEnd.Row() + nRowOffset );
        }
    }

@@ -1891,7 +1891,7 @@ ScVbaRange::Offset( const ::uno::Any &nRowOff, const uno::Any &nColOff )
        return new ScVbaRange( mxParent, mxContext, xRanges );
    }
    // normal range
    uno::Reference< table::XCellRange > xRange( new ScCellRangeObj( pUnoRangesBase->GetDocShell(), *aCellRanges.front() ) );
    uno::Reference< table::XCellRange > xRange( new ScCellRangeObj( pUnoRangesBase->GetDocShell(), aCellRanges.front() ) );
    return new ScVbaRange( mxParent, mxContext, xRange  );
}

@@ -2007,7 +2007,7 @@ ScVbaRange::setFormulaArray(const uno::Any& rFormula)
    ScTokenArray aTokenArray;
    (void)ScTokenConversion::ConvertToTokenArray( getScDocument(), aTokenArray, aTokens );

    getScDocShell()->GetDocFunc().EnterMatrix( *getScRangeList()[0], nullptr, &aTokenArray, OUString(), true, true, EMPTY_OUSTRING, formula::FormulaGrammar::GRAM_API );
    getScDocShell()->GetDocFunc().EnterMatrix( getScRangeList()[0], nullptr, &aTokenArray, OUString(), true, true, EMPTY_OUSTRING, formula::FormulaGrammar::GRAM_API );
}

OUString
@@ -2352,7 +2352,7 @@ ScVbaRange::Rows(const uno::Any& aIndex )
        ScCellRangesBase* pUnoRangesBase = getCellRangesBase();
        ScRangeList aCellRanges = pUnoRangesBase->GetRangeList();

        ScRange aRange = *aCellRanges.front();
        ScRange aRange = aCellRanges.front();
        if( aIndex >>= nValue )
        {
            aRange.aStart.SetRow( aRange.aStart.Row() + --nValue );
@@ -2392,7 +2392,7 @@ ScVbaRange::Columns(const uno::Any& aIndex )
    ScCellRangesBase* pUnoRangesBase = getCellRangesBase();
    ScRangeList aCellRanges = pUnoRangesBase->GetRangeList();

    ScRange aRange = *aCellRanges.front();
    ScRange aRange = aCellRanges.front();
    if ( aIndex.hasValue() )
    {
        sal_Int32 nValue = 0;
@@ -2882,16 +2882,16 @@ ScVbaRange::getEntireColumnOrRow( bool bColumn )

    for ( size_t i = 0, nRanges = aCellRanges.size(); i < nRanges; ++i )
    {
        ScRange* pRange = aCellRanges[ i ];
        ScRange & rRange = aCellRanges[ i ];
        if ( bColumn )
        {
            pRange->aStart.SetRow( 0 );
            pRange->aEnd.SetRow( MAXROW );
            rRange.aStart.SetRow( 0 );
            rRange.aEnd.SetRow( MAXROW );
        }
        else
        {
            pRange->aStart.SetCol( 0 );
            pRange->aEnd.SetCol( MAXCOL );
            rRange.aStart.SetCol( 0 );
            rRange.aEnd.SetCol( MAXCOL );
        }
    }
    if ( aCellRanges.size() > 1 ) // Multi-Area
@@ -2900,7 +2900,7 @@ ScVbaRange::getEntireColumnOrRow( bool bColumn )

        return new ScVbaRange( mxParent, mxContext, xRanges, !bColumn, bColumn );
    }
    uno::Reference< table::XCellRange > xRange( new ScCellRangeObj( pUnoRangesBase->GetDocShell(), *aCellRanges.front() ) );
    uno::Reference< table::XCellRange > xRange( new ScCellRangeObj( pUnoRangesBase->GetDocShell(), aCellRanges.front() ) );
    return new ScVbaRange( mxParent, mxContext, xRange, !bColumn, bColumn  );
}

@@ -5416,12 +5416,12 @@ ScVbaRange::SpecialCells( const uno::Any& _oType, const uno::Any& _oValue)
                {
                    ScRange refRange;
                    ScUnoConversion::FillScRange( refRange, *it );
                    aCellRanges.Append( refRange );
                    aCellRanges.push_back( refRange );
                }
                // Single range
                if ( aCellRanges.size() == 1 )
                {
                    uno::Reference< table::XCellRange > xRange( new ScCellRangeObj( getScDocShell(), *aCellRanges.front() ) );
                    uno::Reference< table::XCellRange > xRange( new ScCellRangeObj( getScDocShell(), aCellRanges.front() ) );
                    return new ScVbaRange( mxParent, mxContext, xRange );
                }
                uno::Reference< sheet::XSheetCellRangeContainer > xRanges( new ScCellRangesObj( getScDocShell(), aCellRanges ) );
diff --git a/sc/source/ui/view/cellsh.cxx b/sc/source/ui/view/cellsh.cxx
index 0608924..daf8830 100644
--- a/sc/source/ui/view/cellsh.cxx
+++ b/sc/source/ui/view/cellsh.cxx
@@ -1109,7 +1109,7 @@ void ScCellShell::GetState(SfxItemSet &rSet)
                        if (pDoc->HasTabNotes( rTab ))
                        {
                            bHasNotes = true;
                            aRanges.Append(ScRange(0,0,rTab,MAXCOL,MAXROW,rTab));
                            aRanges.push_back(ScRange(0,0,rTab,MAXCOL,MAXROW,rTab));
                        }
                    }

diff --git a/sc/source/ui/view/cellsh1.cxx b/sc/source/ui/view/cellsh1.cxx
index e92e560..93779d6 100644
--- a/sc/source/ui/view/cellsh1.cxx
+++ b/sc/source/ui/view/cellsh1.cxx
@@ -1978,8 +1978,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
                ScAddress aPos(pData->GetCurX(), pData->GetCurY(), pData->GetTabNo());
                if(aRangeList.empty())
                {
                    ScRange* pRange = new ScRange(aPos);
                    aRangeList.push_back(pRange);
                    aRangeList.push_back(ScRange(aPos));
                }

                const ScConditionalFormat* pCondFormat = nullptr;
@@ -2290,12 +2289,12 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )

                    for ( size_t i = 0; i < nRangeSize; ++i )
                    {
                        const ScRange * pRange = aRanges[i];
                        const SCROW nRow0 = pRange->aStart.Row();
                        const SCROW nRow1 = pRange->aEnd.Row();
                        const SCCOL nCol0 = pRange->aStart.Col();
                        const SCCOL nCol1 = pRange->aEnd.Col();
                        const SCTAB nRangeTab = pRange->aStart.Tab();
                        const ScRange & rRange = aRanges[i];
                        const SCROW nRow0 = rRange.aStart.Row();
                        const SCROW nRow1 = rRange.aEnd.Row();
                        const SCCOL nCol0 = rRange.aStart.Col();
                        const SCCOL nCol1 = rRange.aEnd.Col();
                        const SCTAB nRangeTab = rRange.aStart.Tab();
                        // Check by each cell
                        for ( SCROW nRow = nRow0; nRow <= nRow1; ++nRow )
                        {
@@ -2362,7 +2361,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )
                 std::vector<sc::NoteEntry> aNotes;

                 for (auto const& rTab : rMark.GetSelectedTabs())
                     aRanges.Append(ScRange(0,0,rTab,MAXCOL,MAXROW,rTab));
                     aRanges.push_back(ScRange(0,0,rTab,MAXCOL,MAXROW,rTab));

                 CommentCaptionState eState = pDoc->GetAllNoteCaptionsState( aRanges );
                 pDoc->GetNotesInRange(aRanges, aNotes);
@@ -2416,7 +2415,7 @@ void ScCellShell::ExecuteEdit( SfxRequest& rReq )

                for (auto const& rTab : rMark.GetSelectedTabs())
                {
                    aRangeList.Append(ScRange(0,0,rTab,MAXCOL,MAXROW,rTab));
                    aRangeList.push_back(ScRange(0,0,rTab,MAXCOL,MAXROW,rTab));
                }

                aNewMark.MarkFromRangeList( aRangeList, true );
diff --git a/sc/source/ui/view/cliputil.cxx b/sc/source/ui/view/cliputil.cxx
index 4eead7d..f3cd331 100644
--- a/sc/source/ui/view/cliputil.cxx
+++ b/sc/source/ui/view/cliputil.cxx
@@ -100,7 +100,7 @@ bool ScClipUtil::CheckDestRanges(
{
    for (size_t i = 0, n = rDest.size(); i < n; ++i)
    {
        ScRange aTest = *rDest[i];
        ScRange aTest = rDest[i];
        // Check for filtered rows in all selected sheets.
        ScMarkData::const_iterator itrTab = rMark.begin(), itrTabEnd = rMark.end();
        for (; itrTab != itrTabEnd; ++itrTab)
diff --git a/sc/source/ui/view/dbfunc3.cxx b/sc/source/ui/view/dbfunc3.cxx
index dd81e40..38b6d6a 100644
--- a/sc/source/ui/view/dbfunc3.cxx
+++ b/sc/source/ui/view/dbfunc3.cxx
@@ -713,12 +713,12 @@ void ScDBFunc::GetSelectedMemberList(ScDPUniqueStringSet& rEntries, long& rDimen

    for (size_t nRangePos=0; nRangePos < nRangeCount && bContinue; nRangePos++)
    {
        ScRange aRange = *(*xRanges)[nRangePos];
        SCCOL nStartCol = aRange.aStart.Col();
        SCROW nStartRow = aRange.aStart.Row();
        SCCOL nEndCol = aRange.aEnd.Col();
        SCROW nEndRow = aRange.aEnd.Row();
        SCTAB nTab = aRange.aStart.Tab();
        ScRange const & rRange = (*xRanges)[nRangePos];
        SCCOL nStartCol = rRange.aStart.Col();
        SCROW nStartRow = rRange.aStart.Row();
        SCCOL nEndCol = rRange.aEnd.Col();
        SCROW nEndRow = rRange.aEnd.Row();
        SCTAB nTab = rRange.aStart.Tab();

        for (SCROW nRow=nStartRow; nRow<=nEndRow && bContinue; nRow++)
            for (SCCOL nCol=nStartCol; nCol<=nEndCol && bContinue; nCol++)
diff --git a/sc/source/ui/view/drawvie4.cxx b/sc/source/ui/view/drawvie4.cxx
index bee41f5..2571d95 100644
--- a/sc/source/ui/view/drawvie4.cxx
+++ b/sc/source/ui/view/drawvie4.cxx
@@ -258,7 +258,7 @@ void getOleSourceRanges(const SdrMarkList& rMarkList, bool& rAnyOle, bool& rOneO
        if (aRange.Parse(*it, pDoc, pDoc->GetAddressConvention()) & ScRefFlags::VALID)
        {
            for(size_t i = 0; i < aRange.size(); ++i)
                pRanges->push_back(*aRange[i]);
                pRanges->push_back(aRange[i]);
        }
        else if (aAddr.Parse(*it, pDoc, pDoc->GetAddressConvention()) & ScRefFlags::VALID)
            pRanges->push_back(aAddr);
diff --git a/sc/source/ui/view/gridwin.cxx b/sc/source/ui/view/gridwin.cxx
index 4795290..edca231 100644
--- a/sc/source/ui/view/gridwin.cxx
+++ b/sc/source/ui/view/gridwin.cxx
@@ -5270,7 +5270,7 @@ bool ScGridWindow::HasScenarioButton( const Point& rPosPixel, ScRange& rScenRang
        size_t nRangeCount = aRanges.size();
        for (size_t j=0;  j< nRangeCount; ++j)
        {
            ScRange aRange = *aRanges[j];
            ScRange aRange = aRanges[j];
            // Always extend scenario frame to merged cells where no new non-covered cells
            // are framed
            pDoc->ExtendTotalMerge( aRange );
@@ -5704,14 +5704,14 @@ void ScGridWindow::UpdateCopySourceOverlay()
    mpOOSelectionBorder.reset(new sdr::overlay::OverlayObjectList);
    for ( size_t i = 0; i < rClipParam.maRanges.size(); ++i )
    {
        ScRange* p = rClipParam.maRanges[i];
        if (p->aStart.Tab() != nCurTab)
        ScRange const & r = rClipParam.maRanges[i];
        if (r.aStart.Tab() != nCurTab)
            continue;

        SCCOL nClipStartX = p->aStart.Col();
        SCROW nClipStartY = p->aStart.Row();
        SCCOL nClipEndX   = p->aEnd.Col();
        SCROW nClipEndY   = p->aEnd.Row();
        SCCOL nClipStartX = r.aStart.Col();
        SCROW nClipStartY = r.aStart.Row();
        SCCOL nClipEndX   = r.aEnd.Col();
        SCROW nClipEndY   = r.aEnd.Row();

        Point aClipStartScrPos = pViewData->GetScrPos( nClipStartX, nClipStartY, eWhich );
        Point aClipEndScrPos   = pViewData->GetScrPos( nClipEndX + 1, nClipEndY + 1, eWhich );
diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx
index 81f9bf2..cd20ed0 100644
--- a/sc/source/ui/view/gridwin4.cxx
+++ b/sc/source/ui/view/gridwin4.cxx
@@ -206,7 +206,7 @@ static void lcl_DrawScenarioFrames( OutputDevice* pDev, ScViewData* pViewData, S

        for (size_t j = 0, n = xRanges->size(); j < n; ++j)
        {
            ScRange aRange = *(*xRanges)[j];
            ScRange aRange = (*xRanges)[j];
            // Always extend scenario frame to merged cells where no new non-covered cells
            // are framed
            pDoc->ExtendTotalMerge( aRange );
diff --git a/sc/source/ui/view/gridwin_dbgutil.cxx b/sc/source/ui/view/gridwin_dbgutil.cxx
index e6cd83a..f4ff902 100644
--- a/sc/source/ui/view/gridwin_dbgutil.cxx
+++ b/sc/source/ui/view/gridwin_dbgutil.cxx
@@ -100,13 +100,11 @@ void ScGridWindow::dumpCellProperties()

    for (size_t i = 0, n = aList.size(); i < n; ++i)
    {
        ScRange* pRange = aList[i];
        if (!pRange)
            continue;
        ScRange const & rRange = aList[i];

        for (SCCOL nCol = pRange->aStart.Col(); nCol <= pRange->aEnd.Col(); ++nCol)
        for (SCCOL nCol = rRange.aStart.Col(); nCol <= rRange.aEnd.Col(); ++nCol)
        {
            for (SCROW nRow = pRange->aStart.Row(); nRow <= pRange->aEnd.Row(); ++nRow)
            for (SCROW nRow = rRange.aStart.Row(); nRow <= rRange.aEnd.Row(); ++nRow)
            {
                const ScPatternAttr* pPatternAttr = pDoc->GetPattern(nCol, nRow, nTab);
                xmlTextWriterStartElement(writer, BAD_CAST("cell"));
diff --git a/sc/source/ui/view/tabview3.cxx b/sc/source/ui/view/tabview3.cxx
index a789e66..41bd76e 100644
--- a/sc/source/ui/view/tabview3.cxx
+++ b/sc/source/ui/view/tabview3.cxx
@@ -2488,11 +2488,11 @@ void ScTabView::DoChartSelection(
            size_t nListSize = aRangeList.size();
            for ( size_t j = 0; j < nListSize; ++j )
            {
                ScRange* p = aRangeList[j];
                ScRange const & r = aRangeList[j];
                if( rHighlightedRange.Index == - 1 )
                    AddHighlightRange( *p, aSelColor );
                    AddHighlightRange( r, aSelColor );
                else
                    AddHighlightRange( lcl_getSubRangeByIndex( *p, rHighlightedRange.Index ), aSelColor );
                    AddHighlightRange( lcl_getSubRangeByIndex( r, rHighlightedRange.Index ), aSelColor );
            }
        }
    }
diff --git a/sc/source/ui/view/tabvwshc.cxx b/sc/source/ui/view/tabvwshc.cxx
index f750375..46fe3f1 100644
--- a/sc/source/ui/view/tabvwshc.cxx
+++ b/sc/source/ui/view/tabvwshc.cxx
@@ -614,24 +614,21 @@ bool ScTabViewShell::UseSubTotal(ScRangeList* pRangeList)
    size_t nRangeIndex (0);
    while (!bSubTotal && nRangeIndex < nRangeCount)
    {
        const ScRange* pRange = (*pRangeList)[nRangeIndex];
        if( pRange )
        const ScRange& rRange = (*pRangeList)[nRangeIndex];
        SCTAB nTabEnd(rRange.aEnd.Tab());
        SCTAB nTab(rRange.aStart.Tab());
        while (!bSubTotal && nTab <= nTabEnd)
        {
            SCTAB nTabEnd(pRange->aEnd.Tab());
            SCTAB nTab(pRange->aStart.Tab());
            while (!bSubTotal && nTab <= nTabEnd)
            SCROW nRowEnd(rRange.aEnd.Row());
            SCROW nRow(rRange.aStart.Row());
            while (!bSubTotal && nRow <= nRowEnd)
            {
                SCROW nRowEnd(pRange->aEnd.Row());
                SCROW nRow(pRange->aStart.Row());
                while (!bSubTotal && nRow <= nRowEnd)
                {
                    if (pDoc->RowFiltered(nRow, nTab))
                        bSubTotal = true;
                    else
                        ++nRow;
                }
                ++nTab;
                if (pDoc->RowFiltered(nRow, nTab))
                    bSubTotal = true;
                else
                    ++nRow;
            }
            ++nTab;
        }
        ++nRangeIndex;
    }
@@ -647,14 +644,11 @@ bool ScTabViewShell::UseSubTotal(ScRangeList* pRangeList)
        nRangeIndex = 0;
        while (!bSubTotal && nRangeIndex < nRangeCount)
        {
            const ScRange* pRange = (*pRangeList)[nRangeIndex];
            if( pRange )
            {
                ScRange aDBArea;
                rDB.GetArea(aDBArea);
                if (aDBArea.Intersects(*pRange))
                    bSubTotal = true;
            }
            const ScRange & rRange = (*pRangeList)[nRangeIndex];
            ScRange aDBArea;
            rDB.GetArea(aDBArea);
            if (aDBArea.Intersects(rRange))
                bSubTotal = true;
            ++nRangeIndex;
        }
    }
@@ -677,10 +671,10 @@ const OUString ScTabViewShell::DoAutoSum(bool& rRangeFinder, bool& rSubTotal)
        const size_t nCount = aMarkRangeList.size();
        for ( size_t i = 0; i < nCount; ++i )
        {
            const ScRange aRange( *aMarkRangeList[i] );
            if ( pDoc->IsBlockEmpty( aRange.aStart.Tab(),
                 aRange.aStart.Col(), aRange.aStart.Row(),
                 aRange.aEnd.Col(), aRange.aEnd.Row() ) )
            const ScRange & rRange( aMarkRangeList[i] );
            if ( pDoc->IsBlockEmpty( rRange.aStart.Tab(),
                 rRange.aStart.Col(), rRange.aStart.Row(),
                 rRange.aEnd.Col(), rRange.aEnd.Row() ) )
            {
                bEmpty = true;
                break;
@@ -693,7 +687,7 @@ const OUString ScTabViewShell::DoAutoSum(bool& rRangeFinder, bool& rSubTotal)
            const bool bDataFound = GetAutoSumArea( aRangeList );
            if ( bDataFound )
            {
                ScAddress aAddr = aRangeList.back()->aEnd;
                ScAddress aAddr = aRangeList.back().aEnd;
                aAddr.IncRow();
                const bool bSubTotal( UseSubTotal( &aRangeList ) );
                EnterAutoSum( aRangeList, bSubTotal, aAddr );
@@ -704,15 +698,15 @@ const OUString ScTabViewShell::DoAutoSum(bool& rRangeFinder, bool& rSubTotal)
            const bool bSubTotal( UseSubTotal( &aMarkRangeList ) );
            for ( size_t i = 0; i < nCount; ++i )
            {
                const ScRange aRange( *aMarkRangeList[i] );
                const ScRange & rRange = aMarkRangeList[i];
                const bool bSetCursor = ( i == nCount - 1 );
                const bool bContinue = ( i != 0 );
                if ( !AutoSum( aRange, bSubTotal, bSetCursor, bContinue ) )
                if ( !AutoSum( rRange, bSubTotal, bSetCursor, bContinue ) )
                {
                    MarkRange( aRange, false );
                    SetCursor( aRange.aEnd.Col(), aRange.aEnd.Row() );
                    MarkRange( rRange, false );
                    SetCursor( rRange.aEnd.Col(), rRange.aEnd.Row() );
                    const ScRangeList aRangeList;
                    ScAddress aAddr = aRange.aEnd;
                    ScAddress aAddr = rRange.aEnd;
                    aAddr.IncRow();
                    aFormula = GetAutoSumFormula( aRangeList, bSubTotal, aAddr );
                    break;
diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx
index 1b7bdb7..89845c0 100644
--- a/sc/source/ui/view/viewdata.cxx
+++ b/sc/source/ui/view/viewdata.cxx
@@ -1188,8 +1188,7 @@ void ScViewData::GetMultiArea( ScRangeListRef& rRange ) const
    {
        ScRange aSimple;
        GetSimpleArea(aSimple);
        rRange = new ScRangeList;
        rRange->Append(aSimple);
        rRange = new ScRangeList(aSimple);
    }
}

diff --git a/sc/source/ui/view/viewfun2.cxx b/sc/source/ui/view/viewfun2.cxx
index 2727e0b..e572964 100644
--- a/sc/source/ui/view/viewfun2.cxx
+++ b/sc/source/ui/view/viewfun2.cxx
@@ -330,7 +330,7 @@ static ScAutoSum lcl_GetAutoSumForColumnRange( ScDocument* pDoc, ScRangeList& rR
        bool bContinue = false;
        do
        {
            rRangeList.Append( ScRange( nCol, nStartRow, nTab, nCol, nEndRow, nTab ) );
            rRangeList.push_back( ScRange( nCol, nStartRow, nTab, nCol, nEndRow, nTab ) );
            nEndRow = static_cast< SCROW >( nExtend );
            bContinue = lcl_FindNextSumEntryInColumn( pDoc, nCol, nEndRow /*inout*/, nTab, nExtend /*out*/, aStart.Row() );
            if ( bContinue )
@@ -346,7 +346,7 @@ static ScAutoSum lcl_GetAutoSumForColumnRange( ScDocument* pDoc, ScRangeList& rR
        {
            --nStartRow;
        }
        rRangeList.Append( ScRange( nCol, nStartRow, nTab, nCol, nEndRow, nTab ) );
        rRangeList.push_back( ScRange( nCol, nStartRow, nTab, nCol, nEndRow, nTab ) );
        if (eSum == ScAutoSumNone)
            eSum = ScAutoSumData;
    }
@@ -375,7 +375,7 @@ static ScAutoSum lcl_GetAutoSumForRowRange( ScDocument* pDoc, ScRangeList& rRang
        bool bContinue = false;
        do
        {
            rRangeList.Append( ScRange( nStartCol, nRow, nTab, nEndCol, nRow, nTab ) );
            rRangeList.push_back( ScRange( nStartCol, nRow, nTab, nEndCol, nRow, nTab ) );
            nEndCol = static_cast< SCCOL >( nExtend );
            bContinue = lcl_FindNextSumEntryInRow( pDoc, nEndCol /*inout*/, nRow, nTab, nExtend /*out*/, aStart.Col() );
            if ( bContinue )
@@ -391,7 +391,7 @@ static ScAutoSum lcl_GetAutoSumForRowRange( ScDocument* pDoc, ScRangeList& rRang
        {
            --nStartCol;
        }
        rRangeList.Append( ScRange( nStartCol, nRow, nTab, nEndCol, nRow, nTab ) );
        rRangeList.push_back( ScRange( nStartCol, nRow, nTab, nEndCol, nRow, nTab ) );
        if (eSum == ScAutoSumNone)
            eSum = ScAutoSumData;
    }
@@ -476,7 +476,7 @@ bool ScViewFunc::GetAutoSumArea( ScRangeList& rRangeList )
                        --nStartCol;
                }
            }
            rRangeList.Append(
            rRangeList.push_back(
                ScRange( nStartCol, nStartRow, nTab, nEndCol, nEndRow, nTab ) );
            if ( eSum == ScAutoSumSum )
            {
@@ -665,7 +665,7 @@ bool ScViewFunc::AutoSum( const ScRange& rRange, bool bSubTotal, bool bSetCursor
                if ( (eSum = lcl_GetAutoSumForColumnRange( pDoc, aRangeList, aRange )) != ScAutoSumNone )
                {
                    if (++nRowSums == 1)
                        nRowSumsStartCol = aRangeList[0]->aStart.Col();
                        nRowSumsStartCol = aRangeList[0].aStart.Col();
                    const OUString aFormula = GetAutoSumFormula(
                        aRangeList, bSubTotal, ScAddress(nCol, nInsRow, nTab));
                    EnterData( nCol, nInsRow, nTab, aFormula );
@@ -702,7 +702,7 @@ bool ScViewFunc::AutoSum( const ScRange& rRange, bool bSubTotal, bool bSetCursor
                if ( (eSum = lcl_GetAutoSumForRowRange( pDoc, aRangeList, aRange )) != ScAutoSumNone )
                {
                    if (++nColSums == 1)
                        nColSumsStartRow = aRangeList[0]->aStart.Row();
                        nColSumsStartRow = aRangeList[0].aStart.Row();
                    const OUString aFormula = GetAutoSumFormula( aRangeList, bSubTotal, ScAddress(nInsCol, nRow, nTab) );
                    EnterData( nInsCol, nRow, nTab, aFormula );
                }
@@ -749,15 +749,14 @@ OUString ScViewFunc::GetAutoSumFormula( const ScRangeList& rRangeList, bool bSub
    if(!rRangeList.empty())
    {
        ScRangeList aRangeList = rRangeList;
        const ScRange* pFirst = aRangeList.front();
        size_t ListSize = aRangeList.size();
        for ( size_t i = 0; i < ListSize; ++i )
        for ( size_t i = 1; i < ListSize; ++i )
        {
            const ScRange* p = aRangeList[i];
            if (p != pFirst)
            const ScRange & r = aRangeList[i];
            if (i != 0)
                pArray->AddOpCode(ocSep);
            ScComplexRefData aRef;
            aRef.InitRangeRel(*p, rAddr);
            aRef.InitRangeRel(r, rAddr);
            pArray->AddDoubleReference(aRef);
        }
    }
@@ -996,8 +995,8 @@ void ScViewFunc::SetPrintRanges( bool bEntireSheet, const OUString* pPrint,
                rMark.FillRangeListWithMarks( pList.get(), false );
                for (size_t i = 0, n = pList->size(); i < n; ++i)
                {
                    ScRange* pR = (*pList)[i];
                    rDoc.AddPrintRange(nTab, *pR);
                    const ScRange & rR = (*pList)[i];
                    rDoc.AddPrintRange(nTab, rR);
                }
            }
        }
@@ -1391,7 +1390,7 @@ void ScViewFunc::FillAuto( FillDir eDir, SCCOL nStartCol, SCROW nStartRow,
                default:
                    break;
            }
            aChangeRanges.Append( aChangeRange );
            aChangeRanges.push_back( aChangeRange );
            HelperNotifyChanges::Notify(*pModelObj, aChangeRanges);
        }
    }
@@ -1863,7 +1862,7 @@ bool ScViewFunc::SearchAndReplace( const SvxSearchItem* pSearchItem,
                rMark.ResetMark();
                for (size_t i = 0, n = aMatchedRanges.size(); i < n; ++i)
                {
                    const ScRange& r = *aMatchedRanges[i];
                    const ScRange& r = aMatchedRanges[i];
                    if (r.aStart.Tab() == nTab)
                        rMark.SetMultiMarkArea(r);
                }
@@ -2762,7 +2761,7 @@ void ScViewFunc::MoveTable(
                break;  // for
            }
            ScRange aRange( 0, 0, TheTabs[j], MAXCOL, MAXROW, TheTabs[j] );
            aParam.maRanges.Append(aRange);
            aParam.maRanges.push_back(aRange);
        }
        pDoc->SetClipParam(aParam);
        if ( nErrVal > 0 )
diff --git a/sc/source/ui/view/viewfun3.cxx b/sc/source/ui/view/viewfun3.cxx
index 3afb0f4..7d6efcf 100644
--- a/sc/source/ui/view/viewfun3.cxx
+++ b/sc/source/ui/view/viewfun3.cxx
@@ -161,8 +161,7 @@ bool ScViewFunc::CopyToClip( ScDocument* pClipDoc, bool bCut, bool bApi, bool bI

    if ( eMarkType == SC_MARK_SIMPLE || eMarkType == SC_MARK_SIMPLE_FILTERED )
    {
       ScRangeList aRangeList;
       aRangeList.Append( aRange );
       ScRangeList aRangeList( aRange );
       bDone = CopyToClip( pClipDoc, aRangeList, bCut, bApi, bIncludeObjects, bStopEdit );
    }
    else if (eMarkType == SC_MARK_MULTI)
@@ -190,7 +189,7 @@ bool ScViewFunc::CopyToClip( ScDocument* pClipDoc, const ScRangeList& rRanges, b
    if ( bStopEdit )
        UpdateInputLine();

    ScRange aRange = *rRanges[0];
    ScRange aRange = rRanges[0];
    ScClipParam aClipParam( aRange, bCut );
    aClipParam.maRanges = rRanges;

@@ -304,26 +303,26 @@ bool ScViewFunc::CopyToClip( ScDocument* pClipDoc, const ScRangeList& rRanges, b

            // Check for geometrical feasibility of the ranges.
            bool bValidRanges = true;
            ScRange* p = aClipParam.maRanges.front();
            ScRange & r = aClipParam.maRanges.front();
            SCCOL nPrevColDelta = 0;
            SCROW nPrevRowDelta = 0;
            SCCOL nPrevCol = p->aStart.Col();
            SCROW nPrevRow = p->aStart.Row();
            SCCOL nPrevColSize = p->aEnd.Col() - p->aStart.Col() + 1;
            SCROW nPrevRowSize = p->aEnd.Row() - p->aStart.Row() + 1;
            SCCOL nPrevCol = r.aStart.Col();
            SCROW nPrevRow = r.aStart.Row();
            SCCOL nPrevColSize = r.aEnd.Col() - r.aStart.Col() + 1;
            SCROW nPrevRowSize = r.aEnd.Row() - r.aStart.Row() + 1;
            for ( size_t i = 1; i < aClipParam.maRanges.size(); ++i )
            {
                p = aClipParam.maRanges[i];
                r = aClipParam.maRanges[i];
                if ( pDoc->HasSelectedBlockMatrixFragment(
                    p->aStart.Col(), p->aStart.Row(), p->aEnd.Col(), p->aEnd.Row(), rMark) )
                    r.aStart.Col(), r.aStart.Row(), r.aEnd.Col(), r.aEnd.Row(), rMark) )
                {
                    if (!bApi)
                        ErrorMessage(STR_MATRIXFRAGMENTERR);
                    return false;
                }

                SCCOL nColDelta = p->aStart.Col() - nPrevCol;
                SCROW nRowDelta = p->aStart.Row() - nPrevRow;
                SCCOL nColDelta = r.aStart.Col() - nPrevCol;
                SCROW nRowDelta = r.aStart.Row() - nPrevRow;

                if ((nColDelta && nRowDelta) || (nPrevColDelta && nRowDelta) || (nPrevRowDelta && nColDelta))
                {
@@ -339,8 +338,8 @@ bool ScViewFunc::CopyToClip( ScDocument* pClipDoc, const ScRangeList& rRanges, b
                        aClipParam.meDirection = ScClipParam::Row;
                }

                SCCOL nColSize = p->aEnd.Col() - p->aStart.Col() + 1;
                SCROW nRowSize = p->aEnd.Row() - p->aStart.Row() + 1;
                SCCOL nColSize = r.aEnd.Col() - r.aStart.Col() + 1;
                SCROW nRowSize = r.aEnd.Row() - r.aStart.Row() + 1;

                if (aClipParam.meDirection == ScClipParam::Column && nRowSize != nPrevRowSize)
                {
@@ -356,8 +355,8 @@ bool ScViewFunc::CopyToClip( ScDocument* pClipDoc, const ScRangeList& rRanges, b
                    break;
                }

                nPrevCol = p->aStart.Col();
                nPrevRow = p->aStart.Row();
                nPrevCol = r.aStart.Col();
                nPrevRow = r.aStart.Row();
                nPrevColDelta = nColDelta;
                nPrevRowDelta = nRowDelta;
                nPrevColSize  = nColSize;
@@ -831,7 +830,7 @@ bool checkDestRangeForOverwrite(const ScRangeList& rDestRanges, const ScDocument
    {
        for (size_t i = 0; i < nRangeSize && bIsEmpty; ++i)
        {
            const ScRange& rRange = *rDestRanges[i];
            const ScRange& rRange = rDestRanges[i];
            bIsEmpty = pDoc->IsBlockEmpty(
                *itrTab, rRange.aStart.Col(), rRange.aStart.Row(),
                rRange.aEnd.Col(), rRange.aEnd.Row());
@@ -1018,8 +1017,8 @@ bool ScViewFunc::PasteFromClip( InsertDeleteFlags nFlags, ScDocument* pClipDoc,
        size_t ListSize = aRangeList.size();
        for ( size_t i = 0; i < ListSize; ++i )
        {
            ScRange* p = aRangeList[i];
            nUnfilteredRows += p->aEnd.Row() - p->aStart.Row() + 1;
            ScRange & r = aRangeList[i];
            nUnfilteredRows += r.aEnd.Row() - r.aStart.Row() + 1;
        }
#if 0
        /* This isn't needed but could be a desired restriction. */
@@ -1141,8 +1140,7 @@ bool ScViewFunc::PasteFromClip( InsertDeleteFlags nFlags, ScDocument* pClipDoc,
                                SC_MOD()->GetInputOptions().GetReplaceCellsWarn();
        if ( bAskIfNotEmpty )
        {
            ScRangeList aTestRanges;
            aTestRanges.Append(aUserRange);
            ScRangeList aTestRanges(aUserRange);
            vcl::Window* pWin = GetViewData().GetDialogParent();
            if (!checkDestRangeForOverwrite(aTestRanges, pDoc, aFilteredMark, pWin ? pWin->GetFrameWeld() : nullptr))
                return false;
@@ -1510,8 +1508,7 @@ bool ScViewFunc::PasteMultiRangesFromClip(

    if (bAskIfNotEmpty)
    {
        ScRangeList aTestRanges;
        aTestRanges.Append(aMarkedRange);
        ScRangeList aTestRanges(aMarkedRange);
        vcl::Window* pWin = GetViewData().GetDialogParent();
        if (!checkDestRangeForOverwrite(aTestRanges, pDoc, aMark, pWin ? pWin->GetFrameWeld() : nullptr))
            return false;
@@ -1688,7 +1685,7 @@ bool ScViewFunc::PasteFromClipToMultiRanges(
        for (size_t i = 0, n = aRanges.size(); i < n; ++i)
        {
            pDoc->CopyToDocument(
                *aRanges[i], nUndoFlags, false, *pUndoDoc, &aMark);
                aRanges[i], nUndoFlags, false, *pUndoDoc, &aMark);
        }
    }

@@ -1702,7 +1699,7 @@ bool ScViewFunc::PasteFromClipToMultiRanges(
            for (size_t i = 0, n = aRanges.size(); i < n; ++i)
            {
                pDoc->CopyToDocument(
                    *aRanges[i], InsertDeleteFlags::CONTENTS, false, *pMixDoc, &aMark);
                    aRanges[i], InsertDeleteFlags::CONTENTS, false, *pMixDoc, &aMark);
            }
        }
    }
@@ -1716,14 +1713,14 @@ bool ScViewFunc::PasteFromClipToMultiRanges(
    for (size_t i = 0, n = aRanges.size(); i < n; ++i)
    {
        pDoc->CopyFromClip(
            *aRanges[i], aMark, (nFlags & ~InsertDeleteFlags::OBJECTS), nullptr, pClipDoc,
            aRanges[i], aMark, (nFlags & ~InsertDeleteFlags::OBJECTS), nullptr, pClipDoc,
            false, false, true, bSkipEmpty);
    }

    if (pMixDoc.get())
    {
        for (size_t i = 0, n = aRanges.size(); i < n; ++i)
            pDoc->MixDocument(*aRanges[i], nFunction, bSkipEmpty, pMixDoc.get());
            pDoc->MixDocument(aRanges[i], nFunction, bSkipEmpty, pMixDoc.get());
    }

    AdjustBlockHeight();            // update row heights before pasting objects
@@ -1734,7 +1731,7 @@ bool ScViewFunc::PasteFromClipToMultiRanges(
        for (size_t i = 0, n = aRanges.size(); i < n; ++i)
        {
            pDoc->CopyFromClip(
                *aRanges[i], aMark, InsertDeleteFlags::OBJECTS, nullptr, pClipDoc,
                aRanges[i], aMark, InsertDeleteFlags::OBJECTS, nullptr, pClipDoc,
                false, false, true, bSkipEmpty);
        }
    }
@@ -1790,14 +1787,14 @@ void ScViewFunc::PostPasteFromClip(const ScRangeList& rPasteRanges, const ScMark
    ScRangeList aChangeRanges;
    for (size_t i = 0, n = rPasteRanges.size(); i < n; ++i)
    {
        const ScRange& r = *rPasteRanges[i];
        const ScRange& r = rPasteRanges[i];
        ScMarkData::const_iterator itr = rMark.begin(), itrEnd = rMark.end();
        for (; itr != itrEnd; ++itr)
        {
            ScRange aChangeRange(r);
            aChangeRange.aStart.SetTab(*itr);
            aChangeRange.aEnd.SetTab(*itr);
            aChangeRanges.Append(aChangeRange);
            aChangeRanges.push_back(aChangeRange);
        }
    }
    HelperNotifyChanges::Notify(*pModelObj, aChangeRanges);
diff --git a/sc/source/ui/view/viewfun4.cxx b/sc/source/ui/view/viewfun4.cxx
index 78bdd8e..498da89 100644
--- a/sc/source/ui/view/viewfun4.cxx
+++ b/sc/source/ui/view/viewfun4.cxx
@@ -239,7 +239,7 @@ void ScViewFunc::DoRefConversion()
        SCTAB i = *itr;
        for (size_t j = 0; j < nCount; ++j)
        {
            ScRange aRange = *(*xRanges)[j];
            ScRange aRange = (*xRanges)[j];
            aRange.aStart.SetTab(i);
            aRange.aEnd.SetTab(i);
            ScCellIterator aIter( pDoc, aRange );
diff --git a/sc/source/ui/view/viewfun6.cxx b/sc/source/ui/view/viewfun6.cxx
index 6e13f26..ffe5035 100644
--- a/sc/source/ui/view/viewfun6.cxx
+++ b/sc/source/ui/view/viewfun6.cxx
@@ -128,25 +128,24 @@ void ScViewFunc::MarkAndJumpToRanges(const ScRangeList& rRanges)
    size_t ListSize = aRanges.size();
    for ( size_t i = 0; i < ListSize; ++i )
    {
        const ScRange* p = aRanges[i];
        const ScRange & r = aRanges[i];
        // Collect only those ranges that are on the same sheet as the current
        // cursor.
        if (p->aStart.Tab() == aCurPos.Tab())
            aRangesToMark.Append(*p);
        if (r.aStart.Tab() == aCurPos.Tab())
            aRangesToMark.push_back(r);
    }

    if (aRangesToMark.empty())
        return;

    // Jump to the first range of all precedent ranges.
    const ScRange* p = aRangesToMark.front();
    lcl_jumpToRange(*p, &rView, &pDocSh->GetDocument());
    const ScRange & r = aRangesToMark.front();
    lcl_jumpToRange(r, &rView, &pDocSh->GetDocument());

    ListSize = aRangesToMark.size();
    for ( size_t i = 0; i < ListSize; ++i )
    {
        p = aRangesToMark[i];
        MarkRange(*p, false, true);
        MarkRange(aRangesToMark[i], false, true);
    }
}

@@ -161,7 +160,7 @@ void ScViewFunc::DetectiveMarkPred()
    if (rMarkData.IsMarked() || rMarkData.IsMultiMarked())
        rMarkData.FillRangeListWithMarks(&aRanges, false);
    else
        aRanges.Append(aCurPos);
        aRanges.push_back(aCurPos);

    vector<ScTokenRef> aRefTokens;
    pDocSh->GetDocFunc().DetectiveCollectAllPreds(aRanges, aRefTokens);
@@ -225,7 +224,7 @@ void ScViewFunc::DetectiveMarkSucc()
    if (rMarkData.IsMarked() || rMarkData.IsMultiMarked())
        rMarkData.FillRangeListWithMarks(&aRanges, false);
    else
        aRanges.Append(aCurPos);
        aRanges.push_back(aCurPos);

    vector<ScTokenRef> aRefTokens;
    pDocSh->GetDocFunc().DetectiveCollectAllSuccs(aRanges, aRefTokens);
diff --git a/sc/source/ui/view/viewfunc.cxx b/sc/source/ui/view/viewfunc.cxx
index bd21e08..8e516e3 100644
--- a/sc/source/ui/view/viewfunc.cxx
+++ b/sc/source/ui/view/viewfunc.cxx
@@ -324,7 +324,7 @@ namespace HelperNotifyChanges
            ScRangeList aChangeRanges;
            ScMarkData::iterator itr = rMark.begin(), itrEnd = rMark.end();
            for (; itr != itrEnd; ++itr)
                aChangeRanges.Append( ScRange( nCol, nRow, *itr ) );
                aChangeRanges.push_back( ScRange( nCol, nRow, *itr ) );

            HelperNotifyChanges::Notify(*pModelObj, aChangeRanges, "cell-change");
        }
@@ -1162,7 +1162,7 @@ void ScViewFunc::ApplySelectionPattern( const ScPatternAttr& rAttr, bool bCursor
            ScRange aChangeRange( aMarkRange );
            aChangeRange.aStart.SetTab( *itr );
            aChangeRange.aEnd.SetTab( *itr );
            aChangeRanges.Append( aChangeRange );
            aChangeRanges.push_back( aChangeRange );
        }

        SCCOL nStartCol = aMarkRange.aStart.Col();
@@ -1225,7 +1225,7 @@ void ScViewFunc::ApplySelectionPattern( const ScPatternAttr& rAttr, bool bCursor
            pNewEditData = pEditObj->Clone();
        }

        aChangeRanges.Append(aPos);
        aChangeRanges.push_back(aPos);
        std::unique_ptr<ScPatternAttr> pOldPat(new ScPatternAttr(*rDoc.GetPattern( nCol, nRow, nTab )));

        rDoc.ApplyPattern( nCol, nRow, nTab, rAttr );
@@ -1965,7 +1965,7 @@ void ScViewFunc::DeleteContents( InsertDeleteFlags nFlags )
        ScRangeList aChangeRanges;
        if ( bSimple )
        {
            aChangeRanges.Append( aMarkRange );
            aChangeRanges.push_back( aMarkRange );
        }
        else
        {
@@ -2291,7 +2291,7 @@ void ScViewFunc::SetWidthOrHeight(
                    SCCOL nEndCol   = rRange.mnEnd;
                    for ( SCCOL nCol = nStartCol; nCol <= nEndCol; ++nCol )
                    {
                        aChangeRanges.Append( ScRange( nCol, 0, nTab ) );
                        aChangeRanges.push_back( ScRange( nCol, 0, nTab ) );
                    }
                }
            }