如果列包含数据,则复制单元格A,Excel VBA

如果列包含数据,则复制单元格A,Excel VBA,excel,vba,Excel,Vba,我有以下格式的数据 CardMinder 5 4.1 Citrix Authentication Manager 6 5.1 7 8 5 Citrix Receiver Inside 4.2 4.1 4.3 4.4 4 我正在尝试编写一些代码,这些代码将接受这一点,并将第一列多次添加到之后的每一列中 范例 CardMinder 5 CardMinder 4.1 我有一些工作代码,但它一次只能在一行上工作,如果我运行两次,它会在行间添加多个空行。我

我有以下格式的数据

CardMinder  5   4.1         
Citrix Authentication Manager   6   5.1 7   8   5
Citrix Receiver Inside  4.2 4.1 4.3 4.4 4
我正在尝试编写一些代码,这些代码将接受这一点,并将第一列多次添加到之后的每一列中

范例

CardMinder  5
CardMinder  4.1
我有一些工作代码,但它一次只能在一行上工作,如果我运行两次,它会在行间添加多个空行。我不确定我做错了什么

谢谢你的帮助

Sub createVersions()
Dim sheet As Worksheet
Set sheet = ActiveSheet


'Loop through columns in Excel sheet
Dim LastRow As Long, LastCol As Integer, c As Integer, r As Long

LastRow = ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).row
LastCol = ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count).Column


   For r = 1 To LastRow
      If (LastCol > 2) Then
      'Check column 3 to end for contents
         For c = 3 To LastCol
            rngParent = sheet.Cells(r, "A").Value
            initChild = sheet.Cells(r, c).Value

               If (initChild <> "") Then
                  'insert a row for extra column data
                  ActiveCell.EntireRow.Insert Shift:=xlShiftDown
                  sheet.Cells(r + 1, "A").Value = rngParent
                  sheet.Cells(r + 1, "B").Value = initChild
               End If
            Next c
         End If
   Next r
End Sub
Sub-createVersions()
将工作表设置为工作表
设置工作表=活动工作表
'循环浏览Excel工作表中的列
Dim LastRow为长,LastCol为整数,c为整数,r为长
LastRow=ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).row
LastCol=ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count).Column
对于r=1到最后一行
如果(LastCol>2),则
'检查第3列以结束内容
对于c=3到LastCol
rngParent=表单元格(r,“A”).值
initChild=sheet.Cells(r,c).Value
如果(initChild“”),则
'为额外的列数据插入一行
ActiveCell.EntireRow.Insert Shift:=xlShiftDown
表格单元格(r+1,“A”)。值=rngParent
表.单元格(r+1,“B”).值=initChild
如果结束
下一个c
如果结束
下一个r
端接头

据我所知,您只是想得到一个两列列表,其中包含第一列中项目的每个组合以及该项目后面各列中的每个数字。在数据集中这样做是可能的,但老实说,如果我们把它写进一张新的表中,那就简单多了。只需对现有代码进行一些小的修改就可以做到这一点

Sub createVersions()
Dim sheet As Worksheet
Set sheet = ActiveSheet

'Use a new sheet instead of messing with the base data
Dim wsVersionList As Worksheet
Set wsVersionList = ThisWorkbook.Sheets.Add

'Loop through columns in Excel sheet
Dim LastRow As Long, LastCol As Integer, c As Integer, r As Long

LastRow = sheet.UsedRange.Rows(sheet.UsedRange.Rows.Count).Row
LastCol = sheet.UsedRange.Columns(sheet.UsedRange.Columns.Count).Column

Dim CurRow As Long
CurRow = 1

For r = 1 To LastRow
   If (LastCol > 2) Then
   'Check column 2 to end for contents
      For c = 2 To LastCol
         rngParent = sheet.Cells(r, "A").Value
         initChild = sheet.Cells(r, c).Value

            If (initChild <> "") Then
                'Write the software and verison values into the scratch sheet
                wsVersionList.Cells(CurRow, 1) = rngParent
                wsVersionList.Cells(CurRow, 2) = initChild
                'Increment to the next row
                CurRow = CurRow + 1
            End If
         Next c
      End If
Next r

End Sub
Sub-createVersions()
将工作表设置为工作表
设置工作表=活动工作表
“使用新的工作表,而不是混乱的基础数据
将wsVersionList设置为工作表
设置wsVersionList=ThisWorkbook.Sheets.Add
'循环浏览Excel工作表中的列
Dim LastRow为长,LastCol为整数,c为整数,r为长
LastRow=sheet.UsedRange.Rows(sheet.UsedRange.Rows.Count).Row
LastCol=sheet.UsedRange.Columns(sheet.UsedRange.Columns.Count).Column
暗咖喱一样长
CurRow=1
对于r=1到最后一行
如果(LastCol>2),则
'检查第2列以结束内容
对于c=2到LastCol
rngParent=表单元格(r,“A”).值
initChild=sheet.Cells(r,c).Value
如果(initChild“”),则
'将软件和verison值写入草稿页
wsVersionList.Cells(CurRow,1)=rngParent
wsVersionList.Cells(CurRow,2)=initChild
'增加到下一行
电流=电流+1
如果结束
下一个c
如果结束
下一个r
端接头

据我所知,您只是想得到一个两列列表,其中包含第一列中项目的每个组合以及该项目后面各列中的每个数字。在数据集中这样做是可能的,但老实说,如果我们把它写进一张新的表中,那就简单多了。只需对现有代码进行一些小的修改就可以做到这一点

Sub createVersions()
Dim sheet As Worksheet
Set sheet = ActiveSheet

'Use a new sheet instead of messing with the base data
Dim wsVersionList As Worksheet
Set wsVersionList = ThisWorkbook.Sheets.Add

'Loop through columns in Excel sheet
Dim LastRow As Long, LastCol As Integer, c As Integer, r As Long

LastRow = sheet.UsedRange.Rows(sheet.UsedRange.Rows.Count).Row
LastCol = sheet.UsedRange.Columns(sheet.UsedRange.Columns.Count).Column

Dim CurRow As Long
CurRow = 1

For r = 1 To LastRow
   If (LastCol > 2) Then
   'Check column 2 to end for contents
      For c = 2 To LastCol
         rngParent = sheet.Cells(r, "A").Value
         initChild = sheet.Cells(r, c).Value

            If (initChild <> "") Then
                'Write the software and verison values into the scratch sheet
                wsVersionList.Cells(CurRow, 1) = rngParent
                wsVersionList.Cells(CurRow, 2) = initChild
                'Increment to the next row
                CurRow = CurRow + 1
            End If
         Next c
      End If
Next r

End Sub
Sub-createVersions()
将工作表设置为工作表
设置工作表=活动工作表
“使用新的工作表,而不是混乱的基础数据
将wsVersionList设置为工作表
设置wsVersionList=ThisWorkbook.Sheets.Add
'循环浏览Excel工作表中的列
Dim LastRow为长,LastCol为整数,c为整数,r为长
LastRow=sheet.UsedRange.Rows(sheet.UsedRange.Rows.Count).Row
LastCol=sheet.UsedRange.Columns(sheet.UsedRange.Columns.Count).Column
暗咖喱一样长
CurRow=1
对于r=1到最后一行
如果(LastCol>2),则
'检查第2列以结束内容
对于c=2到LastCol
rngParent=表单元格(r,“A”).值
initChild=sheet.Cells(r,c).Value
如果(initChild“”),则
'将软件和verison值写入草稿页
wsVersionList.Cells(CurRow,1)=rngParent
wsVersionList.Cells(CurRow,2)=initChild
'增加到下一行
电流=电流+1
如果结束
下一个c
如果结束
下一个r
端接头

哦,我成功了,只需将工作簿调用更改为Set-wsVersionList=ActiveWorkbook.Sheets。添加感谢您的帮助哦,我成功了,只需将工作簿调用更改为Set-wsVersionList=ActiveWorkbook.Sheets。添加感谢您的帮助