Excel VBA代码将多列转换为多行

时间:2013-09-03 12:18:50

标签: excel vba excel-vba

请有人帮忙,我是VBA的新手,我想提前感谢你的帮助。如果有任何链接我的问题已经解决,请指出我正确的方向。我在这里和其他网站上搜索过,但我找不到任何至少让我开始的东西。我想创建VBA代码,循环遍历每一行中的单元格,并将它们转换为单独的行,如下图所示。

我有一个包含12000行数据和多列的Excel电子表格。对于每一行,我将列“A”到“Q”作为静态字段。名称,DOB,ID_Number,e.t.c。从列“Q”到“DD”,我有关于“City”和“RegDate”列的重复数据,例如:City1,RegDate1,City2,RegDate2,City3,RegDate3,..& CityN,RegDateN。城市名称用作标题,数据单元格在每个注册人的城市下显示“R”,注册日期显示在旁边的列中,否则没有条目。

我想转换这些数据,以便对于每个人注册的城市,我将有一行新的数据显示静态字段“A”到“P”,“城市”和“RegDate”即在“P”栏后,我只有两列“城市”和“RegDate”。

我真的很难创建从列Q循环到列DD的代码,当遇到“R”时会创建一个新行将行“A”复制到“P”并插入城市的名称新列“Q”和新列“R”中的RegDate,然后转到下一行,直到所有12000行都已转换。

任何帮助我入门的人都会非常感激,特别是在设置循环时会为遇到“R”的每条记录创建一个新角色。

1 个答案:

答案 0 :(得分:0)

您是否考虑过将这些信息放在最右边的两个新列中( DE DF )?然后你可以隐藏 Q DD ,或删除这些列。

至于执行此操作的循环代码:

Dim cr As Long 'current row
Dim cc As Long 'current column
For cr = 2 To 12000
  For cc = 17 To 108 Step 2
    If Cells(cr, cc).Value = "R" Then
      'make column 109 (DE) in current row = city name
      Cells(cr, 109).Value = Cells(1, cc).Value
      'make column 110 (DF) in current row = date of registration
      Cells(cr, 110).Value = Cells(cr, cc + 1).Value
    End If
  Next
Next
相关问题