[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 相關文章。請看一下。