用于将逗号分隔列表分隔为列的Word宏

时间:2015-09-11 19:17:44

标签: ms-word word-vba

我有一组非常大的数据,它们以x0,y0,z0,x1,y1,z1 ... xn,yn,zn的形式表示笛卡尔坐标。我需要在每个xyz坐标的末尾创建一个新行。我一直在尝试录制一个从每行开头移动一定数量空格的宏,然后创建一个新行。当然,这不起作用,因为每个xyz坐标中的位数不同。

如何在Microsoft Word中创建宏来执行此操作?

2 个答案:

答案 0 :(得分:0)

试试这个:

Public Sub test()
    Dim s As String
    Dim v As Variant
    Dim t As String
    Dim I As Long
    s = "x0,y0,z0,x1,y1,z1,xn,yn,zn"
    v = Split(s, ",")
    t = ""
    For I = LBound(v) To UBound(v)
        t = t + v(I)
        If I Mod 3 = 2 Then
            t = t + vbCr
        Else
            t = t + ","
        End If
    Next I
    t = Left(t, Len(t) - 1)
    Debug.Print t
End Sub

Split函数沿您指定的分隔符(在您的情况下为逗号)中分割字符串,并将结果返回到基于0的数组中。然后在For循环中,我们将碎片重新拼接在一起,每个第三个元素使用回车符(vbCR),否则使用逗号。

最后(可选)步骤是删除尾随回车。

希望有所帮助

答案 1 :(得分:0)

摆在我们面前的问题最为明确 “请生成一个足以完成任务的宏 我有笛卡尔坐标,这一行中有一行 如果你愿意,可以将它们排成多行,三元组!“

本能地,我们开始编码,这个任务的解决方案 经常不问,“这种方式真的最好吗?” 但是另一个方案来自于思想 最受尊敬的二人组:单词替换和查找

提供两个文本框,每个文本框都有一个句号 检查通配符选项并为Amazation做准备!

原谅我!

  1. 在Word中打开查找/替换
  2. 点击More按钮,然后查看Use wildcards
  3. Find what输入([!,]{1,},[!,]{1,},[!,]{1,}),
  4. Replace with输入\1^p
  5. 照常使用Find NextReplaceReplace All
  6. 工作原理
    使用通配符时,[!,]{1,}会找到一个或多个不是逗号的字符。这个成语重复3次,用2个逗号分隔3个实例。这将匹配3个逗号分隔的坐标。然后将整个表达式包装在括号中以创建自动编号的组(在本例中为组#1)。创建组允许我们保存与模式匹配的文本并在Replace框中使用它。括号外面还有一个逗号,它将一个坐标三元组与下一个坐标分开。

    Replace框中\1检索自动编号的组1,这是我们的坐标三元组。接下来是^p,这是Word中的新段落。

    希望有所帮助!