使用VBA,如何选择行范围内的每个其他单元格(要垂直复制和粘贴)?

时间:2010-04-01 00:42:58

标签: ms-office vba parsing

我有一个2200+页面的文本文件。它通过数据交换从客户交付给我们用星号分隔值和波浪号(〜)表示行的结尾。该文件作为Word中的文本文件发送给我。大多数行分为两行(1行覆盖整行,部分覆盖第二行)。我一次将它的段(10页块)传输到Excel中,不幸的是,在行的末尾出现的任何零都会在“text to columns”过程中被丢弃。所以,我会注意每一个“长”行,以确保零没有丢失,并手动重新输入任何零。

以下是一小部分样本数据:

SDQ EA 92 1551 378 1601 151 1603 157 1604 83

“SDQ,EA和92”无关紧要(数据传输的伪像)。我想使用Excel和/或VBA来选择1551,1601,1603和1604(这些是商店号码),这样我就可以复制这些值,并转置它们垂直粘贴。然后我将返回并复制378,151,157和83(销售价值),以便我可以将它们转贴到商店编号旁边。接下来的两行数据包含相同的商店编号,但会提供相应的美元值。我只需要复制美元值,这样它们就可以在单位值旁边垂直粘贴转置(例如378,151,157和83)。

只需将光标放在行中感兴趣的第一个单元格上并运行宏来复制其他所有单元格,就可以大大加快我的工作速度。我已尝试使用ActiveCellOffset引用来选择要复制的范围,但尚未成功。对我有什么建议吗?在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果没有关于该文件的更多信息,很难给出完整的答案。

我认为如果您的输入数据长度超过2200页,那么使用默认的excel打开功能打开它是不太可能的。特别是因为Excel具有最大行数和列数。如果文件是文本文件(.txt),我建议用VBA打开它,一次读取一行,然后处理数据。

这是一个让你入门的例子。请记住,这是将每行文本转换为数据列,因此在运行2200页文本之前,您将很快填充excel的所有列。但这只是一个例子。

Sub getData()
   dFile = FreeFile
   sFile = "c:\code\test.txt"

   Open sFile For Input As #dFile
    c = 1
    'keep doing this until end of file
    Do While Not EOF(dFile)
      'read line into dataLine
      Input #dFile, dataLine
      ' break up line into words based on spaces
      j = Split(dataLine, " ")
      jLength = UBound(j)
      If jLength > 2 Then
        r = 1
        'ignore first 3 words
        'and get every other word
        'transpose rows of text into columns
        For word = 3 To jLength Step 2
            Cells(r, c) = j(word)
            r = r + 1
        Next word
      End If
      c = c + 1
    Loop
  Close #Data
End Sub