2016-03-20 8 views
0

Als Excel-Experte kann ich kein Makro schreiben, das Daten in einer der Spalten aus einer Stammdatenreferenz aktualisiert.Excel _ Aktualisieren von Daten in Sheet von mit Daten aus einem anderen Blatt

Zum Beispiel: Ich habe ein Blatt (Tran_Sheet), das Transaktionsdaten hat, zusammen mit dem Vornamen und Nachnamen der Kunden als separate Spalten.

Ich habe ein weiteres Blatt (Master_Data), das alle Vor- und Nachnamen der Kunden hat.

Die Daten in Tran_Sheet haben Rausch- und Abfallwerte, daher wurden einige der Namen falsch geschrieben.

Ich muss ein Makro schreiben, so dass die Namen in der Tran_Sheet basierend auf dem Master_Data als Verweis aktualisiert werden.

Ich weiß, das eine SQL-Abfrage mit nur einfach ist, aber ich brauche yto es tun Sie in Excel 2013

danken !!!

Grüße, Ravi

+0

Ein "Join" ist wirklich ein Schmerz in Excel. Ist es ein absolutes Muss, dies in Excel zu machen? Sie könnten Ihre Tabellen möglicherweise in MS Access importieren und den Beitritt dort durchführen. –

+0

Warum fügen Sie nicht einfach eine Formel in das Tran_Sheet ein, die die Daten aus dem Master_Data-Blatt holt? Die Kombination von [INDEX/MATCH] (http://www.exceluser.com/formulas/why-index-match-is-better-than-vlookup.htm) sollte gut funktionieren. Sobald Sie alle Daten auf dem Tran_Sheet haben, können Sie die Formeln nur mit den entsprechenden Werten entfernen. Sie können diese 3 Schritte auch mit VBA ausführen und es wird sehr schnell gehen. – Ralph

Antwort

0

Sie leicht eine Abfrage auf der aktuellen Arbeitsmappe ausführen kann:

Sub SQL_Example() 

    ' query to compute the average score for each group 
    Const SQL_SUM_SCORES_BY_GROUP = _ 
    "SELECT ref.Group, AVG(data.Score) AS Score " & _ 
    "FROM [Sheet1$] data INNER JOIN [Sheet2$] ref " & _ 
    "ON data.Name = ref.Name " & _ 
    "GROUP BY ref.Group " 

    ' execute the query and write the results in a new sheet 
    SqlExec ThisWorkbook, SQL_SUM_SCORES_BY_GROUP 

End Sub 

'' 
' Executes a query on a workbook. 
' @source {Workbook} Workbook loaded by the SQL engine 
' @target {Worksheet} Optional, Worksheet to display the result 
' @sql {String} SQL query 
'' 
Sub SqlExec(source As Workbook, sql As String, Optional Target As Worksheet) 
    Static rs As Object 
    If rs Is Nothing Then Set rs = CreateObject("ADODB.recordset") 

    ' build the connection string 
    Dim conn$ 
    conn = "Provider=Microsoft.Jet.OLEDB.4.0" _ 
     & ";Data Source=" & source.FullName _ 
     & ";Extended Properties=""Excel 8.0;HDR=Yes"";" 

    ' insert a new worksheet if the target worksheet is null 
    If Target Is Nothing Then 
    Set Target = Worksheets.Add(After:=Worksheets(Worksheets.count)) 
    End If 

    ' execute the query 
    rs.Open sql, conn 

    ' copy the headers to the target sheet 
    Target.Cells.Clear 
    For i = 1 To rs.Fields.count 
    Target.Cells(1, i).value = rs.Fields(i - 1).name 
    Next 

    ' copy the values to the target sheet 
    Target.Cells(2, 1).CopyFromRecordset rs 

    ' dispose 
    rs.Close 
End Sub 
0

Diese keineswegs eine einfache Aufgabe ist, bedeutet und nicht gelöst entweder in einer SQL-Abfrage werden kann, oder Excel ohne weitere Details in Bezug auf die Art von Lärm in Ihren Daten. Wenn es um korrekte personenbezogene Daten geht, wird es schließlich zu einem Würfel, da es sehr unstrukturiert ist und die Leute dazu neigen, die Zeitkomponente zu vergessen.

Verwandte Themen