将某个单元格的多个部分复制到另一个工作表(一步到位)

时间:2018-03-17 21:51:46

标签: excel vba excel-vba excel-formula

想象一下,我的.txt文档包含如下原始数据:

20180214abcdfhkjvdafhkkjgbv trewfdgjklmbv
20180213fjgmhjlkjlkmghjdfdshkjlkjlkjlkjas
20180215qewwqretiumnbsfdljf erwuoiukjhjjk

但有超过23500行。我需要将这些信息拆分到不同的列中,如下所示:

2018---02---14---abcd---fhkjvda---fhkkjg---bv ---trew---fdgjklmbv
2018---02---13---fjgm---hjlkjlk---mghjdf---dsh---kjlk---jlkjlkjas
2018---02---15---qeww---qretium---nbsfdl---jf ---erwu---oiukjhjjk

其中---表示“另一栏”哈哈

这就是我所做的:

  • 首先,我将所有原始数据复制到Excel中的工作表

  • 然后,我将信息拆分到另一张表中:

       For i = 1 To lastRow
          ActiveWorkbook.Sheets("sht1").Range("A" & (i + firstRow)).Value = Mid(ActiveWorkbook.Sheets("rawData").Range("A" & i).Value, 1, 4)
          ActiveWorkbook.Sheets("sht1").Range("B" & (i + firstRow)).Value = Mid(ActiveWorkbook.Sheets("rawData").Range("A" & i).Value, 5, 2)
          ActiveWorkbook.Sheets("sht1").Range("C" & (i + firstRow)).Value = Mid(ActiveWorkbook.Sheets("rawData").Range("A" & i).Value, 7, 1)
       Next
    

但是它需要太长时间(比如10分钟,因为有超过23500行,然后我制作了一张桌子并做了很多其他的事情。)

所以,我需要这样的东西:“从所有这些细胞中取出这些角色并将它们粘贴在所有这些其他细胞中”。像这样:

 ActiveWorkbook.Sheets("sht1").Range("A" & (firstRow) & ":" & "A" & (firstRow + lastRow)).Value = Mid(ActiveWorkbook.Sheets("rawData").Range("A" & 1 & ":" & "A" & lastRow).Value, 1, 4)

但这不起作用。

它可以做类似的事情:

ActiveWorkbook.Sheets("sht1").Range("A" & (firstRow) & ":" & "A" & (firstRow + lastRow)).Value = 0

但是,而不是“0”,我想把之前提到的字符(例如,Mid(...,8,12)

我找不到任何解决方案,我真的需要它。谢谢:D

2 个答案:

答案 0 :(得分:2)

Text-to-Columns似乎是一种权宜之计。

Option Explicit

Sub splitDogsBreakfast()
    With Worksheets("rawData")
        With .Range(.Cells(1, "A"), .Cells(.Rows.Count, "A").End(xlUp))
            worksheets("sht1").cells(1, "A").resize(.rows.count, 1) = .value2
        end wth
    end with
    With Worksheets("sht1")
        With .Range(.Cells(1, "A"), .Cells(.Rows.Count, "A").End(xlUp))
            .TextToColumns Destination:=.Cells(1), DataType:=xlFixedWidth, _
                FieldInfo:=Array(Array(0, 1), Array(4, 1), Array(6, 1), Array(8, 1), Array(12, 1), _
                                 Array(19, 1), Array(25, 1), Array(28, 1), Array(32, 1))
        End With
    End With
End Sub

“数据”选项卡上提供了相同的命令。

答案 1 :(得分:2)

也许import HotTable from 'react-handsontable' 方法很有用,除了它会丢弃任何前导零。

要将其移至另一张纸,在执行“拆分”之前,只需将旧纸张范围复制到新纸张,然后在新纸张上进行拆分。

Range.Parse