ชื่อของช่วงที่ตั้งชื่อสามารถเป็นแบบไดนามิกได้หรือไม่?


2

ฉันต้องการชื่อของช่วงที่มีชื่อใน excel ให้เป็นแบบไดนามิก (ตรงข้ามกับช่วงของตัวเอง!) ฉันต้องการทราบว่า / ฉันสามารถกำหนดชื่อช่วงโดยใช้สูตรหรือเซลล์อ้างอิงได้อย่างไรเพื่อให้ชื่อเปลี่ยนไปเมื่อเนื้อหาของเซลล์อ้างอิงเปลี่ยนไป

เช่นถ้าฉันเขียนรายการในคอลัมน์และเขียนชื่อของรายการที่ด้านบนของคอลัมน์เช่น:

     A
1 *Colours*
2  Red
3  Yellow
4  Blue

จากนั้นตั้งชื่อช่วงเซลล์ของรายการ (A2: A4) หลังชื่อเรื่องของรายการ (A1) ฉันต้องการให้ชื่อช่วงเปลี่ยนโดยอัตโนมัติหากชื่อของรายการเปลี่ยนแปลง (เช่นชื่อช่วง = A1 และ การเปลี่ยนแปลงชื่อหากเนื้อหาของการเปลี่ยนแปลง A1)

ข้อมูลเพิ่มเติมเกี่ยวกับกรณีเฉพาะของฉัน: ฉันกำลังใช้ช่วงที่ตั้งชื่อไว้เพื่อสร้างรายการแบบเลื่อนลงที่ขึ้นอยู่กับแบบไดนามิกและหลายรายการในสเปรดชีต Excel ที่ให้ผู้อื่นใช้ ทุกอย่างถูกตั้งค่าเพื่อให้ผู้ใช้ต้องการเพิ่มรายการลงในรายการที่มีอยู่ (ในแผ่นงานรายการที่รองรับ) จากนั้นรายการแบบเลื่อนลง (ในแผ่นงานตารางหลัก) จะเปลี่ยนโดยอัตโนมัติ อย่างไรก็ตามความท้าทายต่อไปของฉันคือการทำให้ผู้ใช้สามารถเพิ่มรายการใหม่ได้ง่าย แผนของฉันคือการจัดเตรียมคอลัมน์รายการอะไหล่ (ในแผ่นงานรายการที่สนับสนุน) ตั้งค่าไว้แล้วดังนั้นเมื่อกรอกแล้วจะเปลี่ยนเป็นรายการแบบเลื่อนลงโดยอัตโนมัติ (ในแผ่นงานตารางหลัก) สูตรการตรวจสอบความถูกต้องของข้อมูลทั้งหมด (ใช้ช่วงที่มีชื่อ) ถูกตั้งค่าเพื่อสร้างรายการแบบเลื่อนลงในแผ่นงานตารางหลักขั้นตอนที่ขาดหายไปคือการตั้งชื่ออัตโนมัติของช่วงรายการเมื่อผู้ใช้ป้อนชื่อรายการใหม่

ฉันจะขอบคุณมากสำหรับคำแนะนำใด ๆ !


ไม่A1มีค่าคงที่หรือสูตร ??
นักเรียน Gary's

มันมีค่าคงที่
Joanna McMillan

คำตอบ:


2

สมมติว่าค่าใน A1 จะถูกป้อนแทนที่จะตั้งค่าตามสูตร ป้อนแมโครเหตุการณ์ต่อไปนี้ในพื้นที่รหัสแผ่นงาน:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim str As String
    str = Range("A1").Text
    If Intersect(Range("A1"), Target) Is Nothing Then Exit Sub
    Dim n As Name
    For Each n In ActiveWorkbook.Names
        If n.RefersTo = "=Sheet1!$A$2:$A$4" Then
            n.Delete
        End If
    Next n
    ActiveWorkbook.Names.Add Name:=str, RefersTo:="=Sheet1!$A$2:$A$4"
End Sub

เนื่องจากเป็นรหัสแผ่นงานจึงง่ายต่อการติดตั้งและใช้งานโดยอัตโนมัติ:

  1. คลิกขวาที่ชื่อแท็บใกล้กับด้านล่างของหน้าต่าง Excel
  2. เลือก View Code - นี่จะเป็นการเปิดหน้าต่าง VBE ขึ้นมา
  3. วางสิ่งต่างๆลงในและปิดหน้าต่าง VBE

หากคุณมีข้อกังวลใด ๆ ก่อนอื่นให้ลองทำในเวิร์กชีทรุ่นทดลอง

หากคุณบันทึกเวิร์กบุ๊กแมโครจะถูกบันทึกด้วย หากคุณกำลังใช้ Excel รุ่นที่ใหม่กว่าในปี 2003 คุณต้องบันทึกไฟล์เป็น. xlsm แทนที่จะเป็น. xlsx

ในการลบมาโคร:

  1. เปิดหน้าต่าง VBE ขึ้นมาข้างต้น
  2. ล้างรหัสออก
  3. ปิดหน้าต่าง VBE

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับมาโครโดยทั่วไปโปรดดู:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

และ

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับแมโครเหตุการณ์ (รหัสแผ่นงาน) โปรดดู:

http://www.mvps.org/dmcritchie/excel/event.htm

ต้องเปิดใช้งานแมโครเพื่อให้สิ่งนี้ทำงาน !

แก้ไข # 1 :

หากต้องการใช้ A1 & B1 เป็นชื่อให้แทนที่:

str = Range("A1").Text

ด้วย:

str = Range("A1").Text & Range("B1").Text

ขอบคุณมากสำหรับคำตอบที่รวดเร็วและมีประสิทธิภาพมากและสำหรับลิงก์ที่มีประโยชน์! เป็นไปได้ไหมที่ใช้แมโครเหตุการณ์นี้เพื่อตั้งชื่อช่วงไม่ใช่แค่ A1 แต่เป็น A1 บวกเซลล์อื่น (เช่นช่วงที่มีชื่อ = A1 & B1)?
Joanna McMillan

แน่นอนว่า .............. ดูแก้ไข # 1
นักเรียน Gary
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.