当前位置: 首页 > 知识库问答 >
问题:

在Excel VBA中,基于列数据创建新行

汪理
2023-03-14

恕我直言,我是一名未经培训、仅录制宏的VBA用户。我试着到处捡零碎的东西,但我还是个十足的傻瓜。请给我指出正确的方向!

在每一行上,零件编号(E列)应与源和地址(G和H列)以及描述(I列)相关联。我说“应该”,但实际上,不是每个零件编号一个源/地址组合,在许多文件中,在某些行上有多达15个不同的源/地址组合,源/地址组合列在相邻的列J/K、L/M、N/O等中,这将描述列推向右侧。

我需要找到一种VB方法,在有源/地址组合的情况下重复行的次数,并除去除一个组合之外的所有行。下面是一个示例:

   A   B   C   D  Part#  F  Source1  Address1  Source2  Address2   Description
1  x   x   x   x  Part1  x  (S1)     (A1)                          Nut
2  x   x   x   x  Part2  x  (S1)     (A1)      (S2)     (A2)       Bolt

第2行有两个源/地址组合,每行只需要复制一个组合,如下所示:

   A   B   C   D  Part#  F  Source   Address  Description
1  x   x   x   x  Part1  x  (S1)     (A1)     Nut
2  x   x   x   x  Part2  x  (S1)     (A1)     Bolt
3  x   x   x   x  Part2  x  (S2)     (A2)     Bolt

在另一个文件中,我可能在任何给定行上有多达15个不同的源/地址组合,然后需要将其复制15次。

这有意义吗?在我的脑海中,我听到了我从未使用过的VBA函数,如loop、do while、do until等。但我不知道足够的语法来开始实现任何东西。劝告

共有1个答案

赵晨
2023-03-14
Sub Test()

Dim rw As Range, rwDest As Range, cellSrc As Range
Dim colDesc As Long, f As Range

    colDesc = 0
    'see if we can find the "description" column header
    Set f = Sheet1.Rows(1).Find(what:="Description", LookIn:=xlValues, lookat:=xlWhole)
    If Not f Is Nothing Then colDesc = f.Column

    Set rw = Sheet1.Rows(2)
    Do While Len(rw.Cells(, "E").Value) > 0
        Set cellSrc = rw.Cells(, "G")
        Do While Len(cellSrc.Value) > 0 And _
                 UCase(Sheet1.Rows(1).Cells(cellSrc.Column).Value) Like "*SOURCE*"
            Set rwDest = Sheet2.Cells(Rows.Count, "E").End(xlUp). _
                         Offset(1, 0).EntireRow
            rw.Cells(1).Resize(1, 6).Copy rwDest.Cells(1)
            cellSrc.Resize(1, 2).Copy rwDest.Cells(7)
            If colDesc > 0 Then rw.Cells(colDesc).Copy rwDest.Cells(9)

            Set cellSrc = cellSrc.Offset(0, 2)
        Loop
        Set rw = rw.Offset(1, 0)
    Loop

End Sub
 类似资料:
  • 我有一个pandas dataframe,需要根据dataframe中其他列的值创建新列。这是数据帧 人城市国家国家 美国伊利诺伊州芝加哥 美国亚利桑那州凤凰城B酒店 C美国加利福尼亚州圣地亚哥 我想根据state中的值创建两个新列 创建新列df[“城北”]=df[“城市”]其中state=“伊利诺伊” 创建新列df[“城市南部”]=df[“城市”],其中州不等于“伊利诺伊州” 我试过了 但是不等

  • 我有一个由名字和年份组成的dataframe,并有一个虚拟变量来判断名字是否发生在一年中。 null 谢谢!

  • 我有两个熊猫数据框 步骤2:对于flag=1的行,AA_new将计算为var1(来自df2)*组“A”和val“AA”的df1的'cal1'值*组“A”和val“AA”的df1的'cal2'值,类似地,AB_new将计算为var1(来自df2)*组“A”和val“AB”的df1的'cal1'值*组“A”和val“AB”的df1的'cal2'值 我的预期输出如下所示: 以下基于其他stackflow

  • 我想在Pandas数据集中创建一个新列,基于另外两个列的值。 现在,应该如下所示: 有什么帮助吗?

  • 我有两个pyspark数据帧 DF1 : df2: 我想向df1添加一个列Location_Id,从df2获取匹配的Id,如下所示: 我如何才能做到这一点?

  • 正如标题所暗示的,我正在尝试通过用户表单将数据添加到新行中。我遇到的问题是布局如下: 标题1月2月3日4月5月6月7月8月9月10月11月12日总收入(此处需要插入数据)传出(同样,需要在此处添加另一组数据) 实现这一目标的代码是什么,因为目前它低于离任,但我希望它介于收入和离任之间 如果您需要更多信息,我很乐意讨论。 提前谢谢