我有一个包含22个工作表的Excel 2010工作簿。第一个工作表标记为DATA,其中数据由用户输入。 A1-N1行包含标签。 A2-A18行包含从单元格A2开始的17个位置的2015年1月数据,即第2行包含位置1的数据,第3行包含位置3等。2月数据从第19行开始,3月从第36行开始,等等。
在每张工作表上,A1-M1是标签,第2-13行是1月至12月的月份。工作表#2上的单元格B2引用工作表DATA上的单元格J2。工作表#2的第2行上的其他公式引用工作表DATA上第2行的单元格。工作表#2的第3行引用DATA第19行的单元格。在每个位置的N列中,工作表在单元格N2中有一个数字,对应于工作表DATA上的可应用行。
以下是我的一个公式的示例:
=(IF(ISBLANK(数据D2),! “ - ”,IF(ISERROR(DATA E2 / DATA D2), “N / A”,(DATA E2 / DATA D2)))!!)。
我想要VB代码或宏?,它会编辑每个工作表上的每个公式,方法是将公式中的当前数字替换为同一行的N列中的数字,即如果N7包含数字88代码将通过删除公式中的当前数字并替换为数字88来更改该行上的任何公式。
其他信息:
在每个工作表上,列B-M有不同的公式。代码需要获取该行的N列中的数字,并将该公式中的任何数字替换为该行的第N列中的数字,对于每个工作表的每一行。
目前,我必须触及每个工作表上的每个公式,这太费时间了。从4月开始,位置将从17增加到148,这将需要编码以进行适当的更改。
DATA工作表图片
1R位置工作表图片
答案 0 :(得分:0)
您可以随时使用:
If IsEmpty(Worksheets("DATA").Cells(2, 4)) And _
IsError(Worksheets("DATA").Cells(2, 5).Value / Worksheets("DATA").Cells(2, 4).Value) Then
ActiveCell = "NA"
Else
ActiveCell = Worksheets("DATA").Cells(2, 5).Value / Worksheets("DATA").Cells(2, 4).Value
End If
您已将其转换为VBA代码的公式。
但是,您必须根据输入数据中的内容添加错误处理程序和其他内容。
答案 1 :(得分:0)
我不在我的工作电脑上,所以我没有机会测试这些代码,但我相信这应该做你想要的。如果有任何问题,请告诉我,我明天会在工作中看一下。
Sub replace_numbers()
Dim ws As Worksheet
Dim c As Range
Dim replace_with As Long
Dim objRegex As Object
'Application.EnableEvents = False
'Application.ScreenUpdating = False
'Application.DisplayStatusBar = False
'Application.Calculation = xlCalculationManual
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Global = True
.Pattern = "\d+"
End With
For Each ws In Worksheets
If ws.Name <> "DATA" Then
For Each c In ws.Range("B2:M13")
replace_with = CLng(Intersect(ws.Columns("N"), ws.Rows(c.Row)).Value)
c.Formula = objRegex.Replace(c.Formula, replace_with)
Next
End If
Next
'Application.EnableEvents = True
'Application.ScreenUpdating = True
'Application.DisplayStatusBar = True
'Application.Calculation = xlCalculationAutomatic
End Sub
如果代码按预期运行,请在Application
- 调用之前删除撇号,以使代码运行得更快。