[Excel] 如何从单元格中获取工作表名称

Eva

本文推荐给以下人群:

  • 想要链接 Excel 工作表名称和单元格值的用户
  • 想要将 Excel 工作表名称更改为特定单元格的值的人
  • 想要自动更改 Excel 工作表名称的人

在使用Excel时,您是否曾经想过更改工作表名称以匹配数据内容?

例如,如果您想使用客户名称或日期作为工作表名称,那么每次都手动更改它会非常繁琐。

所以,“根据单元格值自动更改工作表名称”的机制使用VBA创建它非常方便并且减少了工作量。

另一方面,有关如何在 Excel 单元格中显示工作表名称的信息,请参阅 [Excel] 在单元格中显示工作表名称的函数。请看一下,因为它有详细的解释。

目录

从这里开始,使用 VBA如何从单元格中获取Excel工作表名称我会解释一下。

VBA 代码概述

首先,我将简要概述一下它是什么样的VBA代码。

  • 将单元格 A1 中的值设为该工作表的名称。
  • 当您更改单元格 A1 时,工作表名称将自动更改。
  • 与所有床单兼容。
  • 如果您尝试使用相同的工作表名称,将会显示错误。将出现一个消息窗口,因此请将其更改为其他名称。
  • 工作表名称中不能使用“:”、“/”、“”和“*”等字符。我正在尝试将其替换为“_”。
  • 如果有长度限制或字符留空,则会自动添加“工作表+日期”。

如何实现VBA代码

从这里开始,我将介绍当单元格 A1 的内容更改时自动更改工作表名称的 VBA 代码,以及如何实现它。

单击 Excel 中的“开发人员”选项卡

Excel单击“开发”选项卡请。

如果未显示“开发人员”选项卡,[Excel]如何显示开发人员选项卡请看一下。

如何从Excel中的单元格中获取工作表名称第1步单击Excel中的“开发人员”选项卡

单击“Visual Basic”

下一个,单击“Visual Basic”请。

如何从Excel单元格中获取工作表名称第2步单击“Visual Basic”

在左上角的项目中双击“ThisWorkbook”

当您单击“Visual Basic”时,将显示如下所示的屏幕。

将 Excel 作为活动窗口Alt+F11如果您按 ,也会出现此屏幕。

在左上角的项目中双击“ThisWorkbook”请。

如何从 Excel 中的单元格中获取工作表名称 步骤 3 从左上角的项目中双击“ThisWorkbook”

粘贴代码并单击右上角的“X”

双击“ThisWorkbook”,右侧会出现一个空白页。

其中有以下几项粘贴代码并单击右上角的“X”并关闭“Visual Basic”屏幕。

Option Explicit

' A1セルを参照する定数(シート名のもとになるセル)
Private Const NAME_REFERENCE As String = "A1"

' シート名で使えない文字を置換するときの置き換え文字
Private Const REPLACE_CHAR As String = "_"

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    ' 変更されたセルが A1 の範囲と交差するかをチェック
    If Not Intersect(Target, Sh.Range(NAME_REFERENCE)) Is Nothing Then
        Dim newName As String
        
        ' A1の値をシート名として整形(無効文字置換や長さ制限など)
        newName = ReplaceInvalidChars(CStr(Target.Value))
        
        On Error GoTo err_handler
        
        ' 実際にシート名を変更
        Sh.Name = newName
        
        On Error GoTo 0
    End If
    
    Exit Sub
    
err_handler:
    Select Case Err.Number
        Case 1004 ' 既に存在するシート名、もしくは無効文字など
            MsgBox "シート名を「" & newName & "」に変更できませんでした。" & vbCrLf & _
                   "既に存在する名前か、無効な名前の可能性があります。"
        Case Else
            MsgBox "シート名の変更で予期せぬエラーが発生しました。番号: " & Err.Number & vbCrLf & _
                   "内容: " & Err.Description
    End Select
End Sub

Private Function ReplaceInvalidChars(sheetName As String) As String
    ' Excelで無効な文字 + ダブルクォート
    Dim invalidChars As Variant
    invalidChars = Array(":", "", "?", "[", "]", "/", "*", """")
    
    Dim i As Long
    For i = LBound(invalidChars) To UBound(invalidChars)
        sheetName = Replace(sheetName, invalidChars(i), REPLACE_CHAR)
    Next i
    
    ' 改行やタブを除去したい場合
    sheetName = Replace(sheetName, vbCr, "")
    sheetName = Replace(sheetName, vbLf, "")
    sheetName = Replace(sheetName, vbTab, "")
    
    ' Excelシート名は31文字までなので、それを超える場合は切り捨てる
    If Len(sheetName) > 31 Then
        sheetName = Left(sheetName, 31)
    End If
    
    ' 空白文字のみのケースを防ぐ
    If Trim(sheetName) = "" Then
        ' 空にならないように、日時付きのシート名を付与
        sheetName = "シート" & Format(Now, "yyyymmddHHMMSS")
    End If
    
    ReplaceInvalidChars = sheetName
End Function
如何从 Excel 中的单元格获取工作表名称第 4 步粘贴代码并单击右上角的“X”

检查 A1 中输入的值是否反映在工作表名称中

返回正常的 Excel 屏幕并确认 A1 中输入的值已反映在工作表名称中。

使用 VBA 的 Excel 必须保存为启用宏的工作簿(.xlsm 格式)。

如何从 Excel 中的单元格获取工作表名称 步骤 5 检查 A1 中输入的值是否反映在工作表名称中

使用要点

  1. 如果您想更改参考单元格
    • NAME_REFERENCE"A2"或者"B5"等等,更改为所需的单元格地址。
    • 如果您想同时监控多个单元"A1:A2"指定一个范围,例如。
  2. 如果您想更改替换字符
    • REPLACE_CHAR的初始值"_”"-"或者"_" 以外の任意文字更改为
    • 如果你想更严格地限制字符,invalidChars从数组中添加和删除元素以进行更多控制。
  3. 发生错误时的检查项目
    • 检查是否存在同名的sheet(不允许重复)。
    • 工作表名称是否包含无效字符(如“:”、“/”、“”等)?
    • 工作表名称是否超过 31 个字符?

有关如何从 Excel 中的单元格获取工作表名称的常见问题和解答

我们整理了一些有关如何从 Excel 单元格中获取工作表名称的常见问题和解答。

关于基本操作

使用单元格值作为工作表名称有什么好处?

最大的好处是省去了每次重新输入工作表名称的麻烦。
例如,即使在管理大量工作表(例如汇总表和报告)时,您也可以通过简单地将单元格重写为具有相同的名称来轻松保持一致性。

建议阅读:如何显示和使用 Excel 帮助

我应该将代码粘贴到哪里,以便在更改单元格时工作表名称也会更改?

在 Excel 屏幕上,单击Alt+F11” 键将打开一个名为 Visual Basic 的编辑屏幕。
从左侧显示的列表中选择“ThisWorkbook”并将宏粘贴到此处。现在,您将能够自动检查整个工作簿中的单元格更改,并且系统将在单元格 A1 更改时开始更新工作表名称。

仅通过重写单元格来更改工作表名称的机制如何工作?

我正在使用一种名为“Workbook_SheetChange”的机制(事件)。当单元格A1(默认设置)的值发生变化时,此时会调用该代码并自动调整工作表名称。

如何解决错误和问题

即使单元格 A1 为空,是否也可以无错误地进行处理?

如果单元格 A1 为空,请指定包含日期和时间的工作表名称,以便工作表名称不会变空。

如果在单元格中输入与现有工作表名称相同的名称,则会发生错误。我怎样才能避免它?

请在 A1 中输入另一个值,因为不能使用相同的工作表名称。

当工作表名称没有按预期更改时,我应该在哪里检查?

ReplaceInvalidChars 函数可能会删除换行符和无效字符,或者在文本超过 31 个字符时截断文本。如果结果与你的预期不同,仔细检查函数内部的处理会更容易找到原因。

自定义 VBA 以从单元格获取工作表名称

如果我想引用 A1 以外的单元格,我应该更改什么?

请将代码开头的“NAME_REFERENCE”从“A1”更改为另一个单元格地址,例如“A2”或“B1”。这将简单地切换目标单元格,更改后的单元格值将成为工作表名称。

如果我想用连字符或空格而不是下划线替换无效字符,该怎么办?

开头的“REPLACE_CHAR”是“_(下划线)”,因此请将其重写为“-”ya”(空字符)。工作表名称中不能使用的字符将自动替换为这些字符。

如果超过 31 个字符,它会被强制截断,但是有没有办法让它表现不同呢?

ReplaceInvalidChars 中使用 If 语句来确定是否超过 31 个字符,您可以自由重写该部分。根据您的喜好对其进行自定义,例如显示消息而不是截断消息。

如果我想将无效字符添加到列表中,我应该在哪里具体编辑?

您所要做的就是将要阻止的新字符添加到 ReplaceInvalidChars 中的 invalidChars 数组中。例如,如果添加“;”或“|”,输入时会自动替换。

其他常见问题

如果我想在另一台计算机上使用它,如何携带宏?

通常保存并传输包含此代码的整个 Excel 文件,或以文件格式“.xlsm”(启用宏的工作簿)共享它。除非另一端启用宏,否则它将无法工作,因此如果您先检查设置,则会顺利进行。

有没有办法在打开工作簿时自动重命名现有工作表?

如果您使用 Workbook_Open 机制而不是 Workbook_SheetChange,则代码将在您打开工作簿时运行。因此,如果使用 ReplaceInvalidChars 一次检查所有工作表名称,则可以在每次打开工作表时调整名称。

如果混入换行符、制表符等隐藏字符可以吗?

工作表名称中不能使用换行符和制表符,因此它们会在代码中自动删除。如果您在单元格内使用换行符,则仍然可以毫无问题地对其进行处理。

有时工作表名称会自动缩短或更改为不同的字符。怎么了?

在 ReplaceInvalidChars 阶段,Excel 会将不能使用的字符替换为其他字符,并在字符超过 31 个字符时将其截断。如果它发生意外变化,请尝试调整此函数内的处理。

更改工作表名称会导致公式中的链接断开吗?

是的,这是可能的。例如,如果您在另一个单元格中直接引用类似“=sheet name!A1”的内容,则如果名称更改,链接可能会中断。如果您在许多公式中指定工作表名称,则提前查看参考方法是安全的。

其他 Excel 相关文章

单击此处查看其他 Excel 相关文章。请看一下。