VBA中如何引用另一工作表中的单元格区域

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA中如何引用另一工作表中的单元格区域相关的知识,希望对你有一定的参考价值。

当在公司名称的textbox中填好公司名后,通过点击sheets(“主页”)的第一个按纽,去sheets("资料库")中的A列查找,如果找到。提示,并复制该行的前8项到工作表"主页"的 B17:N500 区域。
问题:
1、如果in sheets(“主页”)中的 Range("B17:B500") 运行。没有问题。 但一写入, In Sheets("资料库").Range("A65565") 就运行不了。
2、如果找到该行,是否可以一起复制到sheets(“主页”)中的,B17:N500 间的单元格区域。谢谢。
按纽的代码如下。
Private Sub 公司查询_Click()
Dim rg As Range, k As Integer
Application.EnableEvents = False
Application.ScreenUpdating = False
For Each rg In Sheets("资料库").Range("A65565")
If Me.TextBox1.Text <> "" And rg = Me.TextBox1.Text Then
Range(Cells(rg.Row, rg.Column), Cells(rg.Row, rg.Column + 7)).Select
k = rg.Row
MsgBox "你要查找的公司在资料库第" & k & "行"
Exit For
ElseIf rg.Row = 500 And rg <> Me.TextBox1.Text Then
MsgBox "没有找到该公司"
End If
Next rg
Application.EnableEvents = True Application.ScreenUpdating = True
End Sub

1.商品表1,看有商品代号

2.商品表2,看也商品代号


3.把商品表2中的其它两个分类"标题"栏目复制到商品表1中.


4.接着下面用公式引用.

在商品表1中选中单元格,再点击上面的fx,选择全部,找到vlookup.点确定


5.关于Vlookup函数内容解析:

Lookup_value“唯一值”为需要在数组第一列中查找作参考的关系数值,它可以是数值或文字符串。比如:举例中的商品代码列,一般是第一列的数值,作为唯一数据参考而用的。(本表格中)
Table_array“区域”:数值区域,如“A:D”,就是您所有想引用过来的数据(想要引用数据的表格)

Col_index_unm“列序号”:引用区域值里面的第一列,比如从A到D共有4列,我想引用B列数值过来,那么就选择2,因为B列在区域的第二列,其它也是这么推算Range_lookup“逻辑值”:一般填TRUE或FALSE。指函数 VLOOKUP 返回时是精确匹配还还是近似匹配。 通常都是写false。

第一个单元格引用成功后,就往下拉(当单元格最右下角变实心,再往下拉,意思与上如同。)

6.另一列的品牌也是照着上面的方法,重复第4与第5步,也可以直接插入复制第前一列的粘贴操作.只是需要把那个第三个数值的,第二列2改成第三列3..完成再把公式拉下来.

7.展现的效果就是如图下,结合了两个表格的数据.


参考技术A 改为
r= Sheets("资料库").Range("A65565").end(xlUp).row
For Each rg In Sheets("资料库").Range("A2:A" & r)
......

试试追问

还是一样。亲。麻烦看看。

追答

写错了,2003版没有65565,最多只到65536

本回答被提问者采纳

Excel VBA 评估另一张工作表中的公式

【中文标题】Excel VBA 评估另一张工作表中的公式【英文标题】:Excel VBA evaluate formula from another sheet 【发布时间】:2016-08-17 23:14:52 【问题描述】:

已解决:问题出在我的公式中,我使用 INDIRECT() 引用单元格,当工作表不同时,该单元格不起作用。查看答案。

我在一张表中有一个公式,我想做的是使用另一张表中的公式,使用 eval 来评估公式。然而,结果并不如预期。似乎公式使用的是工作表 A 上的值,而不是调用者工作表 B。

表格 A 中的公式(参见:Screenshot Sheet A)

=IF(ISERROR(INDEX('1516Activity'!$B:$B,MATCH(INDIRECT(ADDRESS(ROW(),COLUMN(D:D) )),'1516Activity'!$C:$C,0))),"-",IF(LEFT(INDEX('1516Activity'!$F:$F,MATCH(INDIRECT(ADDRESS(ROW(),COLUMN(D:D) )),'1516Activity'!$C:$C,0)))="0","N","Y"))

在工作表 B 中的用法(请参阅:Screenshot Sheet B)

=Eval('CODE-VARS'!$G$5)

VBA:

Function Eval(Ref As String)
    Application.Volatile
    Eval = Application.ThisCell.Parent.Evaluate(Ref)
End Function

【问题讨论】:

【参考方案1】:

在我看来,它引用了任何处于活动状态的工作表中的值。

在您的 Eval 函数中,确保目标工作表处于活动状态:

Function Eval(Ref As String)
    Dim shCurrent As Worksheet: Set shCurrent = ActiveSheet
    Application.Volatile
    Application.ThisCell.Parent.Activate
    Eval = Application.ThisCell.Parent.Evaluate(Ref)
    shCurrent.Activate
End Function

【讨论】:

你不能在 UDF 中使用激活 正确。我在想Sub @CharlesWilliams @yk11 使用我所说的函数,我添加了这个:MsgBox ActiveSheet.Name,它显示了调用者表名称。所以我认为不是这个问题。可能是我的公式中引用了引用表中的值而不是调用者/活动表中的值吗? INDIRECT(ADDRESS(ROW(),COLUMN(D:D) )) INDIRECT 可能是 Excel 最邪恶的功能,不应该使用。我不清楚你想要实现什么,但看起来你应该能够用一个简单的单元格引用来替换它。您希望您的 UDF 引用哪一行? @CharlesWilliams 该行取决于我使用公式的单元格,该列始终为“D”。这就是为什么我提到INDIRECT(ADDRESS(ROW(),COLUMN(D:D) ))【参考方案2】:

我认为您正在寻找 Application.Caller:

Function Eval(Ref As String)
    Application.Volatile
    Eval = Application.Caller.Parent.Evaluate(Ref)
End Function

【讨论】:

【参考方案3】:

您正在评估字符串'CODE-VARS'!$G$5,它将返回该单元格中的值而不是其公式。试试这个:

Function Eval(Ref As RAnge)
    Application.Volatile
    Eval = Application.ThisCell.Parent.Evaluate(Ref.formula)
End Function

【讨论】:

试过了还是一样 可能是我的公式中引用了引用表而不是调用者/活动表中的值吗? INDIRECT(ADDRESS(ROW(),COLUMN(D:D) )) D 列中有哪些值? Indirect(Address()) 期望单元格引用位于 D 列中。因此,请展示一些 D 列中的示例。@ZhuHang 看不到你的数据,我认为你想要的不是INDIRECT(ADDRESS(ROW(),COLUMN(D:D) )),而是INDEX(D:D,ROW) 两张表格的屏幕截图已添加到我的问题中。【参考方案4】:

问题是我正在使用 INDIRECT() 引用一个单元格,当从不同的工作表调用 eval() 时它不起作用。

这行得通:

INDEX(D:D,ROW())

这不是:

INDIRECT(ADDRESS(ROW(),COLUMN(D:D) ))

【讨论】:

以上是关于VBA中如何引用另一工作表中的单元格区域的主要内容,如果未能解决你的问题,请参考以下文章

MAC VBA尝试从每个工作表中剪切一个单元格并粘贴到下一个空单元格中的另一张表中

VBA 如何批量将单元格复制到另一个工作表中

如何使用 VBA 根据活动工作表中的单元格自动填充 Excel 表单?

Excel VBA 评估另一张工作表中的公式

用vba给Excel单元格赋值

VBA 事件 - 如果选中,则解锁受保护工作表中的单元格