Kezdőlap › Fórumok › Excel programozás › Cells(r,c) függvény
- This topic has 3 hozzászólás, 2 résztvevő, and was last updated 9 years, 5 months telt el by horvimi.
-
SzerzőBejegyzés
-
2015-07-01-12:53 #2103
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 + 1Loop 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 = ActiveCellsork2 = strOszl & i + 1
Range(sork2).Select
masik = ActiveCelli = i + 1
Loop Until elso <> masikSzó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…)2015-07-01-15:12 #2104Szia!
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
2015-07-01-15:20 #2105Szia!
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 Withkezd = fej + 1
fejsor = 1 & „:” & fej
beill = kezd & „:” & kezdSheets(„Alap”).Select
Rows(fejsor).Select
Selection.Copy
Sheets(„Segéd”).Select
Rows(fejsor).Select
ActiveSheet.Paste
Sheets(„Alap”).SelectDo
Sheets(„Alap”).Select
i = kezdDo
el = oszl & i
elso = Range(el).Value
mas = oszl & i + 1
masik = Range(mas).Value
i = i + 1Loop Until elso <> masik
‘kezd most még az eredeti érték
vege = i
masol = kezd & „:” & vege – 1Sheets(„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”).Copywb = 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.ClearContentskezd = i
Loop Until masik = „”
Sheets(„Segéd”).Select
Rows(fejsor).Select
Selection.ClearContentsSheets(„Vezérlő”).Select
End Sub
2015-07-01-15:27 #2106Ö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
-
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.