如果使用动态列

时间:2018-11-24 01:45:31

标签: excel vba excel-vba

我正在尝试创建一个模板,该模板将从多个文件中提取数据,这些文件将保存在文档中。该模板将提取数据,并利用SumIf函数在工作表1上引用零食,并在工作表2和3上将其旁边的数字相加。在我下载的文件上,“数量”列可能有所不同。

下面的代码尝试引用Lc作为总和范围,但是通过修改语言,我得到了

  

错误'1004':应用程序定义或对象定义的错误-或者-   错误“ 13”:输入不匹配

我已经考虑过range.address,但是不确定如何处理。有必要吗?任何见识将不胜感激。

小吃:
Snacks

Dim Lr, Lc As Long

Lr = Cells(Rows.Count, "A").End(xlUp).Row
Lc = Cells(1, Columns.Count).End(xlToLeft).Column
For a = 1 To Lr

    Cells(a, 3).Value = Application.WorksheetFunction.SumIf(Worksheets("Sheet 2").Range( _
            "A2:A" & Lc), Worksheets("Sheet 1").Cells(a, 1), Worksheets("Sheet 2").Range( _
            "A2:A" & Lc))

Next a

--------------------------------更新-------------- ------------

感谢宝贵的见解专家。

@QHarr我非常感谢您的见解。我的问题是,当我希望每次循环时都更改标准时,如何创建“单个条件”?本质上,我希望它首先对“ Cheetos”进行求和,但是下次我希望对“ Cheetos”进行求和。您将在上方看到我已将标准替换为单元格(a,1)而不是Range(“ A:A”)。我得到的值为0,因为我认为单元格(a,1)的循环方式与总体循环不同。

@Michal Rosa谢谢,我不再遇到错误-它正在运行且没有错误,但是所有SumIf值都返回为“ 0”。另外,在LastRow问题上也很受人欢迎-经过一段时间的努力,是让我不满意的小事情。

1 个答案:

答案 0 :(得分:0)

这不是一种非常高效的处理方式,但是如果您真的想以这种方式进行计算,则代码应如下所示:

import csv

with open("WJU stats.csv", 'r') as csv_file:
    csv_reader = csv.reader(csv_file)

with open('wjudata.csv', 'w') as new_file:
    csv_writer = csv.writer(new_file)

    for row in csv_reader:
        csv_writer.writerow(row[0])
        print(row[0])

假设数据输入在A和C列的“ Sheet 1”和“ Sheet 2”表中。