Excel:如何将部分单元格内容复制到各个行的其他相邻单元格中

时间:2016-06-07 23:23:33

标签: excel vba excel-vba

我正在复制基于HTML的内容并将其粘贴到电子表格中。我需要在会计凭证中为多行重复此过程。由于复制的字符串的值或长度发生变化且空格不均匀,我认为使用LEFTRIGHTMID函数不会起作用。

虽然源内容在HTML中以六个相邻的水平单元格/列显示为表格,但Excel将其视为unicode并将其粘贴到一个单元格中(请注意,列空间不均匀;显示的所有内容都在一个单元格中作为文本):

Revenues   111,234   222,345    333,456    444,567       555,678
Revenues   666,789   777,890    888,901    999,012       1,111,234

它应该像这样粘贴(使用制表符作为分隔符):

Revenues    111,234 222,345 333,456 444,567 555,678
Revenues    666,789 777,890 888,901 999,012 1,111,234

我已尝试过每种粘贴特殊格式,但都没有效果。我还尝试录制一个宏,它从单元格中剪切五个数值,并根据需要将它们分别粘贴到相邻的列中。

以下是录制的宏:

Sub Copy_Cell_Part_and_Paste_In_Adjacent_Cells()
'
' Copy_Cell_Part_and_Paste_In_Adjacent_Cells Macro
'
' Keyboard Shortcut: Ctrl+u
'
    ActiveCell.FormulaR1C1 = "Revenues   "
    Range("B1").Select
    ActiveSheet.Paste
    ActiveCell.FormulaR1C1 = "111,234"
    Range("C1").Select
    ActiveSheet.Paste
    ActiveCell.FormulaR1C1 = "222,345"
    Range("D1").Select
    ActiveSheet.Paste
    ActiveCell.FormulaR1C1 = "333,456"
    Range("E1").Select
    ActiveSheet.Paste
    ActiveCell.FormulaR1C1 = "444,567"
    Range("F1").Select
    ActiveSheet.Paste
End Sub

是的,宏有许多问题,包括使用绝对值而不是相对引用,并将原始单元格内容复制到右边的第五个单元格。

如何剪切(不复制)单元格中字符串的数值部分并将剪切值粘贴到相邻单元格中?如果问题需要更具体:(1)如何使用相对参考自动切割任何选定单元格的一部分? (2)如何将这些切割细胞的内容分发到相邻细胞?

编辑:更改为澄清数组应该是选定的单元格,可能在一列中的多行中

2 个答案:

答案 0 :(得分:2)

假设您在单元格A1中有源文本,您可以尝试:

Dim myArr as Variant
myArr = Split(WorksheetFunction.Trim(Range("A1"))
Range("B1").Resize(,Ubound(myArr) - LBound(myArr) + 1).Value = myArr

或者这个

Range("A1").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, ConsecutiveDelimiter:=True, Space:=True

答案 1 :(得分:1)

你可以使用正则表达式,它是一个更强大的字符串模式匹配,可以跨不同的单元格分割你的字符串。试试这段代码:

Sub PasteInCells()
    Dim regex As Object: Set regex = CreateObject("VBScript.RegExp")
    Dim match As Object
    regex.Global = False
    regex.Pattern = "(\w+)\s+([\d,]+)\s+([\d,]+)\s+([\d,]+)\s+([\d,]+)\s+([\d,]+)"

    Dim strClip As String
    strClip = InputBox("Paste data you want to split", "Paste in Cells")
    Debug.Print strClip
    Set match = regex.Execute(strClip)
    If match.Count <> 0 Then
        For i = 0 To match(0).submatches.Count - 1
            Debug.Print match(0).submatches(i)
            ActiveCell.Offset(0, i).Value = match(0).submatches(i)
        Next
    Else
        MsgBox "Pasted values do not match pattern!", vbCritical
    End If
End Sub

要使用它:

  1. 将要拆分的字符串复制到剪贴板
  2. 选择要在excel中粘贴数据的单元格
  3. 运行宏
  4. 将值粘贴到出现的输入框
  5. 数据应出现在所选单元格中