สูตร Excel ที่ส่งคืนที่อยู่ของเซลล์ก่อนหน้าทันทีหรือไม่


2

ฉันจะส่งคืนที่อยู่ของเซลล์ก่อนหน้าโดยตรงได้อย่างไร และใช้ในสูตรเช่น OFFSET () หรือ IF ()?

เช่น:

  • เซลล์ที่มีที่อยู่ C1 คะแนนไปยังเซลล์ D30 (บนแผ่นงานเดียวกันหรืออีกเล่มหนึ่งในสมุดงานเดียวกัน)
  • CELL (C1)ส่งคืน C1 ไม่ใช่ D30 และINDEX (C1)ส่งคืนค่า C1
  • ช่วง ("C1") DirectPrecedentควรใช้งานได้ แต่ฉันไม่สามารถนำไปใช้กับรูปแบบการทำงานใด ๆ ได้

ฉันพยายามทำฟังก์ชั่น:


Function DirectPrecedent(rng As Range)
    Range(rng).DirectPrecedents
End Function

ซึ่งดูเหมือนจะไม่ทำงาน (แต่ฉันไม่รู้จัก VBA ดังนั้นฉันจึงไม่แปลกใจที่นั่น)

ดังนั้นฉันจะทำอย่างไรเพื่อให้ได้สิ่งที่ใช้ได้:

  • OFFSET(DirectPrecedentOf(C1),0,3) - เซลล์ 3 คอลัมน์ทางด้านขวาของ D30

  • หรือ: IF(DirectPrecedentOf(C1)=TODAY(),"YES","NO")- ถ้า D30 = วันที่วันนี้คืน "YES"

เป็นไปได้หรือไม่ว่าจะเป็นคะแนน C1 ถึง D30 หรือ 'Sheet2'! D30?

แก้ไข: ได้รับการแนะนำฉันชี้แจงว่าทำไมฉันต้องการสิ่งนี้ดังนั้นนี่คือข้อมูลเพิ่มเติม:

B1: OFFSET(DirectPrecedentOf(C1),0,3)
C1: 'Sheet2'!D30
'Sheet2'!D30:D40: List of dates
'Sheet2'!G30:G40: List of dollar amounts

โดยทั่วไปฉันต้องการบางอย่างเช่น "ในคอลัมน์ C, ใส่วันที่จากคอลัมน์ 'Sheet2'! D, ในเซลล์ B1, ใส่ค่าจากเซลล์สามเซลล์ทางด้านขวาของเซลล์ใดก็ตามที่ถูกเรียกในคอลัมน์ C"


Range(C1).DirectPrecedent- ฟังก์ชัน / คุณสมบัติดังกล่าวไม่มีอยู่ใน Excel เหตุใดคุณจึงใช้งาน คุณมีโมดูล / ส่วนเสริมที่ใช้งานหรือไม่? นอกจากนี้ยังมีเซลล์จำนวนมากที่อ้างถึงในสูตรคุณต้องการใช้เซลล์ใดในกรณีนี้
MátéJuhász

สิ่งที่คุณกำลังมองหามีการจัดการโดยทั่วไปผ่าน VLOOKUP หรือ INDEX & MATCH เช่นVLOOKUP(C1,Sheet2!D30:G40,4,false)
MátéJuhász

@ MátéJuhász Range("range").DirectPrecedentsมีอยู่ใน VBA ฉันพยายามหาวิธีใช้ในสูตรหรือหาวิธีอื่นที่ให้ผลลัพธ์เหมือนกัน ฉันจะดูที่ VLOOKUP ขอบคุณ!
Christiebunny

ในการส่งคืนค่าในฟังก์ชันใน VBA คุณกำหนดค่าที่ส่งคืนให้กับชื่อฟังก์ชันที่ใช้ "direct beforeent = range (c1) .directprecedents"
Ross

คำตอบ:


2

ตามความรู้ของฉันไม่มีสูตรดังกล่าวเป็น Excel จะกลับแบบอย่างและที่อยู่ของเซลล์ขึ้นอยู่กับ

แต่ฉันสามารถแนะนำคุณรหัส VBA ซึ่งพบว่าแบบอย่างเป็น OP

หมายเหตุ:หลังจากที่คุณเรียกใช้รหัสนี้ให้ตรวจสอบหน้าต่าง Immediate ใน VBA Editor สำหรับที่อยู่เซลล์ของแบบอย่าง

Private Sub CommandButton1_Click ()

Dim rngToCheck As Range
Dim rngPrecedents As Range
Dim rngPrecedent As Range

Set rngToCheck = Range("A2:A10")

On Error Resume Next
Set rngPrecedents = rngToCheck.Precedents
On Error GoTo 0

If rngPrecedents Is Nothing Then
    Debug.Print rngToCheck.Address(External:=True) & _
                "Range has no precedents"
Else
    For Each rngPrecedent In rngPrecedents
        Debug.Print rngPrecedent.Address(External:=True)
    Next rngPrecedent
End If

ส่วนท้าย

หมายเหตุ Excel จะค้นหาช่วงข้อมูลอ้างอิง A2: A10 คุณสามารถตั้งค่าตามที่คุณต้องการ

หวังว่านี่จะช่วยคุณได้ ฉันโพสต์โซลูชันนี้หลังจากผ่านการทดสอบโดยฉัน

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