【问题标题】:Excel use cell value as range in VBAExcel使用单元格值作为VBA中的范围
【发布时间】:2016-03-16 05:48:12
【问题描述】:

我有一个 Excel 文件。每次 A 列都有一个可变的行数,这就是我需要制作动态公式的原因。例如;

我想在 B1 上写“=LEN(B1)”公式。当双击单元格的右下角时,它将结束,直到 A 列值结束。这就是为什么在所有这些过程之前,我在 C1 单元格上写了“=COUNT(A:A)”。

在我的 VBA 中,我想写;

Dim TEMP As String
TEMP = Range("C1").Value
Range("B1").Select
ActiveCell.FormulaR1C1="=+LEN(RC[-1])"
Selection.AutoFill Destination:=Range("B1:TEMP")

但是在这个过程中出现了问题。因此,我只想将 VBA 中的单元格值用作范围、字符串或数字。

感谢您的支持。

【问题讨论】:

  • =LEN(B1)B1上的公式给你一个循环引用!
  • 不,它没有。什么意思?
  • @EEM - 他的代码和他的解释说了两件事。如果您查看代码,它会更有意义...... OP 似乎想在单元格 B1 上写 =Len(A1)
  • 谢谢@ScottHoltzman 我注意到了,只是试图引起 OP 的注意,有时拒绝思考是压倒性的......
  • 您好@PoyrazÖzer,您是否要编写VBA代码,根据A列中有多少行有数据,可以在B1列中填写公式?这是您编写 VBA 代码的目标吗?

标签: vba excel


【解决方案1】:

两个音符:

  1. 最好始终事先限定您的对象(工作簿、工作表、范围等)
  2. 当您使用R1C1 表示法时,您可以直接将公式写入范围(无需AutoFillFillDown

试试这个:

Dim ws as Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1") 'edit for your sheet name
Dim lRow as Long
lRow = ws.Range("A" & ws.Rows.count).End(xlup).Row
ws.Range("B1:B" & lRow).FormulaR1C1 = "=Len(RC[-1])"

作为一个值得一提的旁注,您编写Range("B1:TEMP") 的方式不是正确的语法。正确的语法应该是 Range("B1:B" & TEMP),当然,只有当 TEMP 确实是一个数值时才会起作用:)

【讨论】:

  • 对不起,它对我不起作用。实际上,也许我的解释是错误的或缺失的。我的 A 列有时有 10 行,有时有 15 行。我想将每个 A 列单元格的长度写入 B1 单元格。这就是为什么首先我用 COUNT 公式在 A 列中写了多少行来使用这个值作为我的范围结束。顺便说一句,公式不起作用,或者我无法进步。
  • 所以您想将 10 或 15(或任何数字)的长度值返回到一个单元格 (B1) 中?或者您能否提供一份包含您的数据以及您希望最终结果如何的屏幕截图?
  • 没有没有。这只是一个例子。它可能是 100 或 1.000。我的意思是无论数字是多少。
  • @PoyrazÖzer - 你仍然没有回答我的问题。是否要在 B 列的相应行中返回 A 列中每个单元格的长度?如果是,那么为什么上面的代码 not 不适合你?如果没有,请使用您的数据和预期结果的屏幕截图更新您的 OP。
  • 是的,B1=LEN(A1), B2=LEN(A2), B3=LEN(A3)... 然后继续。我不知道为什么它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多