Excel宏 - 表的联合

时间:2017-05-02 08:17:48

标签: excel excel-vba vba

我正在尝试运行一个宏,它从不同的工作表中复制三个表并将它们粘贴在一个新的工作表中。

表中的行数并不总是相同。因此,我需要一个带有“动态”“LastRow”参数的宏,这样每次更新一个表时,宏的结果都会更新。

我试图运行这个宏:^

func CreateModel(c echo.Context) error {
    fmt.Println("====> Entry CreateModel function");
    //var results []dataStruct
    var Success bool = false

    Db := db.MgoDb{}
    Db.Init()
    defer Db.Close()

    col := Db.C(db.TrainingDataCollection)
    var results dataStruct
    if err := col.Find(nil).All(results); err != nil {
        fmt.Println("ERROR WHILE GETTING THE TRAINING DATA")
    } else {
       //fmt.Println("Results All: ", results) 
       Success = true
    }

fmt.Println("=============",results)

//Initialises a new KNN classifier
cls := knn.NewKnnClassifier("euclidean", "linear", 2)

//Do a training-test split
trainData, testData := base.InstancesTrainTestSplit(results, 0.55)
cls.Fit(trainData)

//Calculates the Euclidean distance and returns the most popular label
predictions, err := cls.Predict(testData)

if err != nil {
    panic(err)
}

fmt.Println(predictions)

// Prints precision/recall metrics
confusionMat, err := evaluation.GetConfusionMatrix(testData, predictions)

if err != nil {
    panic(fmt.Sprintf("Unable to get confusion matrix: %s", err.Error()))
}

fmt.Println(evaluation.GetSummary(confusionMat))

return c.JSON(http.StatusOK, Success)

}

我无法准确理解宏正在做什么。最终会有一个表格,其行数等于第一张表格,但表格内的数据是从其他表格中“随机”获取的。 而且,使结果成为表的选择不正常。

2 个答案:

答案 0 :(得分:2)

根据上面的评论(还删除了不必要的选择)

Sub x()

Dim lastRow As Long

With Sheets("All data")
    Sheets("Discussed Files").Range("Table1[#All]").Copy
    .Range("A1").PasteSpecial Paste:=xlPasteValues

    lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
    Sheets("Files within 3 Days").Range("Table3").Copy
    .Range("A" & lastRow).PasteSpecial Paste:=xlPasteValues

    lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
    Sheets("Files 10.04.17").Range("Table5").Copy
    .Range("A" & lastRow).PasteSpecial Paste:=xlPasteValues

    lastRow = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
    .ListObjects.Add(xlSrcRange, .Range("$A$1:$Y$" & lastRow), , xlYes).Name = "Table14"
    .ListObjects("Table14").TableStyle = "TableStyleMedium2"
End With

End Sub

答案 1 :(得分:1)

您不会在两个步骤之间更新lastRow,因此您基本上将它们粘贴到另一个位置,因为粘贴其中一个表后lastRow没有更新,它保持相同每个代码开头的值:

Range("A" & lastRow).Select
Selection.PasteSpecial 

此外,此代码将返回最后一行,其中包含数据,因此如果您粘贴到干净的工作表中,则会将所有表格粘贴到同一位置:

lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1

编辑:

Dim lastRow As Long
lastRow = Sheets("All data").Cells(Rows.Count, "A").End(xlUp).Row + 1

Sheets("Discussed Files").Range("Table1[#All]").Select
Selection.Copy
Sheets("All data").Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

lastRow = Sheets("All data").Cells(Rows.Count, "A").End(xlUp).Row + 1

Sheets("Files within 3 Days").Range("Table3").Select
Selection.Copy
Sheets("All data").Range("A" & lastRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

lastRow = Sheets("All data").Cells(Rows.Count, "A").End(xlUp).Row + 1

Sheets("Files 10.04.17").Range("Table5").Select
Selection.Copy
Sheets("All data").Range("A" & lastRow).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

lastRow = Sheets("All data").Cells(Rows.Count, "A").End(xlUp).Row + 1

Sheets("All data").ListObjects.Add(xlSrcRange, Range("$A$1:$Y$" & lastRow), , xlYes).Name = _
    "Table14"
Range("Table14[#All]").Select
Sheets("All data").ListObjects("Table14").TableStyle = "TableStyleMedium2"