Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1792to1796
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

Tabelle auslesen

Tabelle auslesen
11.11.2020 09:38:15
Lizzel
Hallo und Guten Morgen zusammen,
ich habe eine Function, die mir anzeigt welche Intervalle in eine Tabelle eingetragen sind. Im _ Moment bekomme ich diese nur in einer Zelle angezeigt. Wie kann ich den Code abändern, dass er mir die Werte in eine Tabelle in einem anderen Blatt überträgt?

Public Function machs(bereich As Range, Optional trenner = vbLf) As String
Dim arr As Variant
Dim out As Variant
Dim objDic As Object
Dim intI As Integer
Dim lngL As Long
arr = bereich
Set objDic = CreateObject("Scripting.Dictionary")
For intI = LBound(arr, 2) To UBound(arr, 2)
For lngL = LBound(arr, 1) To UBound(arr, 1)
objDic(arr(lngL, intI)) = 0
Next
Next
out = objDic.keys
QuickSort out
machs = Join(out, trenner)
End Function

Danke für eure Hilfe!
Gruß Lars

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabelle auslesen
11.11.2020 12:22:22
Matthias
Moin!
In der Codezeile hier
machs = Join(out, trenner)
verbindest du alles zu einem String. Denn String musst du vor dem Eintragen wieder trennen und das Array einmal drehen (nach dem Trennen ist es waagerecht, du brauchst es senkrecht). An der Funktion würde ich nix ändern. Falls doch dann das Join raus und den Rückgabewert ändern.
Am Einfachsten wäre wohl beim Eintragen das mit zu berücksichtigen. Könnte dann so aussehen:
Tabelle2.Range("D1:D20") = Application.Transpose(Split(machs(Range("A1:A14"), "-"), "-"))

Du musst nur aufpassen, dass du den richtigen Trenner nimmst - also den, den du auch an die Funktion übergeben hast. Zudem musst du ggf. noch die Anzahl der Zellen ermitteln. Zu kurz und es fehlt was , zu lang und es erscheinen Fehleinträge. Als workaround könnte es so aussehen;
temp = Application.Transpose(Split(machs(Range("A1:A14"), "-"), "-"))
Range("D1:D" & UBound(temp)) = temp

temp ist dabei de Rückgabewert der Funktion. Da schaust du dann, wieviele Einträge sind und erstellst daraus den Bereich, in den eingetragen wird.
VG
Anzeige
AW: Tabelle auslesen
11.11.2020 14:23:29
Lizzel
Hallo Matthias,
schonmal ein Danke für deine Hilfe, aber irgendwie komme ich damit nicht zu recht.
Wie muss ich was ersetzen?
Meine Daten liegen in "Wartungsaufgabe" E10:E und sollen dann in "Kriterien" C2:C bzw in Tabelle "Intervall" kopiert werden.
Danke!
Gruß
AW: Tabelle auslesen
11.11.2020 15:19:08
Matthias
Moin!
Der von dir gepostete Code ist ja nur die Funktion, die deinen Zellbereich verarbeitet. Dort nix ändern. Den Aufruf der Funktion musst du dir in deinem anderen Code suchen.
Da steht dann irgendwo sowas mit = machs(...
Den Bereich musst du ändern. Am einfachsten wäre, du postest den Code auch, dann könnte man da helfen.
Wenn du es selber ändern willst, dann den Bereich / Aufruf mit dem hier ersetzten.
Dim zeilen As Long
zeilen = Worksheets("Wartungsaufgabe").Cells(Worksheets("Wartungsaufgabe").Rows.Count, 5).End( _
xlUp).Row
temp = Application.Transpose(Split(machs(Worksheets("Wartungsaufgabe").Range("E1:E" & zeilen), " _
-"), "-"))
Worksheets("Kriterien").Range("C2:C" & UBound(temp) + 1) = temp
Damit wird das wie gewünscht eingetragen. Alte Werte werden damit überschrieben aber vorher der Bereich nicht gelöscht. Wenn du jetzt also nur 3 Werte einträgst und vorherh standen da 5, dann sind noch 2 alte zu sehen.
VG
Anzeige
AW: Tabelle auslesen
11.11.2020 15:24:51
Lizzel
Ahh jetzt, die Funktion habe ich gar nicht über den Code abgerufen, sondern über die Zelle.
Dann setze ich das mal so um. Danke schon einmal
AW: Tabelle auslesen
11.11.2020 15:57:32
Lizzel
Habs jetzt mal auf meine Tabellen angepasst, aber bekomme den Fehler "Laufzeitfehler 13: Typen unverträglich".
Hat das was mit der Menge an Werten zu tun, die ich zurückgebe?
Option Explicit
Public Function machs(bereich As Range, Optional trenner = vbLf) As String
Dim arr As Variant
Dim out As Variant
Dim objDic As Object
Dim intI As Integer
Dim lngL As Long
arr = bereich
Set objDic = CreateObject("Scripting.Dictionary")
For intI = LBound(arr, 2) To UBound(arr, 2)
For lngL = LBound(arr, 1) To UBound(arr, 1)
objDic(arr(lngL, intI)) = 0
Next
Next
machs = Join(out, trenner)
End Function
Sub IntervallPrüfen()
Dim zeilen As Long
Dim temp As Variant
zeilen = Worksheets("Wartungsaufgaben").Cells(Worksheets("Wartungsaufgaben").Rows.Count, 5). _
End(xlUp).Row
temp = Application.Transpose(Split(machs(Worksheets("Wartungsaufgaben").Range("E10:E" &  _
zeilen), "-"), "-"))
Worksheets("Kriterien").Range("C2:C" & UBound(temp) + 1) = temp
End Sub

Anzeige
AW: Tabelle auslesen
11.11.2020 21:09:37
Matthias
Moin!
Muss nochmal nachfragen. Du rufst die Funktion "machs" aus der Zelle auf und nicht aus einer anderen Sub oder?
Wenn ja, beschreib mal bitte, was du bspw. genau in die Zelle eingibst.
Die Ausgabe aus der Funktion soll dann in einer andere Zelle? Wenn ja, müsste man das wohl umbauen. Aus einer Zelle mit einer Formel in ein andere was schreiben ist nicht möglich (ggf. über diverse Umwege). Evtl. müsste man da eine Ereignisprozedur einbauen.
VG
AW: Tabelle auslesen
12.11.2020 07:20:46
Lizzel
Guten Morgen Matthias,
Muss nochmal nachfragen. Du rufst die Funktion "machs" aus der Zelle auf und nicht aus einer anderen Sub oder?
Das habe ich gemacht, war aber nicht das Ziel. Ziel solle es schon sein, die Function über einen Sub aufzurufen.
Gruß
Anzeige
AW: Tabelle auslesen
12.11.2020 20:57:43
Matthias
Moin!
Habe mir die Datei mal angeschaut. Du hast bei machs eine Zeile zuviel rausgelöscht. die Zuweisung an out muss drin bleiben, weil der Aufruf eine Zeile weiter (die Rückgabe in einen Fehler läuft). Damit passt dein Code dann auch. Habe noch zwei Zeilen ergänzt, damit die alten Kriterien rausgelöscht werden. Ansonsten kann es passieren, dass alte WErte noch stehen bleiben aber gar nicht in er Liste waren. Ist im COde markiert und kann bei BEdarf wieder rausgenommen werden.
Option Explicit
Public Function machs(bereich As Range, Optional trenner = vbLf) As String
Dim arr As Variant
Dim out As Variant
Dim objDic As Object
Dim intI As Integer
Dim lngL As Long
arr = bereich
Set objDic = CreateObject("Scripting.Dictionary")
For intI = LBound(arr, 2) To UBound(arr, 2)
For lngL = LBound(arr, 1) To UBound(arr, 1)
objDic(arr(lngL, intI)) = 0
Next
Next
out = objDic.keys
machs = Join(out, trenner)
End Function
Sub IntervallPrüfen()
Dim zeilen As Long
Dim temp As Variant
zeilen = Worksheets("Wartungsaufgaben").Cells(Worksheets("Wartungsaufgaben").Rows.Count, 5). _
End(xlUp).Row
temp = Application.Transpose(Split(machs(Worksheets("Wartungsaufgaben").Range("E10:E" &  _
zeilen), "-"), "-"))
'löschen der alten kriterien
zeilen = Worksheets("Kriterien").Cells(Worksheets("Kriterien").Rows.Count, 3).End(xlUp).Row
If zeilen > 1 Then Worksheets("Kriterien").Range("C2:C" & zeilen).ClearContents
'löschen fertig
Worksheets("Kriterien").Range("C2:C" & UBound(temp) + 1) = temp
End Sub
VG
Anzeige
AW: Tabelle auslesen
13.11.2020 08:13:44
Lizzel
Guten Morgen Matthias,
funktioniert fast perfekt. Er kopiert mir leider eine Leerzeile mit. Weißt du wie ich in der Function am besten ausfiltern kann?
Danke!
Gruß Lars
AW: Tabelle auslesen
13.11.2020 11:45:40
Matthias
MOin!
Ist die leere Zeile am Ende? Also hat die intelligente Tabelle (mit der farblichen Hintelegung) noch ein freies Feld am Ende? ODer ist die am Anfang bzw. mittig. Bei mir kopiert er nur die Daten.
VG
AW: Tabelle auslesen
16.11.2020 15:50:28
Lizzel
Hallo Matthias,
ich habe es jetzt ein paar Mal hin und her getestet. Die leere Zeile bekomme ich nur, wenn ich einen Filter aktiv habe, aber dann kopiert er mir auch die Überschrift mit (warum auch immmer ...).
Im regulären Betrieb passt alles.
Danke für deine Unterstützung!
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige