使用宏清理数据

时间:2015-10-22 16:05:15

标签: excel vba

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

我正在接收包含不同记录数量的excel电子表格。在以下电子表格中,我需要格式化名字 / 姓氏 / 职位名称 / 城市等字段(当我手动完成时,我使用了excel Proper()函数。最重要的是,我还需要用另一张表中的标准值替换行业字段。并且:取代(从短值,如TX到德克萨斯州),也将国家从我们或美国或美国取代为“美国”。 (当我手动执行此操作时,我使用了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,State:

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多个国家的字母顺序列表,需要将“us”“Russia”等国家替换为名单中的正确名称。

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

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数量的记录。

1 个答案:

答案 0 :(得分:0)

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

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

回复您的意见: 您应该在代码的最开头实现它。所以我们正在做的是1)设置宏的表单,2)确定该表中的最后一行数据,3)然后你需要使用最后一行来设置宏的工作范围,或者至少要通过你的宏并用LastRow替换第1000行。因此,除了我提供的代码之外,您还可以使用以下内容:

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

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