ฟังก์ชัน Excel VBA สำหรับการค้นหาค่าและรูปแบบ


2

ฉันต้องการฟังก์ชั่นที่กำหนดเองเพื่อค้นหาทั้งค่าของเซลล์และคัดลอกรูปแบบของแหล่งที่มา ฉันมีรายการของค่าในสองคอลัมน์ ที่แรกเป็นจำนวนเต็มและคอลัมน์ที่สองคือค่าข้อความที่สอดคล้องกัน ตัวอย่างเช่น:

AB
--- ----------
1 ค่าแรก
ของฉัน 2 ค่าที่สอง
ของฉัน 3 ค่าที่สามของฉัน

ฉันต้องการค้นหาค่าที่ฉันให้ตามที่สอดคล้องกับค่าในคอลัมน์ A ตามหมายเลขแถวของเซลล์ที่พบกับค่าที่ตรงกันในคอลัมน์ A มันจะเลือกค่าที่สอดคล้องกันในคอลัมน์ B ซึ่งง่ายพอกับ ฟังก์ชัน LOOKUP () ใน Excel อย่างไรก็ตามฉันต้องการคัดลอกการจัดรูปแบบข้อความของเซลล์ในคอลัมน์ B

ตอนแรกฉันเข้าหาสิ่งนี้โดยใช้ฟังก์ชั่น VBA แต่น่าเสียดายที่ฟังก์ชั่นไม่สามารถเปลี่ยนรูปแบบของเซลล์ จะขอบคุณความคิดเกี่ยวกับวิธีการเข้าใกล้


คุณต้องการค้นหาสตริงในคอลัมน์ A และส่งคืนค่าและการจัดรูปแบบของค่าที่สอดคล้องกันในคอลัมน์ B หรือไม่ กลับไปที่ไหน และมูลค่าที่คุณกำลังมองหาอยู่ที่ไหน
Raystafarian

คำตอบ:


1
Sub test()
    On Error GoTo Suberror
    'turn off screen updating
    Application.ScreenUpdating = False
    'ask for input
    strName = InputBox(Prompt:="Lookup Value", _
              Title:="Lookup Value", Default:="0")
        'if no input - exit
        If strName = "0" Or _
               strName = vbNullString Then

               Exit Sub
        'otherwise Find
        Else

            Columns("A:A").Select
            Selection.Find(What:=strName, After:=ActiveCell, _
            LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, MatchCase:=False, _
            SearchFormat:=False).Activate

            'Copy
            ActiveCell.Offset(0, 1).Copy

        End If

        'Paste to the range that you define
            Range("J1").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
                xlNone, SkipBlanks:=False, Transpose:=False
            Selection.PasteSpecial Paste:=xlPasteFormats, Operation:= _
                xlNone, SkipBlanks:=False, Transpose:=False
Suberror:
    Range("A1").Select
    Application.CutCopyMode = False
    Application.ScreenUpdating = True

    End Sub

ขอบคุณสำหรับการให้ Raystafarian นี้! ความตั้งใจที่จะใช้สิ่งนี้เป็นฟังก์ชั่นเช่น = LookupWithFormatting (A1, IDSource, TextSource) พารามิเตอร์ในตัวอย่างนี้เหมือนกับฟังก์ชัน MSExcel = LOOKUP () นั่นคือวิธีที่ฉันหวังว่าจะเข้าใกล้สิ่งนี้ คิด?
BigBrother

@BigBrother การค้นหาจะส่งคืนค่าเท่านั้นไม่ใช่การจัดรูปแบบ
Raystafarian

ใช่ - นั่นคือสิ่งที่เริ่มปวดจุดนี้ทั้งหมด ฉันเริ่มต้นวิธีการแก้ปัญหาด้วยการเขียนฟังก์ชั่น VBA ที่กำหนดเองซึ่งยอมรับพารามิเตอร์ทั้งสามตามที่ = LOOKUP (... ) ทำ ในโค้ดฟังก์ชัน VBA ฉันเรียกใช้ LOOKUP (... ) และฉันก็หวังว่าจะใช้รหัสเพื่อคัดลอกการจัดรูปแบบเช่นกัน แต่มันก็ใช้ไม่ได้ ฉันค้นพบฟังก์ชั่น MS Excel VBA ไม่สามารถแก้ไขการจัดรูปแบบได้ ความคิดใด ๆ
BigBrother

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

ขอบคุณสำหรับการยิง! คุณคิดว่ามันเป็นไปไม่ได้ที่จะทำเช่นนี้เป็นฟังก์ชั่นหรือไม่?
BigBrother

0

โดยทั่วไปฟังก์ชั่นที่ป้อนในเซลล์ไม่สามารถเปลี่ยนการจัดรูปแบบของเซลล์ที่อยู่ในนั้นได้เนื่องจากฟังก์ชั่นไม่ทราบว่ามีเซลล์ใดอยู่วิธีเดียวที่จะส่งผ่านที่อยู่ของเซลล์ปัจจุบันไปยังฟังก์ชันได้

Function LookupWithFormatting(rValue As Range, rLookup As Range, rResult As Range, rFormatThisCell As Range) As String

ฟังก์ชั่นจะถูกป้อนเข้าในเซลล์ B1 =LookupWithFormatting(A1, IDSource, TextSource, B1)เป็น

หากคุณไม่มีหลายรูปแบบคุณอาจลองใช้การจัดรูปแบบตามเงื่อนไขแทนการเขียนฟังก์ชัน VBA (คุณจะต้องใช้รูปแบบที่มีเงื่อนไขแยกต่างหากสำหรับแต่ละค่าในตารางการค้นหาของคุณ)

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