编写宏以使用转置函数来处理文本字符串

时间:2013-04-30 15:14:59

标签: excel vba excel-vba

我正在尝试将文本行移动到Excel中的一个列中,该列位于新工作表中。转置功能运行良好,但一次只能移动一行。我想得到一个宏,将多个列中的数千行数据转换为一列。请参阅下面的示例(我已经用分号分隔了行中的每一列)。提前感谢您的帮助。

行:

Avila P, 2005, CHEM ENG J; Barbero BP, 2008, CHEM ENG J; Crookes R, 2004, SERIES MAT SUS APLIC
Duran FG, 2009, APPL CATAL B-ENVIRON;  Amini SK, 2004, CHEM PHYS LETT
Ali MH, 2005, SYNTHESIS-STUTTGART; Arya P, 2001, CURR OPIN CHEM BIOL; Balunas MJ, 2008, J NAT PROD

柱:

Avila P, 2005, CHEM ENG J
Barbero BP, 2008, CHEM ENG J
Crookes R, 2004, SERIES MAT SUS APLIC
Duran FG, 2009, APPL CATAL B-ENVIRON
Amini SK, 2004, CHEM PHYS LETT
Ali MH, 2005, SYNTHESIS-STUTTGART
Arya P, 2001, CURR OPIN CHEM BIOL
Balunas MJ, 2008, J NAT PROD

4 个答案:

答案 0 :(得分:2)

如果我正确地阅读了这个问题,我认为以下代码可行:

Dim c as Range, Rng as Range, cDest as Range
Dim x as long
Dim shOrig as worksheet, shDest as WorkSheet

Set shOrig = Sheets("NameOfSheetWithData")
Set shDest = Sheets("NameOfSheetToPasteTo")

Set Rng = shOrig.Range("A1:Z100") ' Set to range where data is held

Set cDest = shDest.Range("A1") ' Cell to start pasting data into

x = 0

For Each c In Rng
    If c.Value <> "" Then ' Skip blank cells
        cDest.Offset(x, 0).Value = c.Value
        x = x + 1
    End If
Next c

答案 1 :(得分:1)

Excel上有一个名为“Text to Columns”的功能,可用于解决此类问题。

选择数据,单击“文本到列”(在“数据”选项卡中),选择“分隔”,然后单击“下一步”,在这种情况下选择“分号”作为分隔符。

再次单击“下一步”时,对话框将显示结果的外观。每个集合将存储在同一行的不同列中。

默认情况下,原始数据将替换为第一列,除非您在对话框中更改目标。

单击“完成”以查看结果。

答案 2 :(得分:0)

使用Excel对象模型的新功能编写宏的标准技术,是一个不熟悉的,是:

  • 以微缩方式录制宏;
  • 然后使用VBA编辑器将宏扩展为完整大小。

答案 3 :(得分:0)

如果我理解正确,OP可以采用略微“正面”的方法,并且可以通过Word解决方案:

  1. 复制电子表格数据和主页&gt;剪贴板&gt;将特殊粘贴到Word中作为无格式文本。 (这会自动使用制表符替换单元格边界。)
  2. 选择,插入&gt;表&gt;表 - 将文本转换为表,列数设置为1(单独的文本应设置为选项卡)。
  3. 选择结果并粘贴回Excel。