我有一个大规模的excel(2010)文件,其组织方式如下:
- Column1 Column2
- 姓John。
- Doe姓氏
- 地址smth1
- ....
- 名称珍妮特
- 史密斯姓名
- 地址smth2
- ....
- 等
现在我想将它转换为具有正确标题的普通表,因此看起来像这样:
名字姓氏地址....
John Doe smth1
珍妮特史密斯smth2
PS这是我第一次在这里发帖。大家好!
答案 0 :(得分:0)
如果您的数据非常具体地包含您提出的数据,则以下内容应该有效。在运行代码之前,您需要:
此代码仅基于我在您的问题中提供的有限信息所做的假设而有效。
希望这有帮助。
Sub TextToTable()
Dim Temp As Variant, x As Long, i As Long, j As Long
Dim MyInputRange As Range
Dim MyOutputRange As Range
Dim MyOutput As Variant
Dim HasNumbering As Boolean
'===============================================================
'You MUST update the below before running the code
'===============================================================
'Highlight the range you want to convert before running this macro
Set MyInputRange = Selection
'Put in the output address (sheet name and range)
Set MyOutputRange = ThisWorkbook.Worksheets("SheetNameHere").Range("A1")
'Set this to false if the data doesn't have "1." and "2." etc at the start of each row
HasNumbering = True
'Tell the script how many columns your data has
Const ColumnCount As Long = 4
'===============================================================
'The below doesn't require your updating
Temp = MyInputRange.Value 'Temp is used to input the data from sheet
ReDim MyOutput(1 To UBound(Temp, 1), 1 To ColumnCount)
'Scrubs out numbering as required
If HasNumbering Then
For x = 1 To UBound(Temp, 1)
j = InStr(1, Temp(x, 1), ". ")
Temp(x, 1) = Right(Temp(x, 1), Len(Temp(x, 1)) - (j + 1))
Next x
End If
'Sets the table heading
i = 1
For x = 1 To ColumnCount
MyOutput(i, x) = Left(Temp(x, 1), WorksheetFunction.Max(InStr(1, Temp(x, 1), " ") - 1, 0))
Next x
'Builds the table data
j = 0: i = 2
For x = 1 To UBound(Temp, 1)
j = j + 1
If j > ColumnCount Then j = 1: i = i + 1
MyOutput(i, j) = Mid(Temp(x, 1), Len(MyOutput(1, j)) + 2, 9999)
Next x
'Outputs the data
MyOutputRange.Resize(i, ColumnCount).Value = MyOutput
End Sub
答案 1 :(得分:0)
您可以将以下公式放入新工作表中的单元格A1中,然后将其复制并反复复制,从而将所有数据复制到工作簿中的另一个工作表。
=OFFSET(Sheet1!$A$1,3*(ROW(A1)-1)+COLUMN(A1)-1,1)
我假设你的数据在Sheet1中,它从单元格A1开始。将Sheet1更改为工作表的实际名称,并更改$ A $ 1表示工作表中数据的实际开始($符号很重要)。
我还假设每个人有3个数据。如果还有更多,请将公式中的数字3更改为数据块数。
使用公式后,如果要使更改成为永久更改,请复制新数据并粘贴为值。这将破坏公式,但保留数据完整。