【问题标题】:Cleaning data using macro使用宏清理数据
【发布时间】:2015-10-23 11:42:06
【问题描述】:

如果可能的话,我需要帮助创建 excel 宏来清理我的电子表格中的一些字段。

我收到了包含不同数量记录的 Excel 电子表格。在以下电子表格中,我需要格式化 First Name / Last Name / Job Title / City 等字段(我在手动操作时使用了 excel Proper() 函数)。最重要的是,我还需要用另一张表中的标准值替换 Industry 字段。并且:要替换 State(从短值,例如 TX 到 Texas),也将 Country 从 us or usa 或 United States of America 替换为“United States”。 (当我手动执行此操作时,我使用了 VlookUp() 函数)。

示例: 我有电子表格,例如:

表 1,数据:

FName LName Email Title City ST Phone Industry Country John sm j@hotmail.com it dallas TX 5556663344 mobile us jess lee jess@aol.com ba ny ny 6667775656 art usa nick Jahn nick@aol.com ba raleigh ny 444-3338888 tech us

Sheet2,状态:

ST ST_Full TX Texas NY New York NC North Carolina

等等。 -> 所有美国/加拿大州列表

表 3,行业:

Industry Industry_Correct Mobile Telecom Art Other Tech Technology

等等。 -> 正确/错误行业的所有可能变化列表

表 4,国家/地区:

Country
Angola Canada Russian Federation United States

对于工作表 4,我有 200 多个国家/地区的字母列表,需要将“我们”“俄罗斯”等国家/地区替换为列表中的正确名称。

结果表,(期望有什么):

FName LName Title City ST Phone Industry Country John Sm It Dallas Texas 555-666-3344 Telecom United States Jess Lee Ba New York New York 666-777-5656 Other United States Nick Jahn Ba Raleigh New York 444-333-8888 Technology United
States

email j@hotmail.com jess@aol.com nick@aol.com

我试图录制非常简单的宏;但我有非常不同的电子表格 - w。不同数量的记录 - 从 5 到 2000 或 3000 条记录。 简单录制的宏只能以某种方式清除 FIXED 数量的记录。

【问题讨论】:

  • 如果您共享您录制的清除固定数量记录的宏可能会有所帮助。
  • 我认为最简单的解决方案是使用 INDEX MATCH 或 VLOOKUP
  • 致布拉格人:我记录了很多步骤,使用excel函数清理所有字段。所以,不知道我是否可以在这里发布这个宏......另外,只是为了澄清 - 我只会在输入表中有各种(未定义)数量的记录 - 在表 1 中!这是那个宏:
  • 很遗憾分享太长了...

标签: excel vba


【解决方案1】:

听起来您的录制宏工作正常,只是它正在处理固定数量的记录。您需要使范围动态化,以便您的宏可以自动查看有多少行数据。没有看到你的代码,很难告诉你如何实现它。一般来说,这样的事情就可以解决问题:

Dim sht As Worksheet
Dim LastRow As Long

Set sht = ThisWorkbook.Worksheets("[sheet name]")
'Can also reference the sheet code, which is better in my opinion. Set sht = Sheet1 or whatever number your sheet is. 

'This will fetch the last row for you
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row

您可能会发现此网站对您有所帮助:http://www.thespreadsheetguru.com/blog/2014/7/7/5-different-ways-to-find-the-last-row-or-last-column-using-vba

回复您的 cmets: 您应该在代码的一开始就实现这一点。所以我们要做的是 1) 为宏设置工作表,2) 确定该工作表中的最后一行数据,以及 3) 然后您需要使用最后一行来设置宏的范围,或者至少通过您的宏并将第 1000 行替换为 LastRow。所以,除了我提供的代码,你可能还有类似的东西:

Dim myRange as Range: Set myRange = sht.Range("A2:Z" & LastRow)

然后,当您需要宏在该范围内执行某些操作时,您可以简单地引用 myRange。希望有帮助。如果需要,您应该能够编辑原始帖子以添加一些代码,而不是发布新帖子。 至于您的 IFERROR 问题,如果没有更多信息,很难说最正确的方法。一般来说,我认为使用 if/else 语句更好,但如果您需要复制 Excel 中内置的相同 iferror 功能,您当然可以只使用 WorksheetFunction.iferror(...)。

【讨论】:

  • 致杰克:谢谢!我的问题:我应该在我的宏中的哪个位置实现您的建议?我可以发布新主题 w。代码也是...
  • 另外,现在,我为 1 000 条记录录制了我的宏(因为我知道我们永远不会有超过 1K 条记录)并使用 IFERROR 函数添加了我想要显示的内容有错误。但是,我认为,这样做是不够的……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
  • 1970-01-01
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多