复杂的Excel COUNTA查询使用INDIRECT指向不同工作簿中的工作表

时间:2015-07-14 18:32:06

标签: excel vba

我正在尝试在工作簿A中创建列E,显示管理员在工作簿B中在给定月份提交的报告数。我想使用COUNTA公式计算A列中非空单元格的数量工作簿B,相当于提交报告的数量。但是,有多个经理,每个经理在工作簿B中都有自己的工作表。例如,经理John Smith在工作簿B中将提交的报告记录在名为“Smith”的工作表上。工作簿B中工作表的名称位于工作簿A的单元格Q3中。我尝试使用以下代码进行此操作:

=COUNTA((('[Workbook B.xlsx]' & 'INDIRECT(Q3,FALSE)' & '!$A$2')),('[Workbook B.xlsx]' & 'INDIRECT(Q3,FALSE)' & '!$A$500))

理想情况下,此代码将计算工作簿B中A2:A500中的非空单元格,并在工作簿A中显示该数字。

2 个答案:

答案 0 :(得分:0)

试着为此制作一个宏。它可能不完美,但希望它会给你一个很好的起点。

Sub count()
Dim cnt As Integer
Dim rng As Integer
Dim index As Integer
Dim shtName As String

shtName = Range("Q3").Value

Workbooks.Open ("C:\Path\to\WorkbookB.xlsx")

ActiveWorkbook.Sheets(shtName).Select

rng = ActiveSheet.UsedRange.Rows.count

For index = 1 To rng
    If Range("A" & rng).Text <> "" Then
        cnt = cnt + 1
    End If
Next

ActiveWorkbook.Close False

ActiveWorkbook.Sheets("Sheet1").Activate

Range("E1").Value = cnt
End Sub

答案 1 :(得分:0)

我设法通过稍微改变您的代码来完成这项工作。间接(Q3)给了我一个#ref错误,所以我在COUNTA之后用另一个间接做了Q3并且它工作了。

=COUNTA(INDIRECT("'"&"[Workbook B.xlsx]"&Q3&"'!$A$1:$A$500"))