Vba excel宏:对于行中有值的每个单元格,请在下面插入一行

Vba excel宏:对于行中有值的每个单元格,请在下面插入一行,vba,excel,Vba,Excel,我有一个约700行7列的工作表。我需要每行只有一个条目。即,如果第1行在A、B和C列中有单元格值,则应创建两个新行,以便第1行在A列中有一个值,第2行在B列中有一个值,第3行在C列中有一个值 我为此花了几个小时(很遗憾),但我太糟糕了,我一事无成: Sub TThis() Dim rng As Range Dim row As Range Dim cell As Range 'just testing with a basic range Set rng = Range("A1:C2")

我有一个约700行7列的工作表。我需要每行只有一个条目。即,如果第1行在A、B和C列中有单元格值,则应创建两个新行,以便第1行在A列中有一个值,第2行在B列中有一个值,第3行在C列中有一个值

我为此花了几个小时(很遗憾),但我太糟糕了,我一事无成:

Sub TThis()
Dim rng As Range
Dim row As Range
Dim cell As Range

'just testing with a basic range
Set rng = Range("A1:C2") 

For Each row In rng.Rows
  For Each cell In row.Cells
If cell.Value <> "" Then
        'write to adjacent cell
        Set nextcell = cell.Offset(1, 0)
        nextcell.Value = cell.Value
        nextcell.EntireRow.Insert
    End If
Next cell
Next row
End Sub
Sub ttthis()
变暗rng As范围
暗行作为范围
暗淡单元格作为范围
“只是用一个基本范围进行测试
设置rng=范围(“A1:C2”)
对于rng.行中的每一行
对于行中的每个单元格。单元格
如果单元格的.Value为“”,则
'写入相邻单元格
Set nextcell=cell.Offset(1,0)
nextcell.Value=cell.Value
nextcell.EntireRow.Insert
如果结束
下一个细胞
下一排
端接头
我的问题是,这段代码删除了它下面的行(这是不应该发生的) 它插入两行而不是一行


非常感谢

我会将您的数据读入数组,删除工作表上的数据,然后在单列中写回工作表(同时检查空格)

例如:

Sub OneColumnData()
    Dim rng As Range, ids As Range, arr() As Variant, rw As Integer, col As Integer, counter As Integer

    Set rng = Range("A1:C5")
    Set ID = Range("G1:G5")

    arr = rng.Value
    counter = 1

    rng.ClearContents

    For rw = 1 To UBound(arr, 1)
        For col = 1 To UBound(arr, 2)
            If arr(rw, col) <> vbNullString Then
                Range("A" & counter) = arr(rw, col)
                Range("B" & counter) = ID(rw)
                counter = counter + 1
            End If
        Next col
    Next rw
End Sub
Sub-OneColumnData()
Dim rng作为范围,ids作为范围,arr()作为变量,rw作为整数,col作为整数,计数器作为整数
设置rng=范围(“A1:C5”)
设置ID=范围(“G1:G5”)
arr=平均值
计数器=1
rng.ClearContents
对于rw=1至UBound(arr,1)
对于col=1至UBound(arr,2)
如果arr(rw,col)vbNullString,则
范围(“A”和计数器)=arr(rw,col)
范围(“B”和计数器)=ID(rw)
计数器=计数器+1
如果结束
下一列
下一个rw
端接头

最简单的方法是将A1转换为D1,B1转换为D2,C1转换为D3,依此类推。然后,完成后,删除前三列。瞧,你的行在A范围内。让我为你写一个快速的程序来演示。太棒了!但是,我忘了提到一件非常重要的事情:每一行都有一个ID 9,以G为参考。当你将A1的值转移到D1等时,是否有可能给新行同样的ID以G为单位?在我的快速小程序中,Alex P更快,并且有一个比我更好的答案!这太棒了!还有一件小事,每一行都有一个ID(一系列数字和字母),有没有办法将每个值放在其各自的ID旁边?例如,在我最初给出的示例中,第1行、第2行和第3行都应该有相同的ID,但第4行会有不同的ID,ID在哪里?实际上,在D?G列中,但我可以将其移动到任何地方,我已经更新了代码以在G列中获取您的ID。如果这样做有效,请告诉我。在一个简单的测试中它对我起了作用。