Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabellen (formatiert) über VBA auswählen

Forumthread: Tabellen (formatiert) über VBA auswählen

Tabellen (formatiert) über VBA auswählen
17.05.2024 10:40:53
FelixS.
Guten Tag,
Ich arbeite in einem Ingenieurbüro und bin vor kurzen in Excel und VBA Programmierung eingestiegen. Hierbei stoße ich immer wieder auf eine bestimmte Problematik.
Für Rechnungen muss ich immer wieder auf verschiedenen Tabellen zugreifen. Dafür habe ich Bereich als Tabelle Formatiert (mit Namen) umso auf deren Bereiche wie z.B. Kopfzeile zuzugreifen. Allerdings klappt es nicht mit VBA auf diese Bereiche zuzugreifen. Besonders wenn der Tabellenname über eine Eingabe Zelle eingeben wird.

Hier vielleicht ein Beispiel:
Diese Funktion habe ich geschrieben und sie funktioniert auch
Guten Tag,
Ich arbeite in einen Ingeneurbüro und bin vor kurzen in Excel und VBA Programierung eingestiegen. Hierbei Stoße ich immer wieder auf eine bestimmte Proplematik.
Für rechnungen muss ich immer wieder auf verschidenen Tabellen zugreifen. Dafür habe ich bereich als Tabelle Formatiert (mit Namen) um so auf deren Bereiche wie z.B. Kopfzeile zuzugreifen. Allerdings klappt es nicht mit VBA auf diese Bereiche zuzugreifen. Besonders wenn der Tabellenname über eine eingabe Zelle eingeben wird.

Hier vieleicht ein Beispiel:
Diese Funktion habe ich geschrieben und sie funktioniert auch

Public Function TabellenSuche(Suchkriterium_Vertikal, Suchkriterium_Horizontal As String, Tabelle As Range)

'sucht aus einer Tabelle einen Wert heraus'
'Spaltensuche'
Dim Spalte1, wert
Dim myTable As ListObject
Dim myTableName As String

Set myTable = Tabelle.ListObject
myTableName = myTable.Name

wert = Range(myTableName & "[#Headers]")

Spalte1 = WorksheetFunction.Match(Suchkriterium_Horizontal, wert, 0)

'Wertsuche'
TabellenSuche = WorksheetFunction.VLookup(Suchkriterium_Vertikal, Tabelle, Spalte1, False)
End Function

Jetzt möchte ich das der Name der Tabelle und das Suchkriterium Vertikal aus einer Zelle ausgelesen wird und ich nur noch das Suchkriterium Vertikal als Variable eingeben muss.
Hier mal mein Versuch der leider nicht Funktioniert


Public Function Profil(Suchkriterium_Horizontal)

'sucht aus einer Tabelle einen Wert heraus'
'Spaltensuche'
Dim Spalte1, wert, Tabelle As Range, Tabelle1 As String, Suchkriterium_Vertikal
Dim myTable As ListObject
Dim myTableName As String

Tabelle1 = Range("A2")
Suchkriterium_Vertikal = Range("A5")
Tabelle = Range("HEA")

Set myTable = Tabelle.ListObject
myTableName = myTable.Name

wert = Range(myTableName & "[#Headers]")

Spalte1 = WorksheetFunction.Match(Suchkriterium_Horizontal, wert, 0)
End Function

'Wertsuche'
Profil = WorksheetFunction.VLookup(Suchkriterium_Vertikal, Tabelle, Spalte1, False)
End Function


Ich wäre sehr dankbar, wenn ihr ein paar Tipps habt. Speziell für diese Funktion aber auch wie ich generell Tabellen besser auslesen kann?
Vielen dank
Anzeige

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellen (formatiert) über VBA auswählen
17.05.2024 10:55:13
Oberschlumpf
Hi,

weil du dich in VBA noch fast gar nicht auskennst, würd ich dir empfehlen:

Zeig uns bitte per Upload eine Bsp-Datei mit genügend Bsp-Daten in den jeweils richtigen Zellen in den unterschiedlichen Blättern....und natürlich die Bereiche schon als intelligente Tabellen von dir formatiert.

Und dann, mit Bezug auf deine Bsp-Datei, beschreib bitte noch mal, was du mit "Eingabezelle" meinst, und was genau wann wie wo geschehen soll.

Ich denke, so wird es insgesamt einfacher für uns, dir zu helfen, und einfacher für dich, alles oder wenigstens vieles zu verstehen.

Ciao
Thorsten
Anzeige
AW: Tabellen (formatiert) über VBA auswählen
17.05.2024 11:21:03
FelixS.
Das mach ich gerne
In der Arbeitsmappe in Tabelle1 habe ich die Querschnittswerte verschiedener Stahlprofile in Tabellen formatiert. Die einzelnen Tabellen tragen den Namen des Profils. Dieser Name ist über ein Dropdown Menü in „Tabelle2“ auswählbar. Der genaue Querschnitt ist hier auch über ein Dropdown auswählbar (beide Gelb Hinterlegt) das sind meine Eingabezellen (Tabelle und Suchkriterium Vertikal).
Nun möchte ich mit der Funktion =Profil(Suchkriterium Horizontal) den Querschnittswert z.B. h[mm] für das eingestellte Profil ausgeben.
Vielen dank für die schnelle Antwort
https://www.herber.de/bbs/user/169530.xlsm
Anzeige
AW: Tabellen (formatiert) über VBA auswählen
17.05.2024 10:59:41
schauan
Hallöchen,

also, eigentlich fängt es schon da an:

Dim Spalte1, wert, Tabelle As Range ...
Tabelle = Range("HEA")

HEA ist eine Spaltenbezeichnung und kein Bereich. HEA1 wäre ein Bereich, oder die komplette Spalte Columns(HEA)
AW: Columns("HEA")
17.05.2024 11:00:23
schauan
...
AW: Columns("HEA")
17.05.2024 11:23:16
FelixS.
Hallo,
"HEA" ist der Name der Tabelle.
Anzeige
AW: Columns("HEA")
17.05.2024 11:41:10
schauan
Hallöchen,

man sollte keine Excel-Bezeichnungen zur Namensvergabe verwenden ...
AW: Columns("HEA")
17.05.2024 11:57:53
FelixS.
Oke ja, das kann ich verstehen. Habe die Tabelle jetzt umbenannt. Leider habe ich jetzt immer noch das Problem das der Tabellen Name in VBA nicht erkannt wird, wenn ich ihn nicht direkt als Tabelle, sondern als Text eingebe.
Anzeige
AW: Columns("HEA")
17.05.2024 12:04:27
schauan
Bin momentan nur am Handy. Ähnlich wie ich das mit den columns vorhin geschrieben habe musst Du das auch mit den Listobject machen. Wenn der Name in einer Variable ist dann z.B. was wie... Listobject(Variable) ...
AW: Columns("HEA")
17.05.2024 15:17:26
FelixS.
Ich glaube da habe ich irgendeine Lücke in den Grundlagen. Weil das immer wieder etwas ist worüber ich Stolper.
In der Excel liste kann ich mir mit „“ und der Funktion Indirekt weiterhelfen in VBA Fehlt mir das entsprechende Werkzeug um diese zu ersetzen.
Hier beispielweise wie ich es bei meiner Funktion die funktioniert eingeben würde
=TabellenSuche(Profil_11;"h[mm]";INDIREKT(Profil_1))
Aber ich schaffe es nicht das ins VBA auszulagern.
Das ist jetzt mal beispielhaft ich denke das grundlegende Problem ist das ich VBA das nicht richtig verklickern kann was da reinkommt.
Ist ein bisschen schwierig das zu beschreiben. Würde mich auf jeden Fall darüber freuen, wenn du es schaffst einmal genauer rüber zu schauen und mir ein paar Tipps geben kannst. Auch über Hilfe zur Selbsthilfe, lese Tipps oder ähnliches würde ich mich freuen.
Ich starte jetzt erstmal ins Wochenende und Wünsche dir auch erstmal ein paar schöne freie Tage.
Anzeige
AW: Columns("HEA")
17.05.2024 19:05:54
schauan
Hallöchen,

also, ich habe Deine Tabellen mal umbenannt und allen Tab_ vorangestellt, also z.B. Tab_HEA usw.
Ein Code könnte dann so aussehen. Ich habe die Funktion hier mal per Sub aufgerufen. A2 ist hier auch fest programmiert, A5 hab ich in den Funktionsaufruf als weitere Optionen eingebunden. Hat was mit der Neuberechnung zu tun, wenn ich A5 ändere ... Die erste Formel wäre dann =Profil(B4;$A5) und dann rüber ziehen.

Public Function Profil(Suchkriterium_Horizontal, Suchkriterium_Vertikal)

'sucht aus einer Tabelle einen Wert heraus'
'Spaltensuche'
Dim Zeile1&, Spalte1%, strTabelle1 As String
Dim myTable As ListObject, iCnt%
'Tabellenname aus A2 holen
strTabelle1 = Range("A2").Value
'Tabellenobjekt uebernehmen
Set myTable = Sheets("Tabelle1").ListObjects(strTabelle1)
'Zeile im Tabellenobjekt suchen
Zeile1 = Application.Match(Suchkriterium_Vertikal, myTable.ListColumns(1).DataBodyRange)
'Spalte im Tabellenobjekt suchen - Spaltenbezeichner mit eckigen Klammern fuehren zu
'internem Fehler und koennen nicht verwendet werden
For iCnt = 1 To myTable.HeaderRowRange.Count
If myTable.HeaderRowRange(iCnt) = Suchkriterium_Horizontal Then Spalte1 = iCnt: Exit For
Next
'Inhalt aus Spalte in der gefundenen Zeile des Tabellenobjekts holen
Profil = myTable.ListColumns(Spalte1).DataBodyRange(Zeile1).Value 'Range(myTable & "[#Headers]")
End Function

Sub test()
MsgBox Profil("G[kg/m]")
End Sub

Anzeige
AW: Columns("HEA")
21.05.2024 09:30:42
FelixS.
Guten Morgen Schauan,
Super vielen Dank. so Funktioniert es.
Ich hätte noch ein paar Verständnisfragen, wenn du die mir beantworten kannst bin ich restlos glücklich:
Wofür sind % und & hinter den Variablen Namen?
Worin besteht der unterschied von Application.Match und WorksheetFunction.Match?
Anzeige
AW: Columns("HEA")
21.05.2024 09:42:18
FelixS.
Oke ein kleines Problem habe ich doch noch.
Jetzt ist meine Eingabe =Profil("tw[mm]") ich würde allerdings gerne die „“ weglassen. Ist es möglich die Übergabe so zu programmieren?
Danke noch mal für die Hilfe
AW: Columns("HEA")
21.05.2024 12:43:14
Piet
Hallo

die " Zeichen könnte man mit Replace löschen, aber der Suchlauf wird nicht funktionieren!
Mit der geänderten Angabe finde ich nur die Überschriftzelle!
Dahinter kommen aber ellenlange Datenangaben. Was soll der Suchlauf dann zurückgeben???

Wenn du mir schilderst, was du konkret damit suchen willst, fällt mir vielleicht eine Lösung dazu ein.

mfg Piet
Anzeige
AW: Columns("HEA")
18.05.2024 13:02:04
Piet
Hallo

ich habe auch eine simpel Lösung im Angebot. In Zelle A5 Stahlprofil eingeben, das ist alles!
Man kann das Makro über den Button auslösen. Es wird auch über die Eingabe ausgelöst!
https://www.herber.de/bbs/user/169553.xls

mfg Piet
Anzeige
AW: Columns("HEA")
21.05.2024 09:33:17
FelixS.
Guten Morgen Piet,
Leider darf ich hier in der Firma keine fremden Excel listen mit Makros öffnen.
Trotzdem bin ich an deiner Lösung Interessiert. Kannst du mir dein Code zuschicken?
AW: Columns("HEA")
21.05.2024 14:05:18
schauan
Hallöchen,

die Anführungszeichen müssen sein - die Funktion möchte einen String.
% ist eine Abkürzung für Integer, $ für String
Bei Application.Match wird Dir bei Fehler ein Fehlerwert zurückgegeben, bei Worksheetfunction gibt's einen Laufzeitfehler und der code hält an.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige