【发布时间】:2015-12-02 22:51:36
【问题描述】:
我正在尝试自动化 excel 修改。
流程如下:
- Excel 列表已创建。
- 需要员工手动处理(删除图片、按字母排序等)
- 列表被转换为 csv 文件。
- CSV 被上传和处理。
现在我想尽可能地自动化这个过程。我没有任何使用 VBA 或 Excel 宏的经验。
到目前为止,我已经能够将几个不同的脚本加在一起以达到一半,但我无法让这两个函数正常工作。 我已经能够删除顶部的所有膨胀(不是底部),删除空行并删除未使用的列。
由于隐私原因,我无法发布工作表本身的内容,但工作表的结构如下所示:
| Name | Cost |
| Mark Renner (mare) | €200,- |
问题
我想提取 4 个字母代码并将它们替换为全名,因此单元格中只保留 4 个字母代码。
我还希望列表按字母顺序排序。表格的范围每天都不同,因此没有固定数量的单元格。
您无需担心工作表上的其他任何事情。如有需要,我可以提供更多信息。
如果有人能够帮助我解决这个问题,那就太好了。
提前致谢!
编辑:
这里是一些更多要求的信息。
Table example after current script
这是我目前用来消除所有臃肿的脚本。我确信它并不完美,但它现在可以完成工作。
Sub run()
Call testvba
Call DeleteRowWithContents
Call usedR
End Sub
Sub testvba()
Dim i As Integer
For i = 1 To 21
Rows(1).EntireRow.Delete
Next i
For i = 1 To 10
Columns(4).EntireColumn.Delete
Next i
Dim shape As Excel.shape
For Each shape In ActiveSheet.Shapes
shape.Delete
Next
End Sub
Sub DeleteRowWithContents()
Last = Cells(Rows.Count, "A").End(xlUp).Row
For i = Last To 1 Step -1
If (Cells(i, "A").Value) = "User" Then
Cells(i, "A").EntireRow.Delete
End If
Next i
End Sub
Sub usedR()
ActiveSheet.UsedRange.Select
'Deletes the entire row within the selection if the ENTIRE row contains no data.
Dim i As Long
'Turn off calculation and screenupdating to speed up the macro.
With Application
.Calculation = xlCalculationManual
.ScreenUpdating = False
'Work backwards because we are deleting rows.
For i = Selection.Rows.Count To 1 Step -1
If WorksheetFunction.CountA(Selection.Rows(i)) = 0 Then
Selection.Rows(i).EntireRow.Delete
End If
Next i
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub `
这是脚本之前的表格:
解决方案:
我使用 Schalton 的代码来提取 4 个字母的代码。
我最终使用这行代码来按字母顺序排列记录:
Sub Alpha()
Dim fromRow As Integer
Dim toRow As Integer
fromRow = 1
toRow = ActiveSheet.UsedRange.Rows.Count
ActiveSheet.Rows(fromRow & ":" & toRow).Sort Key1:=ActiveSheet.Range("A:A"), _
Order1:=xlAscending, Header:=xlNo, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom
End Sub
【问题讨论】:
-
S.O.不是可以使用的代码分发器...您写道:2。它需要由员工手动处理。好吧,启动宏记录器并处理您的数据,然后在这里发布您的代码,我们会帮助您操作此代码
-
@Fabrizio 好吧,有一个小问题。目前,有几个步骤需要员工将文件保存为 CSV 文件并在记事本中打开,将 () 替换为 ;,以便提取 4 字母代码。如果有帮助的话,我可以录制一个宏。
-
请在这里输入那个人在记事本中操作的字符串,我不敢相信...可能是这个操作(如果有必要)将由 VBA 处理
-
整个过程是这样的: - 删除不必要的文本和图像 - 另存为 CSV。 - 在记事本中打开。查找和替换(用 ; 。查找和替换)什么都没有。 - 再次保存并在 excel 中打开。最终发生的情况是 4 字母代码现在与名称分离,我们可以删除名称列并只保留 4 字母代码。
-
整个事情很笨拙,这就是为什么我想自动化这个过程。