我正在为我的邻居制作目录。我们从以前的目录中获得了大部分信息。输入的信息为: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(一个编程讨论网站)中提问了……
我肯定会做以下事情:
- 将数据导出到 .csv 文件
- 使用 Python 等强大的编程语言操作 .csv 文件
- 将新的 .csv 文件导入回 Excel
学习这样的工具对每个人都有好处,而不仅仅是程序员!