Umformung einer Datentabelle
#1
Moin ihr Lieben Menschen,

ich bin momentan ein wenig am Verzweifeln. Ich habe ein Problem und bin mir sicher, dass es durch eine gar nicht sooo schwierige Kombination von Befehlen zu lösen ist - nur komme ich nicht so ganz auf die passende Kombi...

Es geht um Folgendes: 

Ich habe eine Liste mit Bohrungen, in der ich für jede angetroffene Schicht eine eigene Zeile habe. Die Schichten gleichen sich in der Abfolge, unterscheiden sich jedoch in der entsprechenden Tiefe. Zu jeder Zeile gehören verschiedene Spalten, beispielsweise "Bohrungsname", "Höhe der Geländeoberkante", "Tiefe der Oberkante der Schicht" und eben auch die "Höhe der jeweiligen Schichtoberkante in m über Normal Null" (=Geländehöhe abzüglich der Tiefe des Antreffens der Schicht). Es gibt also für z.B. Bohrung B18 neun Zeilen, da bis zur Endtiefe 9 Schichten angetroffen wurden.

Nun würde ich gerne in einem weiteren Datenblatt das Ganze ein wenig umsortieren, sodass ich für jede Bohrung eine Spalte habe und die jeweiligen Schichten in einer Zeile je Bohrung nebeneinanderstehen. Dadurch will ich schauen können, ob sich die Höhen der Schichten signifikant voneinander unterscheiden. Man müsste im Endeffekt sowohl nach der Schicht als auch nach dem Bohrungsname ordnen lassen. Ich denke, dass man da mit SVERWEIS und SUCHWENN irgendwie weiter kommt, nur komme ich nicht darauf, wie ich was miteinander kombiniere.

Im Anhang habe ich einmal einen Teil der Rohdaten angefügt (Datenblatt "Bohrdaten roh") und ein händisches Beispiel, wie ich die Daten gerne hätte ("Bohrdaten quer"). Da es im vollständigen Datensatz ne Menge Daten sind, wäre es ganz schöner Aufwand, alles händisch zu machen...

Hat da jemand von euch ne zündende Idee? Das wäre ganz großartig!


Ganz liebe Grüße

LeBen


Angehängte Dateien
.xlsx   Bohrdatenbank angepasst.xlsx (Größe: 15,98 KB / Downloads: 26)
Antworten Top
#2
Vielleicht so ein PT


Angehängte Dateien
.xlsx   __vielleicht_Pivottable.xlsx (Größe: 19,87 KB / Downloads: 12)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#3
Hi

Das sollte eigentlich recht einfach gehen, je nach Excelversion mit
FILTER, SUMMEWENNS, MAXWENNS
oder auch mit dem SVERWEIS direkt, wenn du am Anfang der Rohdaten Tabelle noch eine Spalte hinzufügst, in welcher du Bohrungsname und Schichtbezeichnung zu einem Wert verkettest, so dass du einen Suchbegriff hast.

Problematisch sind aber deine Schichtbezeichnungen.
Die sollten nämlich eindeutig sein und fs kommt mehrfach vor.
Auch differenzieren Serweis und die Wenns-Funktionen nicht nach griß-Kleinschreibung.

Hier müsstest du erstmal die Rohdaten überarbeiten.

Gruß Daniel
[-] Folgende(r) 1 Nutzer sagt Danke an slowboarder für diesen Beitrag:
  • Klaus-Dieter
Antworten Top
#4
Hallo,

ja, das geht, eine Pivottabelle ist schon der richtige Ansatz um es dynamisch flexibel zu halten, sprich es funktioniert egal welche Daten da einfließen. 
Mit Formelgedöns... ja kann man machen, das wird jedoch a) statisch und b) kriegst Du das Problem nicht gelöst das eine Schicht 2 Werte hat!

Es sein denn "fs, u" und "fs, U" sind 2 verschiedene Schichten? (Die PT von snb benutzt MAX zum aggregieren, und verwirft so einen Wert, bzw. zeigt in dem Fall einen falschen an.)

Um die Schichten in die korrekte Reihenfolge zu bringen kommt es darauf an was für einen Rechner Du hast. Unter Windows ist das easy, da können wir das Datenmodell benutzen.
Unter Mac kriegen wir das nur mit Umwegen. Was für ein Ding hast Du?

Und wir sieht es mit den Bohrungsnamen aus? Gibt es da auch sowas wie B1,B2 und sollen die dann vor B10 sortiert werden?

Andreas.
Antworten Top
#5
Hallo LeBen,

vorausgesetzt: Ich habe es richtig verstanden dann anbei mal mein Löungsvorschlag via VBA.

in ein allgemeines Modul:
Code:
Option Explicit

Sub Zuweisen()
    Dim dicS As Object, dicB As Object, z As Range, i&, j&, k&, arrTab(), tmp, AusWert As Variant
    Set dicS = CreateObject("Scripting.Dictionary")
    Set dicB = CreateObject("Scripting.Dictionary")
    arrTab = Tabelle1.UsedRange.Value
    For Each z In Tabelle1.Range("F2:F" & Tabelle1.UsedRange.Rows.Count)
        dicS(z.Value) = 0
    Next
    For Each z In Tabelle1.Range("A2:A" & Tabelle1.UsedRange.Rows.Count)
        dicB(z.Value) = 0
    Next
    tmp = dicS.keys
    With Tabelle2
        .Range("B1:B" & .UsedRange.Columns.Count).ClearContents
        .UsedRange.Offset(1).ClearContents
        .Cells(1, 2).Resize(1, dicB.Count) = dicB.keys
        For i = LBound(tmp) To UBound(tmp)
            For j = LBound(arrTab) + 1 To UBound(arrTab)
                If tmp(i) = arrTab(j, 6) Then
                    AusWert = Application.Match(arrTab(j, 1), .Rows(1), 0)
                    .Cells(i + 2, 1) = tmp(i)
                    If .Cells(i + 2, AusWert) < arrTab(j, 4) Then .Cells(i + 2, AusWert) = arrTab(j, 4)
                End If
            Next j
        Next i
    End With
End Sub

.xlsm   Bohrdatenbank angepasst(1).xlsm (Größe: 24,93 KB / Downloads: 2)

Gruß Uwe
Antworten Top
#6
Moin,

da ich gestern anderweitig beschäftigt und unterwegs war, kam ich jetzt erst dazu, mir all eure Antworten anzusehen.

Und ja, in der Erläuterung fehlte vielleicht die Info, dass fS und fs bzw. fS, u und fS, U unterschiedliche Schichten sind. Das sind jeweils bodenkundliche Kürzel, bei denen die Groß- und Kleinschreibung entscheidend ist.

Da die Schichten letztendlich eh in ein 3D-Modell fließen sollen, habe ich dort ja auch eine eindeutige Nummerierung "SchichtNr" der Schichten, welche ungeachtet der Groß- und Kleinschreibung jeder gleichen Schicht die gleiche Nummer zuordnet. 

Somit konnte ich recht schnell eine PT gem. des Vorschlags von @snb erstellen und diese mithilfe der eindeutigen Nummerierung gem. der Anmerkung von @Andreas Killer eindeutig und ohne Informationsverlust genauso vervollständigen, wie ich es mir vorgestellt habe. 

Also vielen vielen Dank für die schnelle Hilfe! Das gilt natürlich auch allen anderen, die hier so flott ihre Ideen in den Topf geworfen haben! 


Ganz liebe Grüße

LeBen
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste