Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1952to1956
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Listen Nr. aus Spalte berechnen

Listen Nr. aus Spalte berechnen
27.11.2023 15:40:55
Eddie Felson
Hallo Zusammen,
ich habe in einer Excel Tabelle, etliche gleichartige Tabellen nebeneinander platziert.

Also so:

A: Spalte 1 | B: Spalte 2 | C: Spalte 3 | D: Spalte 4 | E: Spalte 5 | F: Spalte 1 | G: Spalte 2 | H: Spalte 3 | I: Spalte 4 | J: Spalte 5 | usw.

Zur Zeit hat also jede Teiltabelle 5 Spalten, was sich aber ändern kann, z.B. auf 4 Spalten und dann gilt es für alle Listen der Tabelle.

Ich möchte nun in VBA die x-Pos des Cursors abfragen und die Listen Nr. zurück erhalten.

Beispiel xAkt = 7

Die Listennr. soll mit 0 beginnen (0, 1, 2, usw.)

7 liegt innerhalb der zweiten Liste, also möchte ich eine 1 zurückbekommen. Bei xAkt =12 müßte eine 2 für die dritte Liste zurück kommen.

Mit If Then oder Select Case ist das ganz einfach zu lösen, allerdings wäre dann die maximale Listennr, immer auf die Zahl der Case Anweisungen beschränkt.

Ich vermute man kann das auch mit einer Formel ausrechnen und genau diese suche ich.

Vielleicht hatte schon mal jemand diesen Anwendungsfall oder durchschaut die Formel auf die schnelle.
Besten Dank.
Grüße

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listen Nr. aus Spalte berechnen
27.11.2023 15:45:06
onur
Poste die Datei, statt sie umständlich zu beschreiben.
Oder sollen wir auch die Lösung nur beschreiben?
AW: Listen Nr. aus Spalte berechnen
27.11.2023 16:47:58
Eddie Felson
Function ListenIndex(ByVal Spalte&, ByVal SpOffset&) As Long


Select Case Spalte

Case (SpOffset * 0) + 1 To SpOffset * 1

ListenIndex = 0

Case (SpOffset * 1) + 1 To SpOffset * 2

ListenIndex = 1

Case (SpOffset * 2) + 1 To SpOffset * 3

ListenIndex = 2

Case Else
ListenIndex = 999
MsgBox "Fehler"
End Select

End Function
Anzeige
AW: Listen Nr. aus Spalte berechnen
27.11.2023 17:18:16
Yal
Hallo Eddie,

es ist ja die Frage, was Du unter "Listenindex" verstehst.
Nehmen wir an, Du hättest den Default-Namen der Tabelle übernommen: "Tabelle1", "Tabelle2", usw.
Dann geht man durch alle Tabellen und prüft , ob die ActiveCell darin positioniert ist,
wenn ja, extrahiert man den Zahl am Ende des Namen:


Function ListenIndex(ByVal Spalte&, ByVal SpOffset&) As Long
Dim L As ListObject

For Each L In ActiveSheet.ListObjects
If Not Intersect(ActiveCell, L.DataBodyRange) Is Nothing Then
ListenIndex = RegExExtrakt(L.Name, "\d+$")
Exit Function
End If
Next
ListenIndex = -1
End Function

Function RegExExtrakt(ByVal Target, ByVal Pattern) As String
Dim R
If TypeOf Target Is Range Then Target = Target.Cells(1).Value
Set R = CreateObject("VBScript.RegExp")
R.Pattern = Pattern
On Error Resume Next
RegExExtrakt = R.Execute(Target)(0)
End Function


Alternativ:
Spalte 1-5 = 1
Spalte 6-10 = 2
usw.
also:
Function ListenIndex(ByVal Spalte As Long, byval Optional SpOffset As Long = 5) As Long

ListenIndex = Int((i - 1) / SpOffset) + 1
End Function


VG
Yal
Anzeige
AW: Listen Nr. aus Spalte berechnen
27.11.2023 18:08:22
Eddie Felson
Hallo Yal,
"es ist ja die Frage, was Du unter "Listenindex" verstehst. "

Ich habe in einem Worksheet zig gleichartige Tabellen - jede ist 5 Spalten breit

Ein x-Wert zwischen 1-5 sollte auf die erste Liste hinweisen ListenIndex = 0.
6-10 =>ListenIndex = 1
11-15 =>ListenIndex = 2

Du muß aber doch schon einigermaßen verstanden haben wovon ich rede, denn was Du gepostet hast, war ja schon beinahe die Lösung.
Das die gesuchte Formel so einfach ist, schockiert mich jetzt etwas.

Vielen Dank für Deine Mühe.

Korrekturen:
i = Spalte
+ 1 entfällt, weil ich bei ListenIndex = 0 anfange

Function ListenIndex(ByVal Spalte As Long, byval Optional SpOffset As Long = 5) As Long

ListenIndex = Int((Spalte - 1) / SpOffset)
End Function

Anzeige
AW: Listen Nr. aus Spalte berechnen
27.11.2023 18:25:27
Yal
Hallo Eddie,

man versteht irgendwie immer irgendwas. Aber ob das genau trifft, was gemeint ist, ist ungewiss. Dass der Index mit 0 anfängt, zum Beipsiel, hatte ich übersehen. Dass die Lösung "einfach" ist, liegt an der einfachen, hinterliegenden Regel: ist eine Regel vorhanden, kann man programmieren.

Ansonsten arbeitet man üblicherweise mit den Namen der ListObject (in Excel "Tabelle" benannt, nicht mit "Blatt" verwechseln). Zwecks Stabilität hätte ich vorgeschlagen, diese Tabellen mit einem Muster zu benennen: tbl_0, tbl_1, tbl_2, ... tbl_21. Dann wäre es ein leichte Spiel gewesen daraus den Nummer zu extrahieren:

Function ListenIndex() As Long

Dim L As ListObject

For Each L In ActiveSheet.ListObjects
If Not Intersect(ActiveCell, L.DataBodyRange) Is Nothing Then
ListenIndex = CLng(Split(L.Name, "_")(1))
Exit Function
End If
Next
ListenIndex = -1
End Function


VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige