Telefonszámunk: 1-472-0679

Cells(r,c) függvény

Kezdőlap Fórumok Excel programozás Cells(r,c) függvény

4 bejegyzés megtekintése - 1-4 / 4
  • Szerző
    Bejegyzés
  • #2103
    Titok
    Felhasználó

      Sziasztok!

      Mi lehet a baj?

      Bementi értékek i=2, oszl=1

      Do

      el = i & „,” & oszl
      elso = Cells(el).Value
      mas = (i + 1) & „,” & oszl
      masik = Cells(mas).Value
      i = i + 1

      Loop Until elso <> masik
      Elvileg ugye A2 és A3 cellák értékét hasonlítána össze első lépésben. Ehelyett a fejlécben (B1 és C1) vizsgálódik.
      Én nem értem.
      Ráadásul, ha átírom így, akkor működik:

      Do
      sork = strOszl & i
      Range(sork).Select
      elso = ActiveCell

      sork2 = strOszl & i + 1
      Range(sork2).Select
      masik = ActiveCell

      i = i + 1
      Loop Until elso <> masik

      Szóval van megoldásom, csak nem értem, miért nem működik az első megoldás (ami elegánsabb is lenne)? Vagy ez valami beépített modul, hogy júl 1-én fordítva működjön?
      (Ha megfordítom R és C értékét, akkor is pont úgy megy, mintha nem lenne megfordítva, amit szintén nem értek…)

      #2104
      horvimi
      Adminisztrátor

        Szia!

        Szerintem ilyet nem lehet csinálni. Az összefűzéskor egy string jön létre a „2,1” tartalommal.
        ha ezt átadod a Cells függvénynek, akkor az ennyiedik cellát próbálja meghivatkozni. Ez nem lehet sztring.A megfordítás esetén pont ugyanez a baj, tehát úgy sem fog menni.
        Nekem az a furcsa, hogy miért nem fut hibára?

        Ha jól látom, valami olyasmit szeretnél, érzékelni, hogy mikor van egy oszlopban egymás alatt két egyforma érték. Ez egy működő megoldás lehet:

        Sub megoldas()
            sor = 2
            oszl = 1
            
            
            Do
                akt = Cells(sor, oszl).Value
                kov = Cells(sor + 1, oszl).Value
                sor = sor + 1
            Loop Until akt = kov
        End Sub
        

        Több megoldás is lehet erre, akár sokkal elegánsabb is. Az a kérdés, hogy miután érzékelted az egyezést, mit szeretnél tovább csinálni.

        A Te második megoldásodat, ami működik ugyan, nem javasolnám a select-ek miatt. Hacsak nem pont ez a folyamat lényege. Select elég a végén is, amikor megvan a pozíció.

        imre

        #2105
        Titok
        Felhasználó

          Szia!

          Köszi, ez így tényleg tök jó. Közben megcsináltam másként, ide rakom az egészet:
          (Valamelyik oszlopban lévő értékek szerint szed szét egy fájlt több darabra)

          Sub új_oszlop_szerint()

          Dim wb, neva, el, mas, oszl As String

          fej = InputBox(„Hány sornyi a táblázatod fejléce?”, „Fejléc megadása”, „1”)
          neva = InputBox(„Milyen néven mentsem a fájlokat?”, „Fájlnév megadása”, „Darabolt”)
          oszl = InputBox(„Melyik oszlop szerint válogassak? (Nagy betűvel add meg!)”, „Oszlop megadása”, „A”)

          kulcs = oszl & (fej + 1)
          Sheets(„Alap”).Select
          Cells.Select
          ActiveWorkbook.Worksheets(„Alap”).Sort.SortFields.Clear
          ActiveWorkbook.Worksheets(„Alap”).Sort.SortFields.Add Key:=Range(kulcs), _
          SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
          Cells.Select
          With ActiveWorkbook.Worksheets(„Alap”).Sort
          .SetRange ActiveCell.CurrentRegion
          .Header = xlYes
          .MatchCase = False
          .Orientation = xlTopToBottom
          .SortMethod = xlPinYin
          .Apply
          End With

          kezd = fej + 1
          fejsor = 1 & „:” & fej
          beill = kezd & „:” & kezd

          Sheets(„Alap”).Select
          Rows(fejsor).Select
          Selection.Copy
          Sheets(„Segéd”).Select
          Rows(fejsor).Select
          ActiveSheet.Paste
          Sheets(„Alap”).Select

          Do
          Sheets(„Alap”).Select
          i = kezd

          Do

          el = oszl & i
          elso = Range(el).Value
          mas = oszl & i + 1
          masik = Range(mas).Value
          i = i + 1

          Loop Until elso <> masik

          ‘kezd most még az eredeti érték
          vege = i
          masol = kezd & „:” & vege – 1

          Sheets(„Alap”).Select
          Rows(masol).Select
          Application.CutCopyMode = False
          Selection.Copy
          Sheets(„Segéd”).Select
          Rows(beill).Select
          ActiveSheet.Paste
          ‘hozzáigazítjuk a tartalomhoz
          Cells.Select
          Cells.EntireColumn.AutoFit

          ‘átmásoljuk új lapra ée lementjük:
          wb = ActiveWorkbook.Path
          Sheets(„Segéd”).Select
          Sheets(„Segéd”).Copy

          wb = wb & „\” & neva & ” ” & elso & „.xls”
          ActiveWorkbook.SaveAs wb
          ActiveWindow.Close

          ‘fejsort kivéve kitöröljük az adatokat
          torol = (fej + 1) & „:” & vege
          Sheets(„Segéd”).Select
          Rows(torol).Select
          Selection.ClearContents

          kezd = i

          Loop Until masik = „”

          Sheets(„Segéd”).Select
          Rows(fejsor).Select
          Selection.ClearContents

          Sheets(„Vezérlő”).Select

          End Sub

          #2106
          horvimi
          Adminisztrátor

            Örülök, hogy sikerült.
            Erre a feladatra is van több megoldás, a makrótanfolyamon mindig megcsináljuk.

            A rendezés utáni változás érzékelés, amit te csináltál, az is jó lehet.

            A programodat kicsit érdemes lenne struktúrálni, illetve olvashatóbbá tenni, csak a saját érdekedben.
            De ez nem ide való téma.

            imre

          4 bejegyzés megtekintése - 1-4 / 4
          • Be kell jelentkezni a hozzászóláshoz.