Vba 从多张图纸中查找单元格和的过程

Vba 从多张图纸中查找单元格和的过程,vba,excel,Vba,Excel,我已经导入了大约100个文本文件到Excel(使用2010)。每个工作表在第I列中都有一个值,我需要将其合计;值的行各不相同,但在所有情况下都是最后一行 因为我想不出一种像样的方法来编码一种方法来求和这些值,而不需要实质上“复制”数据,所以我想我有一个过程,如果这是不正确的,我需要纠正/帮助 我想找到列I(我的范围)中的最后一行,并将其放在新的工作表上,创建一个列表;这将出现在新页面的B列中。列A必须说明从中提取数据的工作表的标题 我将在这一点上求和 到目前为止,我什么都没有。我试着编写了以下代

我已经导入了大约100个文本文件到Excel(使用2010)。每个工作表在第I列中都有一个值,我需要将其合计;值的行各不相同,但在所有情况下都是最后一行

因为我想不出一种像样的方法来编码一种方法来求和这些值,而不需要实质上“复制”数据,所以我想我有一个过程,如果这是不正确的,我需要纠正/帮助

我想找到列I(我的范围)中的最后一行,并将其放在新的工作表上,创建一个列表;这将出现在新页面的B列中。列A必须说明从中提取数据的工作表的标题

我将在这一点上求和

到目前为止,我什么都没有。我试着编写了以下代码,这似乎给了我很大帮助:

Sub Scuba()

Dim ws As worksheet
Dim rng As Object
Dim numrows As Integer

numrows = Rows.Count
Set rng = .Range(.Cells(1, 9), .Cells(numrows, 9))

worksheet.Add.Name = Tally

For Each ws In Workbook

Sheets("Tally").Range(xlEnd.Row + 1, 1).Value = ActiveSheet.Name
Sheets("Tally").Range(xlEnd.Row + 1, 2).Value = rng.xlEnd

Next

End Sub
所有数据的格式如下:

20141103-20141107

Date  In    Out   Listing
1103  0710  1710  1000 - 1000
1104  0715  1800  1045 - 2045
1105  0715  1800  1045 - 3130
1106  0700  1745  1045 - 4215
1107  0700  1015  0315 - 4530
所描绘的区域表示空间上的新单元。在本例中,我希望保留的值和total将是4530的最终列表

任何帮助都将不胜感激


编辑:

由于我在选择列中的最后一个单元格时遇到问题,也许我可以以列表的方式将每个工作表中的最后一行放到新工作表中。这至少会使整个项目更易于管理(文本文件的数量因每个人在时间记录程序中投入的工作量而有所不同;我将为多个人这样做,以确定X持续时间内工作的小时数)。
我仍然想把它从A列中取出的表格,从B列中复制的最后一行开始


随着这一进展,我将发布更多信息。感谢您迄今为止的所有输入。

此代码将创建一个新的工作表“理货”(除非它已经存在),并添加带有每个工作表名称和最后小时数的行。我已经成功地测试了以下各项

编辑:这段代码经过测试可以正常工作

   Sub Scuba()
    Dim ws As Worksheet
    Dim RunSub As Long
    Dim LastRow As Long
    Dim NameTest As String
    Dim NewWS As Worksheet

    On Error Resume Next

    'Creates Tally sheet if it doesn't exist
    NameTest = Worksheets("Tally").Name
    If Err.Number = 0 Then
    Else
        Err.Clear
        Set NewWS = ActiveWorkbook.Sheets.Add(Before:=ActiveWorkbook.Sheets(1))
            NewWS.Name = "Tally"
    End If

    For Each ws In ActiveWorkbook.Worksheets
        If Not ws.Name = "Tally" Then
            LastRow = ws.Range("I" & Rows.Count).End(xlUp).Row
            DestRow = Sheets("Tally").Range("A" & Rows.Count).End(xlUp).Row + 1
            Sheets("Tally").Range("A" & DestRow).Value = ws.Name
            Sheets("Tally").Range("B" & DestRow).Value = ws.Range("I" & LastRow).Value
        Else
        End If
    Next ws

    DestRow = Sheets("Tally").Range("A" & Rows.Count).End(xlUp).Row + 1
    Sheets("Tally").Range("A" & DestRow).Value = "Grand Total"
    Sheets("Tally").Range("B" & DestRow).Value = Application.Sum(Range("B1:B" & DestRow - 1))

MsgBox "Done"

End Sub
我希望这有帮助

Sub Scuba()

  Dim ws As Worksheet, wsTally As Worksheet
  Dim rng As Object
  Dim numrows As Integer

  Set wsTally = Worksheets.Add

  'if there is already a sheet named Tally, then this will result in wsTally being called Sheet6 or whatever...
  On Error Resume Next
  wsTally.Name = "Tally"
  On Error GoTo 0

  Dim i As Long
  i = 1

  With wsTally
    For Each ws In ActiveWorkbook
      i = i + 1
      .Range(i + 1, 1).value = ws.Name
      .Range(i + 1, 2).value = LastValInRow(9, ws).value
    Next ws
  End With

End Sub

Function LastValInRow(Column As Long, WrkSht As Worksheet) As Range
  Dim c As Range
  Set c = WrkSht.Columns(Column)

  'get the last cell excel thinks is uesd
  Dim LstUsed As Long
  LstUsed = c.Rows.Count + 1
  'add one, just in case excel is correct

  'get the actual last used cell
  Dim r As Range
  ' .End(xlUp) is equivalent to Ctrl+Up
  Set r = c.Cells(LstUsed, 1).End(xlUp)

  Set LastValInRow = r
End Function

目前每张表上的第I栏有金额吗?还是希望宏为每张工作表创建一个总和?我在下面的回答假设你每张纸上都没有一个总数。谢谢你的提醒;文本文件的集合是某人将自己的小时数集中起来,并显示一周的总数,因此它是行中值的总和。统计数据在excel中删除后,将显示在第一列。您能否提供一个示例屏幕截图(保留机密数据)供我们查看?刚刚添加了一个数据示例。这些是每个文本文件的布局方式。如果在某个日期上使用了额外的时间,则该时间将列在该日期的下方,并在该日期应为的位置留有空格。是否尝试运行我的第二个答案(编辑后)代码?我尝试了此代码,但收到运行时错误“438”:对象不支持此属性或方法。这出现在“For Each ws In ActiveWorkbook”上。试图弄清楚为什么Excel今天讨厌它。不确定为什么这会修复它,但我重新键入了ActiveWorkbook,它成功了;我现在在“.Range(I+1,1).Value=”上得到一个自动化错误['-2147221080(800401a8)]。正在尝试了解它。刚刚尝试了第二组代码(后期编辑),它似乎向上添加了列+附加的最后一行。这似乎不是我想要的,因为就工作时间而言,第一列本身就是一个总和,最后一行是该周的总工作时间。谢谢你的意见!收到了一封关于这件事的电子邮件,看了看,我不确定这是怎么发生的。。。第一列列出:080516101020452600 3200(周末,每人工作32小时)。您对列进行了代码求和,但消息框中的求和显示为“159415”。明天,我将花一分钟的时间,找出我的循环无法使用上述代码的原因(“对于工作簿中的每个工作表”,不应该给我一个对象错误)。我将更多地使用您的代码,但感谢您的输入thusfar!如果没有其他内容,它将帮助我正确地列出函数。我的代码对每个工作表的“I”中的最后一个值求和。你的书里有多少工作表?1594.15小时是100张工作表所有工作小时的合理总和吗?如果我的代码输出159415小时,那么这应该是所有100张工作表所有(总/最终)工作小时的总和。(我相信这是你最初要求的)。