【问题标题】:Applying a formula to multiple columns, across multiple sheets in Excel在 Excel 中跨多个工作表将公式应用于多个列
【发布时间】:2017-03-23 03:37:00
【问题描述】:

我正在尝试将=LOWERCASE() 公式应用于同一工作簿中跨多个工作表的四列(J、O、T 和 Y)。

这是我目前拥有的 VBA 代码,它适用于正确的列,但每个列都返回错误。

Sub Clean_Lowercase()
Const N As Integer = 1
Dim r As Long, i As Integer, X As Integer, t As Long
Dim rng As Range, r As Range
Dim v As Variant
v = Array("J", "O", "T", "Y")
t = 1
For i = 1 To Sheets.Count - 1
r = Sheets(i).UsedRange.Rows.Count
For X = 0 To UBound(v)
    Set rng = Sheets(i).Range(v(X) & N & ":" & v(X) & r)
    For Each r In rng
        r.Formula = "=LOWERCASE()"
Next
Next
End Sub

我是 VBA 编码的新手,非常感谢任何建议!我真的很想学习。

非常感谢!

【问题讨论】:

  • 您正在尝试插入一个公式,该公式将用实际公式覆盖数据,并且该公式需要参考。如果您尝试将单元格中的数据更改为小写,那么r.Value = Lcase$(r.Value)
  • 啊,好吧!我应该插入r.Value = Lcase&(r.Value) 来代替r.Formula吗?
  • 是的,但它是Lcase$(r.Value)
  • 糟糕,是的,$ 而不是 &。感谢您的捕获!我尝试运行,它提示 r As Range? 的“编译错误:当前范围内的重复声明”?
  • 什么是小写公式 - 它是最近添加的吗?

标签: excel excel-formula vba


【解决方案1】:

这有几个问题。

  1. 您使用了两次r,一次是 Long,一次是 Range。
  2. For Each 循环的 Next 丢失
  3. 该公式需要您希望设置为小写的参考。 例如,如果你想得到左边相邻单元格的小写值,你应该写:=LOWERCASE(R[1]C[-1])
  4. Sheets 是一个基于 1 的集合,所以如果你写 For i = 1 To Sheets.Count - 1,,最后一张 sheet 将不会被处理(也许这是故意的?)并且代码会在第一张 sheet 上抛出错误(不存在 sheet(0))

这样的工作:

Sub Clean_Lowercase()
    Const N As Integer = 1
    Dim r As Long, i As Integer, X As Integer, t As Long
    Dim rng As Range, ri As Range
    Dim v As Variant
    v = Array("J", "O", "T", "Y")
    t = 1
    For i = 1 To Sheets.Count
        r = Sheets(i).UsedRange.Rows.Count
        For X = 0 To UBound(v)
            Set rng = Sheets(i).Range(v(X) & N & ":" & v(X) & r)
            For Each ri In rng
                ri.Formula = "=LOWERCASE(R[1]C[-1])"
            Next
        Next
    Next
End Sub

【讨论】:

  • 非常感谢!这些修改,连同 u/Scott Craner 的评论,使代码正常工作!
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 2023-01-17
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 2021-11-01
相关资源
最近更新 更多