Excel不同的Sheet间引用,公式横着拉,如何字母不变而数字变呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Excel不同的Sheet间引用,公式横着拉,如何字母不变而数字变呢?相关的知识,希望对你有一定的参考价值。

如上图所示,我在“Dashboard”这个Sheet中写公式引用“All Raw data from PIS”这个sheet中的原始数据,我想写一个公式然后横着拖动,要求Dashboard中横着依次显示另一张表里的A,B,C,D...,这样可能有200个项目,公式怎么写呢?我自己试着写,可是他不依次显示G5,G6,G7,G8...反而是G5,H5,I5,J5...哪位Excel大神帮忙解答下啊?谢谢!!!
另外可不可以加个条件,公式不能引用到的话不显示乱码而显示blank空白呢?谢谢!

参考技术A 直接用公式,横着拉就是变前面的列地址,竖着拉才是变行地址,
所以不能直接用公式,
可以用OFFSET或者INDEX公式,
例如在D7中输入公式:=OFFSET(Sheet2!$G$5,COLUMN()-4,0)
是可以横着拖动的追问

另外可不可以加个条件,公式不能引用到的话不显示"0"而显示blank空白呢?因为我下面要做count计算,我希望没引用到的显示blank这样就不会count了

参考技术B 输入=OFFSET('All Raw data from PIS'!$G$5,COLUMN(A1)-1,0)
这样横着拉的时候,随着行数的增加,G5单元格依次向下偏移1格。本回答被提问者采纳
参考技术C 将公式改成:
=offset('All Raw data from PIS'!$G5,column(A1)-1,,)
再右拉即可追问

你好,可不可以加个条件,公式不能引用到的话不显示"0"而显示blank空白呢?因为我下面要做count计算,我希望没引用到的显示blank这样就不会count了

追答

=offset('All Raw data from PIS'!$G5,column(A1)-1,,)&""

追问

亲,你的公式很好用,可是我现在遇到了另一个问题。。。第八行和第九行是日期的,第十行是百分比的,可是公式引过来之后日期变成了乱码,百分比变成了无限循环小数。。。亲,我在这个表格里设置了日期格式和百分比格式,可是没用阿。。。亲,这是怎么回事呢?有什么办法么?谢谢!

参考技术D 无法看清应该是怎么“引用”的,所以,有公式也难以写出来。

插入公式后的宏延迟问题 - Excel

我在Excel有一个中央数据库,它使用输入Column B的特定值,并根据此值隐藏/取消隐藏其他相关的Columns。这工作正常,直到我放入单独的公式,将不同的值复制到他们各自的sheets

例如。如果A进入Column B它应该Columns D:E。然后一个单独的formularow复制到一个单独的sheet,其中包含所有的A's

问题是这个宏现在需要很长时间才能完成。我已禁用公式以使它们手动运行但它没有帮助。以下是隐藏/取消隐藏列的宏的示例。

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("B:B")) Is Nothing Then
        On Error GoTo safe_exit
        Application.EnableEvents = False
        Dim t As Range
        For Each t In Intersect(Target, Range("B:B"))
            Select Case (t.Value)
                Case "A"
                    Columns("B:BQ").EntireColumn.Hidden = False
                    Columns("H:AD").EntireColumn.Hidden = True
                    Columns("AF:BL").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                Case "B"
                    Columns("B:BQ").EntireColumn.Hidden = False
                    Columns("F:G").EntireColumn.Hidden = True
                    Columns("P:BP").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                Case "C"
                    Columns("B:BQ").EntireColumn.Hidden = False
                    Columns("F:O").EntireColumn.Hidden = True
                    Columns("T:BL").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                Case "D"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("E:S").EntireColumn.Hidden = True
                    Columns("AB:BL").EntireColumn.Hidden = True
                    Columns("BN:BP").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                Case "E"
                    Columns("B:BQ").EntireColumn.Hidden = False
                    Columns("D:AB").EntireColumn.Hidden = True
                    Columns("AF:BO").EntireColumn.Hidden = True
                Case "F"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("E:AE").EntireColumn.Hidden = True
                    Columns("AN:BN").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "G"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("F:BJ").EntireColumn.Hidden = True
                    Columns("BL:BN").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "H"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("F:BJ").EntireColumn.Hidden = True
                    Columns("BL:BN").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "I"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("F:BN").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "J"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("E:BN").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "K"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("F:BN").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "L"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("F:BN").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "M"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("F:BN").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "N"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("E:BN").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "O"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("F:BJ").EntireColumn.Hidden = True
                    Columns("BM:BN").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "P"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("F:AM").EntireColumn.Hidden = True
                    Columns("AO:BN").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "Q"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("F:BL").EntireColumn.Hidden = True
                    Columns("BN").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "R"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("F:AN").EntireColumn.Hidden = True
                    Columns("AP:BM").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "S"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("F:AO").EntireColumn.Hidden = True
                    Columns("AQ:BM").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "T"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("F:AN").EntireColumn.Hidden = True
                    Columns("AP:BM").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "U"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("F:AP").EntireColumn.Hidden = True
                    Columns("BB:BN").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True
                 Case "V"
                    Columns("B:BP").EntireColumn.Hidden = False
                    Columns("F:BA").EntireColumn.Hidden = True
                    Columns("BK:BN").EntireColumn.Hidden = True
                    Columns("BQ").EntireColumn.Hidden = True 
                    'do nothing
            End Select
        Next t
        ActiveWindow.Zoom = 100 '<<<
    End If

safe_exit:
    Application.EnableEvents = True

End Sub

这是公式:

=IF(IFERROR(INDEX('XXXXX'!B$5:B$9963,MATCH($A5,'XXXXX'!$A$5:$A$9963,0)),"")="","",INDEX('XXXXX'!B$5:B$9963,MATCH($A5,'XXXXX'!$A$5:$A$9963,0)))

该数据库包含大约3000行。文件大小约为7-8MB。我删除了所有公式,但存在相同的延迟。我删除了2000行数据,这使得它更快。但看起来不是很大的差别呢?

该文件通过OneDrive共享,许多用户实时使用它。用户后来提到他根本无法打开文件。它在打开时崩溃了。这可能是一个巧合,一个破碎的链接导致腐败?

答案

请注意,您可以将代码减少到只有一个Intersect(Target, Range("B:B"))并启动循环并使用Match函数。这样,您只会隐藏列一次,而不是每次在受影响的范围内出现值A时。

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim AffectedRange As Range
    Set AffectedRange = Intersect(Target, Range("B:B")) 'intersect olny once and set into variable for re-use

    If Not AffectedRange Is Nothing Then
        On Error GoTo safe_exit
        Application.EnableEvents = False

        Dim FoundAt As Long
        On Error Resume Next
        FoundAt = Application.WorksheetFunction.Match("A", AffectedRange, False)
        On Error GoTo 0

        If FoundAt <> 0 Then
            Columns("B:BQ").EntireColumn.Hidden = False
            Columns("H:AD").EntireColumn.Hidden = True
            Columns("AF:BL").EntireColumn.Hidden = True
            Columns("BQ").EntireColumn.Hidden = True
        End If

        ActiveWindow.Zoom = 100 '<<<
    End If

safe_exit:
    Application.EnableEvents = True
End Sub

以上是关于Excel不同的Sheet间引用,公式横着拉,如何字母不变而数字变呢?的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL表格里怎么用用公式进行数据引用

在Excel中,怎样直接引用另一个表格的资料

excel中,如何将一个表的数据根据不同的关键字分成多个表,如下图 在线等=============

Excel查找指定列数据值并整行引用到其它表

如何在复制/粘贴后禁用 Excel 自动单元格引用更改?

excel重感叹号(!)是啥意思