我有一个Excel 2010工作簿,里面有22个工作表。第一个工作表被标记为数据,其中数据由用户输入。第A1-N1行包含标签。行A2-A18包含从单元格A2开始的17个地点2015年1月的数据,即第2行包含位置1的数据,第3行的位置3的数据,等等。2月的数据从第19行开始,3月从第36行开始,等等。
每个工作表A1-M1是标签,第2-13行是一月至十二月。工作表#2上的单元格B2引用工作表数据上的单元格J2。工作表#2第2行上的其他公式引用工作表数据第2行上的单元格。工作表#2第3行引用数据第19行上的单元格。在每个位置的N列中,工作表在单元格N2中有一个数字,该数字对应于工作表数据上可应用的行。
下面是我的一个公式的例子:
=(IF(数据!D2),"-",IF(数据!E2/DATA!D2),"N/A",(DATA!E2/DATA!D2))。
我希望使用VB代码或宏编辑每个工作表上的每个公式,方法是将公式中的当前数字替换为同一行的N列中的数字,即如果N7包含数字88,则代码将通过删除公式中的当前数字并替换为88来更改该行上的任何公式。
附加信息:
在每个工作表中,B-M列有不同的公式。代码将需要为该行取N列中的数字,并将该公式中的任何数字替换为该行N列中每一行的每个工作表的编号。
目前,我必须触摸每一个公式上的每一个工作表,这是太费时。从4月份开始,这些地点将从17个增加到148个,需要编码才能作出适当的改变。
数据工作表图像

1R定位工作表图像

发布于 2015-03-26 00:43:50
我不在我的工作计算机上,所以我还没有机会测试这段代码,但是我相信它应该能做你想做的事情。如果有什么问题,请告诉我,我明天上班时再看一看。
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-calls之前删除撇号,以使代码运行得更快。
发布于 2015-03-25 23:43:58
您总是可以使用如下这样的东西:
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代码的公式。
但是,您必须根据输入数据中的内容添加错误处理程序和其他内容。
https://stackoverflow.com/questions/29268461
复制相似问题