首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >循环遍历工作表中的每一行,然后复制到另一个工作表的指定范围

循环遍历工作表中的每一行,然后复制到另一个工作表的指定范围
EN

Stack Overflow用户
提问于 2018-12-11 16:52:43
回答 1查看 421关注 0票数 0

我一直在努力解决这个问题,但到目前为止还没有成功。该代码工作正常,但不幸的是,它以意想不到的方式运行。

宏工作簿是包含“数据”表上所有数据字段的主工作簿。精益工作簿包含某些数据点,我希望将这些数据点复制并粘贴到宏工作簿中" data“工作表上的命名范围中,直到最后可用的行。

前任:

宏工作簿有列:

代码语言:javascript
运行
复制
Eng #  Eng Name   Date Started     Date Completed    KPI1   KPI2  

100    ABC        12/01/2018       12/10/2018        50    100 

精益工作簿有列:

代码语言:javascript
运行
复制
Eng #   Date Started   Date Completed   KPI#   Score
101     12/02/2018      12/03/2018      1       50
101     12/02/2018      12/03/2018      2       10
102     11/01/2018      11/20/2018      1       100
102     11/01/2018      11/20/2018      4       100

目标是双重的:

  1. 从精益工作簿的特定列获取数据,并粘贴到宏工作簿的“数据”工作表中,直到最后可用的行
  2. 从精益工作簿(在行中)获取KPI #,并将分数传递到与“数据”表中的KPI #匹配的指定范围/列。

下面的代码是我的尝试:

代码语言:javascript
运行
复制
Public Sub GrabLeanFileData()

Dim wbmacro As Workbook
Dim wblean As Workbook

Set wbmacro = Workbooks.Item("MacroFile.xlsm")
Set wblean = Workbooks.Item("Subcontractor CA - KPI's Lean.csv")

Dim wsmacro As Worksheet
Dim wslean As Worksheet

Set wsmacro = wbmacro.Worksheets.Item("Data")
Set wslean = wblean.Worksheets.Item("Subcontractor CA - KPI's Lean")

Dim leanrange As Range
Set leanrange = wslean.Range("A2:A15000")

wblean.Activate

Dim cell As Range

i = 1

For Each cell In leanrange

    If leanrange.Range("A2") <> "E1002" Then
        Range("A2").Offset(i, 0).Value = wsmacro.Range("Enum").Value
        Range("B2").Offset(i, 0).Value = wsmacro.Range("ds").Value
        Range("C2").Offset(i, 0).Value = wsmacro.Range("dc").Value
        Range("D2").Offset(i, 0).Value = wsmacro.Range("kpi1").Value


        i = i + 1
    End If

Next cell

End Sub

我想跳过1002的测试#,所以我把这个条件放进去了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-11 20:08:28

据我所知,您要做的是从leanrange和相邻列中的每个单元格中获取值,并将其插入到宏工作簿中的表中,在适当的标题下。

我认为这里有两个问题:

  1. for循环中的语法反转。
  2. 你没能有效地抵消

下面是我的建议:既然您使用的是for每个循环,那么使用cell对象循环遍历范围内的所有单元格,而不是使用偏移量。然后,您需要在宏工作簿中偏移行,否则您只是一次又一次地粘贴到同一行。这就是你的标题被覆盖的原因。您可以使用第二个循环来偏移cell,这样您就可以遍历leanrange中的每一列。最后,由于您的范围"Enum“、"ds”、"dc“等看起来都是相邻的列,所以我通过使用j对宏工作簿中的列进行了简化。

代码语言:javascript
运行
复制
Dim i As Integer
Dim j As Integer
Dim cell As Range

i = 1
For Each cell In leanrange
    If leanrange.Range("A2") <> "E1002" Then
        For j = 0 To 3
            wsmacro.Range("Enum").Offset(i, j) = cell.Offset(0, j).Value
        Next j
        i = i + 1
    End If
Next cell
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53728794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档