如何从另一个工作表中的外部引用单元格中提取工作表名称

时间:2017-02-16 10:36:14

标签: excel vba excel-vba reference

如何从另一个工作表中的外部引用单元格中提取工作表名称

我的工作表B1中的单元格WS1显示工作表RefCell中引用的单元格WS2的值。

如何在RefCell中的单元格A1中显示哪个工作表WS1

这样的事情就是我需要发生的事情:

 __________________________________
|_______|___A____|___B____|___C____|
|___1___|__Pets__|__Dog___|________|
|___2___|__Fruit_|__Apple_|________|

  *Column B contains referenced values from other worksheets (within the same workbook).
  *The value in Column A detects the worksheet name of the value in Column B.

这可以在VBA中实现吗?如何实施?

2 个答案:

答案 0 :(得分:1)

你可以使用

Sub main()
    Dim cell As Range

    For Each cell In Range("B2", Cells(Rows.Count, 2).End(xlUp)).SpecialCells(xlCellTypeFormulas) '<--| loop through column B cells with formulas found from row 2 down to last not empty one
        cell.Offset(, -1) = Split(Replace(cell.Formula, "=", ""), "!")(0) '<--| extract worksheet name out of current cell formula and write it in corresponding column A cell
    Next
End Sub

答案 1 :(得分:0)

因为引用在单元格中存储为公式。

从细胞B2开始,它的公式为= pets!refcell

所以你可以做的是让公式使用instr funcion来获取工作表名称的长度,并使用left来获取工作表名称并将其分配给单元格

B_formaula= str(sheet1.range("B2").formula)
st_name=left(B_formula,instr(1,B_formula,"!",vbbinarycompare)-1)
sheet1.range("A2").value=st_name

我希望这会有所帮助。

sub st_name()
dim ws as worksheet
set ws=thisworkbook.sheets(1)
irow=ws.range("B1:B"& rows.count).end(xlup).row
for i = 1 to irow
B_formaula= str(ws.range("B"& i).formula)
st_name=left(B_formula,instr(1,B_formula,"!",vbbinarycompare)-1)
ws.range("A"& i).value=st_name
next i
end sub

此子程序将检查b行中从第1行到最后一行的所有值,并将工作表名称添加到A列。

我还没有测试过代码。如果有任何错误还原,请尝试使用该代码。