关于 Excel 的简单问题(我希望如此)

关于 Excel 的简单问题(我希望如此)

我正在为我的邻居制作目录。我们从以前的目录中获得了大部分信息。输入的信息为:A1 姓名、B1 地址和 C1 电话号码;B1 姓名、B2 地址、C2 电话号码等。发布者希望以不同的格式显示信息:A1 姓名、A2 地址、A3 电话号码、A4 空白;A5 姓名、A6 地址、A7 电话号码、A8 空白等... 有没有一种简单(或者说不那么简单)的方法可以让 Excel 更改信息的格式,而无需我手动输入 1300 个家庭的信息?

我还需要将信息重新格式化为十字形。该格式为:A1 街道名称、A2 地址号、B2 住户姓名和 C2 电话号码。

答案1

Excel 有一个功能可以做到这一点,例如从 A1 A2 A3 移动到 A1 B1 C1。选择相关数据,复制它,然后转到要粘贴它的区域。然后不要简单地粘贴,而是粘贴“选择性粘贴”(或粘贴内容或任何内容,德语中为“inhalte einfügen”;-))。即将出现的对话框中有一个转置复选框,可帮助您找到解决方案。

答案2

将此宏添加到您的 Excel,并在选择包含您的地址数据的工作表时运行“MyTranspose”。

Option Explicit

'Copy all the data from the active sheet into a  new worksheet
' and transpose all the columns into a single column
Sub MyTranspose()
    Dim r As Range
    Dim wsNew As Worksheet
    Dim wsCurrent As Worksheet

    Set wsCurrent = ActiveSheet
    Set wsNew = Worksheets.Add(Before:=Sheets(1))

    For Each r In wsCurrent.UsedRange.Rows
        r.Copy
        wsNew.Cells(LastRowOnWS(wsNew, 1) + 2, 1).PasteSpecial Transpose:=True
    Next r

    Application.CutCopyMode = False
    Set wsCurrent = Nothing
    Set wsNew = Nothing
End Sub

'Find the last row used in column 'col'
Function LastRowOnWS(ByVal ws As Worksheet, _
                     Optional ByVal col As Long = 1) As Long
    LastRowOnWS = ws.Cells(65536, col).End(xlUp).Row
End Function

答案3

第一个 - 将数据表转换为单列,每个记录之间用空行分隔 - 我实际上是在 Word 中执行此操作。将数据复制并粘贴到 Word 中,使用 Tab 作为列分隔符将表格转换为文本,用两个段落标记替换每个现有段落标记(^p 替换为 ^p^p),用一个段落标记替换每个制表符(^t 替换为 ^p),然后将结果复制并粘贴回 Excel。

对于第二项任务,如果地址的格式为美国常用格式 - 123 Main Street - 那么您需要使用 Excel 的文本处理功能将地址编号与街道名称分开。如果地址位于 B 列(并且始终有一个空格将编号与街道分开),则在 D1 中输入

=Trim(Left(B1,Find(" ",B2)))

在 E1 中,输入

=Trim(Right(B1,Len(B1)-Len(D1)))

并向下填充。然后,像以前一样,使用 Word 策略性地用段落标记替换制表符,以获得所需的排列。

如果它很愚蠢但它有效,那它就不是愚蠢的。:)

答案4

这个问题最好属于http://superuser.com,但既然您已经在 SO(一个编程讨论网站)中提问了……

我肯定会做以下事情:

  1. 将数据导出到 .csv 文件
  2. 使用 Python 等强大的编程语言操作 .csv 文件
  3. 将新的 .csv 文件导入回 Excel

学习这样的工具对每个人都有好处,而不仅仅是程序员!

相关内容