ฟังก์ชัน Excel เพื่อแทรกตัวแปรลงในสตริง


2

กำลังมองหาวิธีที่จะบรรลุเป้าหมายดังต่อไปนี้ ลองนึกภาพฉันมี 2 คอลัมน์

A    |   B
---------------
NAME |   SURNAME
---------------
Ned  | Stark
Arya | Stark
Sansa| Bolton

ฉันต้องการให้คอลัมน์ C มีสิ่งต่อไปนี้: "ถัดไปที่จะตายจะเป็นชื่อนามสกุลไชโย!"

ดังนั้นเพื่อให้บรรลุนี้ฉันจะทำสูตรเช่น

=concatenate(The next to die will be,A2,' ',B2,'. Cheers!')

แล้วดึงแถวทั้งหมดของฉันลง

แต่นี่เป็นตัวอย่างเล็กน้อย บางครั้งฉันอาจมีมากกว่า 20 คอลัมน์และสตริงที่ได้นั้นซับซ้อนกว่านี้มาก จะต้องมีวิธีที่ดีกว่าในการทำเช่นนี้? ฉันคิดว่าเป็นสิ่งที่ไม่ยุติธรรมกับ c # function "Format" เช่น

=Format('The next to die will be {0} {1}. Cheers!',A2,B2)

ข้อเสนอแนะใด ๆ


หากคุณกำลังคัดลอกสูตรคุณต้องสร้างเพียงครั้งเดียวและการเชื่อมโยงการอ้างอิงเซลล์จำนวนมากใช้เวลาน้อยลงกว่าการเขียนคำถามนี้ มันไม่ชัดเจนว่าปัญหาคืออะไร
fixer1234

ฉันไม่เห็นด้วย. หากฉันมี 20 คอลัมน์และสตริงผลลัพธ์คือ 200 ตัวอักษรซึ่งปูหญ้าด้วยเครื่องหมาย apostrophes และเครื่องหมายจุลภาค (ฉันกำลังสร้างคำสั่ง sql) อาจใช้เวลานานและอาจเกิดข้อผิดพลาดได้ง่าย มีวิธีอื่นในการทำเช่นนี้ (ฉันสามารถเขียนแอป C # เพื่อสร้างผลลัพธ์หรือฉันสามารถแทรก sql จำนวนมากและใช้ procs ที่เก็บไว้เพื่อทำการยกอย่างหนัก) แต่นั่นไม่ใช่ประเด็นของคำถามของฉันฉันกำลังมองหาวิธีแก้ไขปัญหาที่ดีกว่าในการต่อข้อมูล
Crudler

1
ฉันคิดว่าจะ downvote ที่ใช้แทนSansa Bolton Sansa Stark
jcbermu

1
หวังว่าใครบางคนจะหยิบมันขึ้นมา :) ความขัดแย้งเล็กน้อยดึงดูดฉันมาดู: P
Crudler

คำตอบ:


2

ตัวเลือกที่ 1:

="The next to die will be "& A2 & ' '& B2 & ". Cheers!"

ตัวเลือกที่ 2:

(สำหรับผู้ใช้ที่ไม่ยอมใครง่ายๆ)

สร้างฟังก์ชั่นของคุณเอง:

Function myString(ParamArray Vals() As Variant)
    Separator1 = "{"
    Separator2 = "}"
    finalString = ""
    initialString = Vals(0)
    found = True
    firstpos = 1
    While found = True
        pos = InStr(firstpos, initialString, Separator1)
        If pos = 0 Then
            found = False
            endpartval = Mid(initialString, firstpos)
            finalString = finalString + endpartval
        Else
            stringParts = Mid(initialString, firstpos, pos - firstpos)
            pos1 = InStr(pos, initialString, Separator2)
            firstpos = pos1 + 1
            varNumber = Mid(initialString, pos + 1, pos1 - pos - 1)
            finalString = finalString + stringParts + Vals(varNumber + 1)
        End If
    Wend
    myString = finalString
End Function

เพื่อให้มันใช้งานได้คุณต้องเปิด VBA / Macros ด้วยALT+ F11จากนั้นภายใต้ThisWorkbookแทรกโมดูลใหม่และวางรหัส

ตอนนี้คุณสามารถใส่เซลล์ใดก็ได้

=mystring("The next to die will be {0} {1}. Cheers!",A2,B2)

หรืออะไรก็ตาม โปรดทราบว่าสตริงจะต้องไปก่อนแล้วจึงอ้างอิงเซลล์

สิ่งนี้ใช้ได้:

=mystring("The next to die will be {0}, {3} and {2}. Cheers!",A2,B2,B3)

นี่ไม่ใช่:

=mystring(A2,"The next to die will be {0}, {3} and {2}. Cheers!",B2,B3)

0

ไม่มีฟังก์ชั่นดังกล่าวใน Excel คุณสามารถใช้SUBSTITUTEแต่มันจะยังคงยาว:

=SUBSTITUTE(SUBSTITUTE("The next to die will be {1} {2}","{1}",A2),"{2}",B2)

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