【问题标题】:Split Cell's Vertical Text Into Multiple Columns将单元格的垂直文本拆分为多列
【发布时间】:2018-09-03 19:09:03
【问题描述】:

我有一个包含地址的 Excel 单元格。我希望将地址拆分为单独的单元格:

地址 城市 状态 邮编

独特之处在于这些项目是垂直堆叠的,否则我会简单地使用 Data > Text to Columns:

更新:我尝试了分隔符选项,但是我无法拆分所有行:

【问题讨论】:

  • 如果您使用的是具有快速填充功能的更新版本的 excel,您可以使用该功能来完成。开始只在下一列中输入名称,在 2 个单元格之后,excel 应该会提示您自动填充该列的其余部分。您必须对每一列重复此操作。
  • 谢谢,肯定是在寻找更自动化的解决方案
  • 它只是垂直“显示”(因为您为该单元格启用了自动换行按钮)。如果你换行,你会发现它实际上只是一条长线。 (偶尔会有换行符。)
  • @ashleedawg 这显然是不是!查看“包裹”线的长度 - 它们比单元格中的可用空间短很多。我坚信所有“换行”仅由换行符完成。
  • Excel文件是从QB在线导出的

标签: excel


【解决方案1】:

soooo 接近解决方案 :) 是的,Data -> Text to columns 是。

诀窍是您使用 Ctrl+J 作为分隔符,这将输入new-line 字符。

信用:https://trumpexcel.com/split-multiple-lines/

顺便说一句,Google 搜索的字符串是 excel split cells with multiple lines

【讨论】:

  • 我已经尝试了该解决方案,但它并没有按预期工作,请查看更新的问题
  • John 和 Smith 是如何换位的?
【解决方案2】:

下面将转换一列中的长列表。如果您只有一个单元格的联系信息,最好手动完成。

Option Explicit

Sub gatherAddress()
    Dim i As Long, var As Variant, tmp As Variant

    With Worksheets("sheet2")
        'put the new header labels in the top row
        .Cells(1, "B").Resize(1, 4) = Array("Address", "City", "State", "Zip")

        'collect the values from column A
        var = .Range(.Cells(2, "A"), .Cells(.Rows.Count, "A").End(xlUp)).Value2

        'make room for processed values
        ReDim Preserve var(LBound(var, 1) To UBound(var, 1), _
                           LBound(var, 2) To UBound(var, 2) + 4)

        'process the address into separate cells
        For i = LBound(var, 1) To UBound(var, 1)
            'split the billing address on the linefeed
            tmp = Split(var(i, 1), vbLf)

            'strip address line
            var(i, 2) = tmp(1)
            'strip city
            var(i, 3) = Split(tmp(2), Chr(44))(0)
            'strip city and zip
            var(i, 4) = Split(tmp(2), Chr(44))(1)
            'strip zip/zip+4 code
            var(i, 5) = Split(var(i, 4), Chr(32))(UBound(Split(var(i, 4), Chr(32))))
            'remove zip from city
            var(i, 4) = Trim(Replace(var(i, 4), var(i, 5), vbNullString))
        Next i

        'put the processed values back into the worksheet
        .Cells(2, "A").Resize(UBound(var, 1), UBound(var, 2)) = var
    End With

End Sub

【讨论】:

  • 非常感谢帮助,但对excel编程不熟悉。我将在哪里运行此代码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多