Stránka 1 z 1

Excel-VBA : Porovnavani cisel s rozdilnymi formaty  Vyřešeno

Napsal: 10 říj 2011 11:49
od Adalbert
Dobry den,

soucasti meho makra je i cast porovnavajici (na shodnost) cisla, ktera jsou ovsem v ruznych formatech.
Zatimco v jednom sloupci jsou cisla ve formatu 'obecny', druhy sloupec cisel je ve formatu 'vlastni'.
Format 'vlastni' v druhem sloupci je dan tim, ze tyto data byly sbirany rucne a jelikoz byly zadavany cisla ktera maji vzdy stejny prefix, doplnovali se pouze posledni tri řády cisel a 8 mistny prefix se doplnil automaticky.

Pro nazornost prikladam priklad.
Pozadovanym vysledkem je, aby do sloupce C:C bylo po spusteni makra zapsano 'shoda' jak by to fungovalo, kdyby cisla nebyly v rozdilnych formatech.

Kód: Vybrat vše

     Option Explicit

        Sub Srovnat()
          Dim BlkA As Range, BlkB As Range
          Dim CllA As Range, CllB As Range
          Dim frstAddr As String
          ' definovani bloku bunek na listech
          With Worksheets("List1")
            Set BlkA = .Range(("a1:a") & .Cells(.Rows.Count, "a").End(xlUp).Row)
          End With
          With Worksheets("List2")
            Set BlkB = .Range(("a1:a") & .Cells(.Rows.Count, "a").End(xlUp).Row)
          End With
          ' prochazet BlkA
          For Each CllA In BlkA.Cells
            ' prohledavat BlkB
            With BlkB
              Set CllB = .Find(CllA.Value, LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows)
              If Not CllB Is Nothing Then  ' pri shode porovnat sloupce B:B
                frstAddr = CllB.Address
                Do
                  If CllB.Offset(0, 1).Value = CllA.Offset(0, 1).Value Then  ' pri shode doplnit do sl C:C 'shoda'
                    CllB.Offset(0, 2).Value = "shoda"
                  End If
                 Set CllB = .FindNext(CllB)
                 Loop While CllB.Address <> frstAddr
               End If
            End With
          Next CllA
          ' odstranit objektove promenne
          Set CllB = Nothing
          Set CllA = Nothing
          Set BlkB = Nothing
          Set BlkA = Nothing
        End Sub

Re: Excel-VBA : Porovnavani cisel s rozdilnymi formaty

Napsal: 10 říj 2011 12:00
od d1amond
Přetypování nefunguje?

Kód: Vybrat vše

CInt(CllB.Offset(0, 1).Value)


Nestahoval jsem sešit, tak nevím jaké typy čísel se tam vyskytují, ale přetypování lze provést na libovolnou hodnotu (zde CInt > Integer), tak to zkus.

Re: Excel-VBA : Porovnavani cisel s rozdilnymi formaty

Napsal: 10 říj 2011 12:30
od Adalbert
Bohuzel konverze na Integer nepomohla. Stale bere makro v potaz cislo ve formatu v jakem bylo zapsano (posledni 3 řády) a nikoliv jako celek s prefixem.

Re: Excel-VBA : Porovnavani cisel s rozdilnymi formaty

Napsal: 13 říj 2011 13:08
od Lucinka_BUBU
Jestliže zadáváš jen poslední tři řády, tak zkus porovnat jen ty tři řády.

viz příloha

Vzorecek, co jsem tam vložila je jen pro ukázku, nebude fungovat na prvních 99 čísel.