首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用代码修改Excel公式

使用代码修改Excel公式
EN

Stack Overflow用户
提问于 2015-03-25 23:28:43
回答 2查看 2.4K关注 0票数 1

我有一个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定位工作表图像

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-26 00:43:50

我不在我的工作计算机上,所以我还没有机会测试这段代码,但是我相信它应该能做你想做的事情。如果有什么问题,请告诉我,我明天上班时再看一看。

代码语言:javascript
复制
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之前删除撇号,以使代码运行得更快。

票数 0
EN

Stack Overflow用户

发布于 2015-03-25 23:43:58

您总是可以使用如下这样的东西:

代码语言:javascript
复制
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代码的公式。

但是,您必须根据输入数据中的内容添加错误处理程序和其他内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29268461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档