Excel 2013macros – 表格到列(用于文本分析)

我正在尝试移动一些数据,以便于进行一些基本的文本挖掘。 我有一个表格,每行都有一行,第一列作为标识符,下面的“N”列是这个词。 例:

Record Word1 Word2 Word3 Word N 1 The quick brown fox 2 jumps over the 3 lazy white 4 dog 

我需要将表格格式的数据移动到一个列表中,每行一个单词,以及该单词所在的logging。

例:

 Record Word 1 the 1 quick 1 brown 1 fox 2 jumps 2 over 2 the 3 lazy 3 white 4 dog 

我发现macros把整个表放在一列中,但不是我需要确定哪个单词出现在哪个logging中的方式( Excelmacros:从表到列 )

我还在这里find了下面的代码: http : //community.spiceworks.com/scripts/show/1169-excel-table-to-single-column

 Option Explicit Public Sub DoCopies() Dim lRowIdx As Long Dim lColIdx As Long Dim lRowStart As Long Dim lRowOut As Long Dim s1 As Worksheet Dim s2 As Worksheet Dim oBook As Workbook Dim r As Range Dim lRows As Long Dim lCols As Long On Error GoTo errorExit Application.DisplayAlerts = False Set oBook = ThisWorkbook Set s1 = Worksheets(1) ' remove other tabs While (oBook.Sheets.Count > 1) oBook.Sheets(oBook.Sheets.Count).Delete Wend ' create the new tab Set s2 = oBook.Worksheets.Add(After:=oBook.Worksheets(oBook.Worksheets.Count)) s2.Name = "Result" Set r = s1.UsedRange lCols = r.Columns.Count lRows = r.Rows.Count 'skip header lRowStart = 1 While (Trim$(s1.Cells(lRowStart, 1) = "")) lRowStart = lRowStart + 1 Wend lRowStart = lRowStart + 1 ' Take each row, put on tab 2 For lRowIdx = lRowStart To lRows If (Trim$(s1.Cells(lRowIdx, 1)) <> "") Then For lColIdx = 1 To lCols lRowOut = lRowOut + 1 s2.Cells(lRowOut, 1) = s1.Cells(lRowIdx, lColIdx) Next lColIdx End If Next lRowIdx s2.Activate Application.DisplayAlerts = True Exit Sub errorExit: Application.DisplayAlerts = True Call MsgBox(CStr(Err.Number) & ": " & Err.Description, vbCritical Or vbOKOnly, "Unexpected Error") End Sub 

但是这个macros返回这样的数据:

 1 The quick brown fox 2 jumps over the <null> 3 lazy white <null> <null> 4 dog <null> <null> <null> 

我试着玩代码,但无法弄清楚。

任何帮助,将不胜感激。 谢谢!

微软有效地为您编写了大部分代码。 所有缺less的是过滤列Value来select(Blanks) ,然后删除这些行 – 并更改列标签,删除一列。 详情在这里 。

感谢pnuts指引我正确的方向。 你的链接有Pankaj Jaju的评论,提供了我需要的确切脚本:

 Sub NormaliseTable() ' start with the cursor in the table Dim rTab As Range, C As Range, rNext As Range Set rTab = ActiveCell.CurrentRegion If rTab.Rows.Count=1 Or rTab.Columns.Count = 1 Then MsgBox "Not a well-formed table!" Exit Sub End If Worksheets.Add ' the sheet for the results Range("A1:C1") = Array("Row","Column","Value") Set rNext = Range("A2") For Each C In rTab.Offset(1,1).Resize(rTab.Rows.Count-1, _ rTab.Columns.Count-1).Cells If Not IsEmpty(C.Value) Then rNext.Value = rTab.Cells(C.Row-rTab.Row+1,1) rNext.Offset(0,1).Value = rTab.Cells(1,C.Column-rTab.Column+1) rNext.Offset(0,2).Value = C.Value Set rNext = rNext.Offset(1,0) End If Next End Sub 

再次感谢您的指导!