เพื่อมุ่งให้เกิดคุณภาพจากการอบรมสูงสุด Excel Expert Training ให้การอบรม Excel กลุ่มเล็กๆ ไม่เกิน 6 คนทุกคนสามารถเรียนรู้ Excel อย่างใกล้ชิด จะมาคนเดียวหรือมาเป็นกลุ่มแล้วนัดวันอบรมแบบส่วนตัวก็ได้
ผู้เข้าอบรมทุกคนสามารถติดตามเนื้อหาที่อบรมได้อย่างชัดเจนจากจอภาพด้านหน้าของตัวเอง
-
ต้องการหารหัส VBA แสดงชื่อของเซลล์
สวัสดีครับ
สมมติว่า เราตั้งชื่อเซลล์ A1 ว่า "Goal"
จะหาว่าเซลล์ A1 มีชื่อว่าอะไร ได้อย่างไรด้วย VBA
ขอบคุณครับ
-
ผมทำเป็น ฟังชั่นหาออกมาครับ
เอา range() ไปครอบมันเลยก็ได้ชือออกมาเหมือนกัน
ขอลบออกเพราะมันทำงานไม่ได้
ทำไมเดี่ยวรันผ่านเดี๋ยวไม่ผ่าน งง
-
สวัสดีครับ
ตามความเข้าใจของผม คืออาจารย์ต้องการหา ว่า cellใดๆเพียง1cell อยู่ใน name ใด
ผมได้ลองเขียน vba เป็น function ดังนี้ครับ
Code:
Function NameFromCell(Getrange As Range) Dim i As Integer
Dim namerange As Range
Dim Elerange As Range
For i = 1 To Workbooks.Application.Names.Count
Set namerange = Range(Workbooks.Application.Names(i).Value)
For Each Elerange In namerange
If Elerange.Address = Getrange.Address Then
NameFromCell = Workbooks.Application.Names(i).Name
Exit Function
End If
Next
Next
End Function
ขั้นตอน ที่1 คือเราต้องกำหนด range ของแต่ละname ไว้ตัวแปล range ก่อนโดยอาศัย for next วนloop ทุกname ครับ
แล้ว set ค่า rangeของ name ไว้ตัวแปร แต่ละืnames
ขั้นตอนที่ 2 คืออาศัย for each หาค่า range ใน rangeของname แต่ละตัว
ขั้นตอนที่ 3 เปรียบเทียบaddress ที่เราต้องการหา กับ rangeที่อยู่ในName ใดๆ ว่าตรงกันหรือยัง ถ้าตรงก็แสดงชื่อ name นั้นครับ
ไม่ทราบว่าแบบนี้จะได้ตรงกับคำตอบหรือไม่นะครับ ^^ ขออภัยด้วยถ้าผิดพลาดนะครับ
-
ที่มาของคำถามเกิดจากการใช้ Event ตามนี้ครับ
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
อยากตรวจสอบ Target ว่าเป็นเซลล์ที่ตั้งชื่อไว้ตามนั้นหรือไม่ ถ้าใช่จึงทำงานต่อ
End Sub
ตอนนี้คิดออกมาได้แต่เพียงใช้ address ตรวจสอบว่าตรงกับ address ของชื่อ New ที่ตั้งไว้ ตามนี้ครับ
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Range("New").Address Then
RunMyCode
End If
End Sub
ไม่อยากใช้การตรวจสอบ intersect ด้วยครับ ถ้าใช้แบบคุณ neang ยาวทีเดียว น่าจะมีวิธีสั้นๆ :toetap05:
-
-
ยังไม่ค่อยเข้าใจคำถามครับ
ขอยืนยันความเข้าใจหน่อยครับ
1. จะมีการตั้ง ชื่อ ไว้หลาย ชื่อ ใน sheet?
2. แต่ละชื่อ จะอ้างอิงถึงแค่ 1 cell ?
3. เมื่อเลือกที่ cell ที่มีการตั้ง ชื่อ ไว้ จะทำงานแตกต่างกันไปตาม ชื่อ ที่ตั้งไว้ ?
4. ไม่มีการแสดงชื่อกำกับ เช่น ข้อความใน A1 = "Goal" แล้ว B1 ตั้ง ชื่อ ว่า Goal ?
-
ขอแบบง่ายๆก่อนครับ ในแฟ้มมีแค่ชื่อเดียว ที่เซลล์เดียว A1 ตั้งชื่อว่า New
เซลล์ A1 มีค่าใดๆหรือไม่มีค่าก็ได้ครับ
แทนที่จะใช้รหัสตามแฟ้มแนบนี้ อยากให้แสดง MsgBox เมื่อเซลล์ A1 มีค่าเปลี่ยนไป
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Range("New").Address Then
MsgBox "Hello"
End If
End Sub
ส่วนที่เป็นสีแดง ผมอยากหารหัสที่ใช้ตรวจสอบว่า A1 มีชื่อว่า New แทนครับ
ผมลองแบบนี้แล้วไม่ทำงาน
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Names.Name = "New" Then
MsgBox "Hello"
End If
End Sub
-
ขอโทษนะครับ ยังไม่เข้าใจจริงๆ
ผมกลับรู้สึกว่า code ของอาจารย์ ก็น่าจะใช้งานได้ดีอยู่แล้ว แต่อาจาย์กลับว่าอยากได้อีกแบบแทน ผมเลยตีความจนไปไม่ถูกเหมือนกัน
-

Originally Posted by
PichaiTC
ขอโทษนะครับ ยังไม่เข้าใจจริงๆ
ผมกลับรู้สึกว่า code ของอาจารย์ ก็น่าจะใช้งานได้ดีอยู่แล้ว แต่อาจาย์กลับว่าอยากได้อีกแบบแทน ผมเลยตีความจนไปไม่ถูกเหมือนกัน

ใช่ครับใช้งานได้อยู่แล้ว เพียงแต่รู้สึกว่าน่าจะมีทางที่ลัดสั้นกว่านี้อยู่อีก
แทนที่ต้องหา address น่าจะเอาชื่อของเซลล์ Target มาตรวจสอบเลยว่าตรงกับชื่อของเซลล์ที่ใช้ทำงานหรือไม่
ผมลองค้นหาจาก google ก็ไม่มีทางอื่นอีก เลยยกปัญหาที่คิดกันไม่ออกมาให้คิดกัน(ไม่ออก)อีกครับ
ทำไม Microsoft จึงไม่สร้างสูตรให้คิดย้อนหาชื่อของเซลล์ไว้บ้าง
มีแต่ตั้งชื่อให้กับเซลล์
-

Originally Posted by
สมเกียรติ
ขอแบบง่ายๆก่อนครับ ในแฟ้มมีแค่ชื่อเดียว ที่เซลล์เดียว A1 ตั้งชื่อว่า New
เซลล์ A1 มีค่าใดๆหรือไม่มีค่าก็ได้ครับ
แทนที่จะใช้รหัสตามแฟ้มแนบนี้ อยากให้แสดง MsgBox เมื่อเซลล์ A1 มีค่าเปลี่ยนไป
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Range("New").Address Then
MsgBox "Hello"
End If
End Sub
ส่วนที่เป็นสีแดง ผมอยากหารหัสที่ใช้ตรวจสอบว่า A1 มีชื่อว่า New แทนครับ
ผมลองแบบนี้แล้วไม่ทำงาน
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Names.Name = "New" Then
MsgBox "Hello"
End If
End Sub
ผมลอง code ตามนี้นะครับ คือ ผมกำหนด Name ชื่อว่า goal range คือ A1 จะได้ว่า names ชื่อ goal มีแค่cell A1 ครับ
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = Range(Application.Names("goal").Value).Address Then MsgBox "hello"
End Sub
ไม่ทราบตรงกับความต้องการหรือไม่นะครับ ^^
Tags for this Thread
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules