Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

An alle Offset-Verliebten | Herbers Excel-Forum


Betrifft: An alle Offset-Verliebten von: Christian
Geschrieben am: 17.11.2009 21:48:50

Hallo Forum,
irgendwie kann ich mich dem Eindruck nicht erwehren, dass hier im Forum die Offset-Methode an Beliebtheit gewinnt. Wenn man schon Werte aus einzelnen Zellen einlesen muss, warum tritt man dann erst mal gezielt daneben um anschließend mit "Offset" das eigentliche Ziel zu treffen...?

hier zwei Beispiele, die bei mir auf allen Rechnern ca. 10% Differenz ausmachen...

Sub TestOffset()
    Dim i&, t!
    
    Cells.Clear
    t = Timer
    For i = 1 To 30000
        Cells(i, 1).Offset(, 4) = i
    Next
    MsgBox Timer - t
    
End Sub


Sub TestNoOffset()
    Dim i&, t!
    
    Cells.Clear
    t = Timer
    For i = 1 To 30000
        Cells(i, 5) = i
    Next
    MsgBox Timer - t
End Sub
Feed back ist willkommen - Gruß Christian

  

Betrifft: AW: An alle Offset-Verliebten von: F1
Geschrieben am: 17.11.2009 21:54:42

Das Beispiel ist sinnfrei.

F1


  

Betrifft: AW: An alle Offset-Verliebten von: Christian
Geschrieben am: 17.11.2009 21:59:08

hi,
'ne Erkärung wäre hier ja hilfreich, F1...
Christian


  

Betrifft: AW: An alle Offset-Verliebten von: Tino
Geschrieben am: 17.11.2009 22:19:03

Hallo,
offset geht man um Daten von oder aus einer anderen Zelle zu bekommen.
zBsp. sucht man in Spalte A nach einem Wort und will die Daten aus Spalte B dazu.

Gruß Tino


  

Betrifft: auch schreiben in andere Zelle ist möglich. oT. von: Tino
Geschrieben am: 17.11.2009 22:31:55




  

Betrifft: AW: An alle Offset-Verliebten von: Daniel
Geschrieben am: 18.11.2009 00:41:29

Hi

mit Offset arbeitet man, wenn man eine Zelle über die FIND-Funktion, mit .End(xl...) , oder sonstwie ermittelt hat und jetzt eine Zelle bearbeiten will, die zu dieser Zelle einen bestimmten Abstand hat.
man hat zwar die Zelle, aber die genaue Position (Zeile, Spalte) ist nicht bekannt und müsste erst über die .Row oder .Column-Funktion ermittelt werden.
Da ist es dann bequemer und einfacher, die Offset-Funktion zu verwenden.

hier mal ein Beispiel, es soll zu einer Kundennummer eine neue Telefonnummer, die in der 3. Spalte rechts von der Kundennummer steht, eingetragen werden:

Cells.Find(What:="111-111").Offset(0,3).Value = "555-12345678"

ist einfacher als:

Cells(Cells.Find(what:="111-111").row, Cells.Find(what:="111-111").Column+3).Value ) = "555-12345678"

in zeitkritischen Schleifen würde ich sowieso ganz anders vorgehen.

Gruß, Daniel


  

Betrifft: AW: An alle Offset-Verliebten von: Christian
Geschrieben am: 18.11.2009 18:57:48

Hallo Daniel,
in deinem Bsp zeigst du ja, wie Offset vernünftig angewendet werden kann.
Ich hab auch nichts gegen Offset an sich, aber man sieht eben auch immer wieder Code wie z.Bsp:

Me.TextBox1 = .Cells(Zelle, 1).Offset(0, 1)
Me.TextBox2 = .Cells(Zelle, 1).Offset(0, 2)
Me.TextBox3 = .Cells(Zelle, 1).Offset(0, 3)
....
Me.TextBox13 = .Cells(Zelle, 1).Offset(0, 13)
....

Ja, ich weiß, auch hier kann nicht nur auf Offset verzichten, sondern das Thema ganz anders angehen.
Mit dem Beitrag wollte ich nur darauf hinweisen, dass man in solchen Konstellationen alleine mit Offset 10% Performance einbüßt.

Grüße
Christian