Excel:使用其他工作表中的某些单元格创build摘要工作表

我有一大堆标签共享一个标准的结构。 在每个标签的单元格A1,B1,C1中,分别有一个ID号码,一个名字和一个姓氏。 每个选项卡上还有一些与该问题无关的其他信息。

我想创build一个摘要选项卡,其中一个3列表只包含ID号,名字和姓氏从每个其他选项卡。 再次,这些总是在单元格A1,B1,C1。 我还希望汇总表中的ID号超链接到相应的选项卡。

有没有什么办法半自动使用单元格引用? 就像在单个表格中一样,如果在单元格中input数字并向下拖动,则数字将在列中的每个连续单元格中递增。 有什么办法来达到类似的效果,但是单元格的引用保持不变(总是单元格A1,A2,A3),并且TAB引用是递增的? 总之,有没有什么办法可以把一个特定的行绑定到一个单独的选项卡上(同样也会照顾到超链接)? 或者我必须手动input每个表的参考?

并不是标签页没有标签1,2页等等,他们会贴上他们所持信息的人的名字。

[EDIT: Added ASAP option]

ASAP公用事业努力解决这个问题

  • 下载ASAP公用程序, http://www.asap-utilities.com/
  • 按照下面的屏幕截图1运行该实用程序
  • select是否需要实时链接摘要或硬编码报告(截图2)

尽快设置 在这里输入图像描述

在表格中selectA1:C1 在这里输入图像描述

产量
在这里输入图像描述

[Initial Post]

你可以做到这一点,而无需连续的VBA子

步骤1

定义一个范围名称来包含所有的表格名称( 来自David Hager的这个很好的例子)

在这个例子中我使用了AllSheets
参考
=RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND("]",GET.WORKBOOK(1)))

在这里输入图像描述

第2步
使用INDEX公式来提取汇总表中的每个唯一表单
=IF(ROW()<=COUNTA(AllSheets),INDEX(AllSheets,ROW()),"")& LEFT(RAND(),0)

假设你的汇总表在最左边(即表1),则ROW()将在A2中为2,所以这将从AllSheets第二个表
ROW()将在A3中为3,所以这将从AllSheets等拉第三张

LEFT(RAND(),0)确保在任何工作表名称被更改后,工作表名称列表立即更新(并且VBA解决scheme需要监控工作表名称的更改) 在这里输入图像描述

第3步
使用INDIRECT为每张纸拉出A1,B1和C1 =IF($A2<>"",INDIRECT("'"&$A2&"'!"&B$1),"")

将此B2公式向右或向下复制,只要您期望potental表名称

请注意,这个公式处理'与空格等表名发生 在这里输入图像说明

您可能可以使用INDIRECTfunction 。 例如,要获取表单John上的单元格A1的值,可以调用:

 =INDIRECT("John!A1") 

所以在你的情况下,你可以在摘要选项卡的单元格A1中,在摘要选项卡的单元格B1中的“A1”和单元格C1中放入“John”,把下面的公式:

 =INDIRECT("'"A1&"'!"&B1) 

没有内置到Excel中的函数,它将为您提供工作簿中的所有工作表名称。 为此,你将不得不转向Excel中内置的脚本工具VBA。 如果您使用的是Office 2007或更高版本,则需要使用特殊格式存储工作簿。 另外,为了执行macros,用户必须特别允许macros执行。 下面的macros将允许您打印第一列中的所有工作表名称。 需要注意的一点是,这些代码必须在汇总表的代码窗口中执行。

 Sub SheetNames() For i = 1 To Sheets.Count Cells(i, 1) = Sheets(i).Name Next i End Sub 

获取工作表的名称之后,可以使用以下公式dynamic链接到工作表中的单元格:

 =INDIRECT(ADDRESS(1, 1, 1, 1, A1)) =INDIRECT(ADDRESS(1, 2, 1, 1, A1)) =INDIRECT(ADDRESS(1, 3, 1, 1, A1)) 

INDIRECT公式需要一个地址。 ADDRESS公式的工作方式如下ADDRESS(Row_num,Column_num,Abs_num,A1,Sheet_text)。 Excel帮助将能够回答任何问题。

你可以设置公式,只有在有很多新的工作表时才运行macros。 工作簿可以存储没有macros。 只要将macros保存在某个文本文件中,以防再次使用。

这是一个使用VBA UDF获取表名的解决scheme。 它包含一个超链接。

对UDF的调用被放置在一列之外。 这个例子我用过H

将这些函数放在单元格A1,B1,C1,H1中

A1: =IF(H1<>"",HYPERLINK(SUBSTITUTE(H1,"]","]'")&"'!A1",INDIRECT("'"&$H1&"'!R1C[0]",FALSE)),"")

B1和C1: =IF($H1<>"",INDIRECT("'"&$H1&"'!R1C"&COLUMN(),FALSE),"")

H1: =SheetByIndex()

把它放在一个VBA模块中

 Function SheetByIndex() As Variant Application.Volatile Dim r As Range Dim shIdx As Long Dim ThisShIndex As Long Dim sh As Worksheet Dim wb As Workbook Set r = Application.Caller ThisShIndex = r.Worksheet.Index shIdx = r.Row If shIdx >= ThisShIndex Then shIdx = shIdx + 1 End If Set wb = r.Worksheet.Parent On Error Resume Next Set sh = wb.Worksheets(shIdx) If Err.Number <> 0 Then SheetByIndex = "" Else SheetByIndex = "[" & wb.Name & "]" & sh.Name End If End Function 

将A,B,C,H中的公式按照要求复制下来

基于这里发布代码 ,我的方法略有不同( 这里也有一个样例表用于testing):

 Option Explicit Sub CreateHyperlinkedSheetList() 'Author: Jerry Beaucaire 'Date: 1/3/2011 Dim ws As Worksheet, NR As Long Application.ScreenUpdating = False With ActiveSheet NR = .Range("A" & Rows.Count).End(xlUp).Row + 1 For Each ws In ActiveWorkbook.Worksheets If ws.Name <> .Name Then .Range("A" & NR).Value = ws.Range("A1").Value .Hyperlinks.Add Anchor:=.Range("A" & NR), Address:="", SubAddress:= _ "'" & ws.Name & "'!A1", TextToDisplay:=ws.Name .Range("B" & NR).Value = ws.Range("B1").Value .Range("C" & NR).Value = ws.Range("C1").Value NR = NR + 1 End If Next ws End With Application.ScreenUpdating = True End Sub