Ich bin völlig neu in VBA in Excel.Excel VBA - Transponieren, Kopieren und Einfügen in verschiedenen Zeilen, mit Bedingungen
Meine Daten bestehen aus Spalte G, mit einer Liste von Medaillen, und Spalte H, die Nationen darstellt. Ich möchte meine NOCs so transponieren, dass die J-Spalte für Gold steht und der Rest für andere Medaillen (die Reihenfolge spielt keine Rolle, ob es sich um Silber oder Bronze handelt, solange sie sich in derselben Reihe befinden). Bitte beachten Sie mein Bild unten, es wäre selbsterklärend, was ich tun möchte.
Ich habe versucht, VBA zu kodieren, so dass es drei-down die Spalte kopieren und transponieren würde, aber es gibt zahlreiche Male, wenn es nicht um drei geht. Manchmal gibt es zwei Bronzemedaillen und manchmal keine Bronzemedaille.
Wie ich dachte, es könnte funktionieren, lesen Sie Spalte G und gehen Sie die Spalte und suchen Sie nach Gold, und wenn "Gold" gefunden wird, dann soll es den Wert der nächsten Spalte H bis zum nächsten Gold transponieren ist in der Spalte G.
Angehängte Bild unten durch rote Pfeile gerichtet ist, was ich tun möchte.
Ich würde Ihre Hilfe sehr schätzen.
== konnte ich mein Problem mit Hilfe von Stackoverflow lösen, und das ist das Ergebnis.
Public Sub RunSQL()
Dim conn As Object, rst As Object
Dim strConnection As String, strSQL As String
Dim i As Integer
Set conn = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.Recordset")
' CONNECTION STRING
strConnection = "DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" _
& "DBQ=C:\Path\To\Current\Workbook.xlsm;"
' SQL STATEMENT
strSQL = "TRANSFORM MAX(m.NOC) AS CountryCode" _
& " SELECT m.[Event], m.[Event Gender]" _
& " FROM (SELECT t.[Event], t.[Event Gender], t.[Medal], t.NOC," _
& " (SELECT Count(*) FROM [MAIN$] sub" _
& " WHERE sub.[Event] = t.[Event]" _
& " AND sub.[Event Gender] = t.[Event Gender]" _
& " AND sub.[Medal] = t.[Medal]" _
& " AND (IIF(sub.[Medal]='Gold', 1, IIF(sub.[Medal]='Silver', 2, 3)) <" _
& " IIF(t.[Medal]='Gold', 1, IIF(t.[Medal]='Silver', 2, 3))" _
& " OR sub.[NOC] <= t.[NOC])) AS rn" _
& " FROM [MAIN$] t) m" _
& " GROUP BY m.[Event], m.[Event Gender]" _
& " PIVOT m.[Medal] & m.[rn] IN" _
& " ('Gold1', 'Gold2', 'Gold3', 'Silver1', 'Silver2', 'Silver3'," _
& " 'Bronze1', 'Bronze2', 'Bronze3')"
' OPEN DB CONN
conn.Open strConnection
rst.Open strSQL, conn
' COLUMN HEADERS
For i = 1 To rst.Fields.Count
Worksheets("RESULTS").Cells(1, i) = rst.Fields(i - 1).Name
Next i
' DATA ROWS
Worksheets("RESULTS").Range("A2").CopyFromRecordset rst
rst.Close: conn.Close
End Sub
Die Anzeigesäule (das heißt Ereignis?), die Sie mit Klammern Diagramm ist sehr wichtig. Was ist in Spalte F oder vorherigen, die diese 2 oder 3 Gruppierungen definieren? – Parfait
es ist das Ereignis jedes Spiels. Also meine Spalte geht, A: Jahr der Olympischen Spiele, B: Gastgeberstadt C: Sport (zB Auqatics) D: Disziplin (zB Schwimmen) E: Event (zB 100m Rückenschwimmen) F: Event gender. Also was ich versuche zu bekommen ist eine Liste, welche Nation gewann Gold Silber Bronze für jedes Ereignis, in Reihen. :) – heidi
Verwenden Sie Excel für Windows oder Mac? – Parfait