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

我正在复制基于HTML的内容并将其粘贴到电子表格中。 我需要重复这个过程在会计凭证中的多行。 由于复制string的值或长度发生变化,空格不均匀,所以我不认为使用LEFTRIGHTMID函数是可行的。

尽pipe源内容在六个相邻的水平单元格/列中以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 

我已经尝试了每个粘贴特殊格式,没有工作。 我也尝试录制一个macros,从单元格中删除五个数字值,并根据需要分别在相邻的列中分别粘贴。

以下是录制的macros:

 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 

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

如何剪切(不复制)单元格中string的数值部分并将剪切值粘贴到相邻的单元格中? 如果问题需要更具体:(1)如何使用相对引用自动切割任何选定单元格的一部分? (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 

您可以使用正则expression式,这是一个更强大的string模式匹配拆分您的string跨不同的单元格。 试试这个代码:

 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. 将要分割的string复制到剪贴板中
  2. select您要在Excel中粘贴数据的单元格
  3. 运行macros
  4. 将值粘贴到出现的input框中
  5. 数据应该出现在选定的单元格中