{"id":158,"date":"2008-10-23T23:29:45","date_gmt":"2008-10-24T05:29:45","guid":{"rendered":"http:\/\/bililite.nfshost.com\/blog\/?p=158"},"modified":"2008-10-23T23:30:44","modified_gmt":"2008-10-24T05:30:44","slug":"turning-a-table-into-a-list-in-excel","status":"publish","type":"post","link":"https:\/\/bililite.com\/blog\/2008\/10\/23\/turning-a-table-into-a-list-in-excel\/","title":{"rendered":"Turning a table into a list in Excel"},"content":{"rendered":"The yomim tovim are over, so I will hopefully have a chance to play with jQuery again. But on the programming side, one thing I had to do was turn a table of honors, something like this:\r\n<table border=\"1\">\r\n<tbody>\r\n<tr><td><\/td><td>Rosh Hashana 1<\/td><td>Rosh Hashana 2<\/td><td>Yom Kippur<\/td><\/tr>\r\n<tr><td>Maariv<\/td><td>Person 1<\/td><td>Person 2<\/td><td>Person 3<\/td><\/tr>\r\n<tr><td>Shacharit<\/td><td>Person 4<\/td><td>Person 5<\/td><td>Person 6<\/td><\/tr>\r\n<tr><td>Musaf<\/td><td>Person 7<\/td><td>Person 8<\/td><td>Person 9<\/td><\/tr>\r\n<\/tbody>\r\n<\/table>\r\nAnd turn it into this:\r\n<table border=\"1\">\r\n<tr><td>When<\/td><td>What<\/td><td>Who<\/td><\/tr>\r\n<tr><td>Rosh Hashana 1<\/td><td>Maariv<\/td><td>Person 1<\/td><\/tr>\r\n<tr><td>Rosh Hashana 1<\/td><td>Shacharit<\/td><td>Person 4<\/td><\/tr>\r\n<tr><td>Rosh Hashana 1<\/td><td>Musaf<\/td><td>Person 7<\/td><\/tr>\r\n<tr><td>Rosh Hashana 2<\/td><td>Maariv<\/td><td>Person 2<\/td><\/tr>\r\n<tr><td>Rosh Hashana 2<\/td><td>Shacharit<\/td><td>Person 5<\/td><\/tr>\r\n<tr><td>Rosh Hashana 2<\/td><td>Musaf<\/td><td>Person 8<\/td><\/tr>\r\n<tr><td>Yom Kippur<\/td><td>Maariv<\/td><td>Person 3<\/td><\/tr>\r\n<tr><td>Yom Kippur<\/td><td>Shacharit<\/td><td>Person 6<\/td><\/tr>\r\n<tr><td>Yom Kippur<\/td><td>Musaf<\/td><td>Person 9<\/td><\/tr>\r\n<tbody>\r\n<\/tbody>\r\n<\/table>\r\n<!--more-->\r\nI used code like this:\r\n<pre><code class=\"language-vb\">\r\nSub createlist()\r\n    Dim source As Range\r\n    Set source = Range(\"B2:D4\")\r\n    Dim dest As Range\r\n    Set dest = Range(\"F1\")\r\n    dest.Range(\"A1:C1\").Value = Array(\"When\", \"What\", \"Who\")\r\n    Dim target As Range\r\n    Dim c As Range\r\n    For Each c In source.Cells\r\n        If Not IsEmpty(c.Value) Then\r\n            If IsEmpty(dest.Range(\"A2\").Value) Then\r\n                Set target = dest.Range(\"A2\")\r\n            Else\r\n                Set target = dest.End(xlDown).Range(\"A2\")\r\n            End If\r\n            target.Range(\"C1\").Formula = \"=\" & c.Address\r\n            target.Range(\"B1\").Formula = \"=\" & c.EntireRow.Range(\"A1\").Address ' row header\r\n            target.Range(\"A1\").Formula = \"=\" & c.EntireColumn.Range(\"A1\").Address ' column header\r\n        End If\r\n    Next c\r\nEnd Sub\r\n<\/code><\/pre>\r\n\r\n<p>The key tricks was getting column\/row headers with <code class=\"language-vb\">.EntireColumn\/Row.Range(\"A1\")<\/code>, and appending to the end of a list with\r\n<code class=\"language-vb\">.End(xlDown).Range(\"A2\")<\/code>. Unfortunately, <code>End(xlDown)<\/code> is too clever; if the region contains only one item (like the column header only), it goes all the way to the end of the spreadsheet and the <code>.Range(\"A2\")<\/code>, which should get the <em>next<\/em> line, throws an error. Hence the <code class=\"language-vb\">If IsEmpty(dest.Range(\"A2\").Value) Then<\/code>.<\/p>\r\n<p>The <code class=\"language-vb\">If Not IsEmpty(c.Value) Then<\/code> line allows for blank spots in the original table to be ignored. VBA doesn't have a <code>Continue<\/code> statement, just an equivalent for <code>break<\/code>, called <code class=\"language-vb\">Exit For<\/code>.","protected":false},"excerpt":{"rendered":"The yomim tovim are over, so I will hopefully have a chance to play with jQuery again. But on the programming side, one thing I had to do was turn a table of honors, something like this: Rosh Hashana 1Rosh Hashana 2Yom Kippur MaarivPerson 1Person 2Person 3 ShacharitPerson 4Person 5Person 6 MusafPerson 7Person 8Person 9 [&hellip;]","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"_links":{"self":[{"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/posts\/158"}],"collection":[{"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/comments?post=158"}],"version-history":[{"count":11,"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/posts\/158\/revisions"}],"predecessor-version":[{"id":169,"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/posts\/158\/revisions\/169"}],"wp:attachment":[{"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/media?parent=158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/categories?post=158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bililite.com\/blog\/wp-json\/wp\/v2\/tags?post=158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}