合并/加入具有一些常见值的不同电子表格到一个统一的表格中

时间:2015-09-09 18:12:54

标签: excel join

我在Excell中有五个电子表格(技术上在LibreOffice Calc 中),我们称之为ABCD& ; E

一张工作表A包含列标题submission #member #member namecommentdate和& time

B包含列标题review #field #和& score

Creview #field #和& text

D#member #member namereview from #numbertextscoresreviewer first namereviewer last namereviewer emailreviewer person #datetime,& attachment

Efield #field headervalue和& explanation

我想尝试同步这些不同的工作表,因为AD通常共享member #D& B分享scoreB& E分享field #,同样E& C分享字段编号。

最有效的方法是什么?

可以在Calc中完成吗?也许使用一些VBA-esque语法。

1 个答案:

答案 0 :(得分:0)

这是您需要的excel VBA。

  • USAGE

    在工作表A上放置工作表D的列。例如,让我们处理列review from #。将该公式放在单元格中:=LookupCSVResults($B2,SheetD!$B$2:$B$xx,SheetD!D$2:D$xx,)

    您应该能够正确地复制该公式并获得所有值。 sheetD中具有相同member #的所有值都在一个单元格中连接,并带有新的行分隔符。 如果您想要其他分隔符,请修改VBA代码并按您选择的字符代码更改Chr(10)

我相信这种格式可以在以后更轻松地重用数据。

  • 实施例 enter image description here
  • CODE

`

Function LookupCSVResults(lookupValue As Variant, lookupRange As Range, resultsRange As Range) As String
Dim s As String 'Results placeholder
Dim sTmp As String  'Cell value placeholder
Dim r As Long   'Row
Dim c As Long   'Column
Const strDelimiter = "|||"  'Makes InStr more robust

s = strDelimiter
For r = 1 To lookupRange.Rows.Count
    For c = 1 To lookupRange.Columns.Count
        If lookupRange.Cells(r, c).Value = lookupValue Then
            'I know it's weird to use offset but it works even if the two ranges
            'are of different sizes and it's the same way that SUMIF works
            sTmp = resultsRange.Offset(r - 1, c - 1).Cells(1, 1).Value
            If InStr(1, s, strDelimiter & sTmp & strDelimiter) = 0 Then
                s = s & sTmp & strDelimiter
            End If
        End If
    Next
Next

s = Replace(s, strDelimiter, Chr(10))

LookupCSVResults = s 'Return the function

End Function