数组 - 如何从 databodyrange 中排除列(或保留公式)
Posted
技术标签:
【中文标题】数组 - 如何从 databodyrange 中排除列(或保留公式)【英文标题】:Arrays - how to exclude columns from databodyrange (or retain formulas) 【发布时间】:2015-06-26 02:47:13 【问题描述】:我最近一直在尝试使用数组和表格,并发现我何时通过以下代码将整个数组转移回表格:
Dim vArr As Variant
Dim SPArr As Variant
Dim lCount As Long
vArr =ThisWorkbook.Worksheets("catalogue").ListObjects(1).DataBodyRange.Value2
For lCount = LBound(vArr) To UBound(vArr)
Select Case vArr(lCount, 1)
Case "G-6R-15L2" 'These are model names
vArr(lCount, 4) = 4.8
Case "G-6SPF-ZB2"
vArr(lCount, 4) = 4.5
Case "U6-6S-15L2"
vArr(lCount, 4) = 6
Case "U-6S-30H2"
vArr(lCount, 4) = 9
Case "G-6SP-12L2"
vArr(lCount, 4) = 4.5
End Select
Next lCount
ThisWorkbook.Worksheets("catalogue").ListObjects(1).DataBodyRange.Value2 = vArr
我在第 3 列上的活动公式已经消失 :( 。我将在此处说明它之前的样子:
是否有聪明人知道在为数组引用表的 databodyrange 时如何排除某些列?喜欢:
vArr(1) =ThisWorkbook.Worksheets("catalogue").ListObjects(1).listcolumns(1).DataBodyRange.Value2
vArr(2)=ThisWorkbook.Worksheets("catalogue").ListObjects(1).listcolumns(2).DataBodyRange.Value2
只是以上在语法中不起作用:(,或其他一些建议的最佳实践,即对代码中的两列进行公式化?
【问题讨论】:
【参考方案1】:您必须将“.Value2”替换为“.Formula”
与此类似:
Option Explicit
Sub testFormulas()
Dim v As Variant
With Sheet1.ListObjects(1).DataBodyRange
v = .Formula
.Clear
.Formula = v
End With
End Sub
数组现在将包含公式,并且您只更新第 4 列,因此您的代码应该可以工作,但请确保不要用数组中的值替换公式
【讨论】:
就像一个魅力!我已经尝试过了,我认为 .formula 与 .value 相同,但也有公式?第二个问题是我能否使用 .formula 更改数组中的公式? 天哪,我刚刚意识到 .formula 必须在整个列中保持不变,现在这会很有趣 我想知道如果我可以从我的数组中排除所有列保存列 1 和 2 是否会更容易 1. “.formula 与 .value 相同,但也有公式” - 这是正确的 2. “我可以使用 .formula 更改数组中的公式吗?” - 不,但您可以像更改值一样更改数组中的公式:vArr(lCount, 4) = "=Sum(A1 + B1)" 3 如果您使用多个数组并排除所有公式列,可能会更容易以上是关于数组 - 如何从 databodyrange 中排除列(或保留公式)的主要内容,如果未能解决你的问题,请参考以下文章
从 Google BigQuery 中的选择中排除数组类型字段