Excel - คืนค่าหลายค่าสำหรับแต่ละรายการค่า


2

ฉันพยายามที่จะแก้ปัญหานี้ในไม่กี่ชั่วโมงตอนนี้ แต่ไม่มีผล ...

การตั้งค่าของฉัน:

  • ฉันมีแผ่น Excel ของสูตรผลิตภัณฑ์เครื่องสำอาง

  • แต่ละสูตรมีหลายสิบของส่วนผสมแต่ละที่กำหนดโดยตัวของมันชื่อทางการค้า

  • ฉันมีรายชื่อยาวแปลชื่อทางการค้าของแต่ละคนที่จะชื่อ 'วิทยาศาสตร์'

ฉันจำเป็นต้องแปลชื่อทางการค้าแต่ละชื่อให้เป็นคู่ทางวิทยาศาสตร์ ส่วนนี้เป็นเรื่องง่ายมากที่จะทำกับ vlookup

แต่บางชื่อทางการค้าที่มีสูตรในตัวเองที่มีส่วนผสมหลายในตารางของชื่อวิทยาศาสตร์ ดังนั้นมันจึงไม่ใช่ความสัมพันธ์ 1: 1 บางครั้ง (ไม่เสมอไป) ก็คือ 1: มากมาย

ตัวอย่างเช่น:

เครื่องสำอางค์ A sheet

 IngredientA_trade_name

 IngredientB_trade_name

 IngredientC_trade_name

แลกเปลี่ยนไฟล์ต้นแบบของรายชื่อทางวิทยาศาสตร์:

 IngredientA_trade_name     Science1
 IngredientB_trade_name     Science2
 IngredientB_trade_name     Science3
 IngredientB_trade_name     Science4    
 IngredientC_trade_name     Science5
 IngredientC_trade_name     Science6

 ....etc, for lots and lots of ingredients.

ตอนนี้ฉันได้พบวิธีที่จะคืนค่าหลายค่า แต่ไม่มีสิ่งเหล่านี้ทำงานโดยอัตโนมัติ:

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

มีวิธีการผ่านรายการชื่อทางการค้าและแทรกแถวตามความจำเป็นที่มีชื่อวิทยาศาสตร์ทั้งหมดหรือไม่?


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

สวัสดี jcbermu! ใช่ปัญหา w / vlookup คือหยุดหลังจากพบอินสแตนซ์แรก - ไฟล์มาสเตอร์มีชื่อทางวิทยาศาสตร์ประมาณ 6,000 ชื่อโดยเพิ่มมากขึ้นทุกขณะจากนั้นสูตรอาหารทั่วไปสามารถมีส่วนผสมได้มากถึง 30 รายการ - ระบุชื่อวิทยาศาสตร์ได้ใน> 1 ส่วนผสมของสูตรเดียวกัน -3,000 สูตรอาหารที่ใช้งานได้ (ในสต็อก) - ขีด จำกัด บนสุดของส่วนผสมสังเกตุจะอยู่ที่ประมาณ 40-45 เครื่องหมาย นี่อาจหมายความว่าจำนวนชื่อทางวิทยาศาสตร์ (ถ้านั่นคือสิ่งที่คุณขอ) ที่เกี่ยวข้องกับผู้รับจะเป็นสามหรือสี่เท่า ขอบคุณสำหรับความสนใจของคุณ!
Gryzor

คำตอบ:


1

มาโครนี้ที่ใช้ VBA จะทำงาน:

Public Sub ingredients()
    Dim wkb As Workbook
    Dim wks, wks1 As Worksheet
    Set wkb = ThisWorkbook
    Set wks = ActiveSheet
    wks.Application.ScreenUpdating = False
    mastername = "Master"
    totalsheets = wkb.Worksheets.Count
    For i = 1 To totalsheets
        Set wks1 = wkb.Worksheets(i)
        wks1name = wks1.Name
        If wks1name = mastername Then
            i = totalsheets
        Else
            Set wks1 = Nothing
        End If
    Next i
    reviewing = True
    activerow = 1
    While reviewing
        tradename = wks.Cells(activerow, 1)
        If tradename = "" Then
            reviewing = False
        End If
        reviewingmaster = True
        activerowmaster = 1
        found = 0
        While reviewingmaster
            sciname = wks1.Cells(activerowmaster, 1)
            If sciname = "" Then
                reviewingmaster = False
            End If
            If sciname = tradename Then
                found = found + 1
                If found > 1 Then
                    activerow = activerow + 1
                    wks.Rows(activerow).Insert
                End If
                wks.Cells(activerow, 2) = wks1.Cells(activerowmaster, 2)
                wks.Cells(activerow, 3) = wks1.Cells(activerowmaster, 3)
            End If
            activerowmaster = activerowmaster + 1
        Wend
        activerow = activerow + 1
    Wend
    wks.Application.ScreenUpdating = True
    theend = MsgBox("Finished on " & wks.Name, vbInformation)
End Sub

คุณต้องเปิด Macros / VBA แทรกโมดูลภายใต้ThisWorkbookและวางรหัสทางด้านขวา

โปรดจำไว้ว่า:

  • รหัสทำงานบนแผ่นงานที่ใช้งานอยู่
  • ชื่อวิทยาศาสตร์ใหม่ทุกชื่อนอกเหนือจากชื่อแรกสำหรับชื่อทางการค้าจะถูกเพิ่มในแถวใหม่
  • รหัสถูกเตรียมให้ทำงานตราบใดที่ไม่มีเซลล์ว่างในคอลัมน์ A ของแผ่นงาน
  • เนื่องจากสมมติว่าชื่อของเวิร์กชีทรายการหลักคือปรมาจารย์คุณต้องเปลี่ยนบรรทัดmastername="Master"เป็นชื่อที่เหมาะสม
  • การตั้งชื่อการค้า 500 ชื่อและชื่อทางวิทยาศาสตร์ 5,000 ชื่อใช้เวลา 23 วินาที

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

ฟังก์ชั่นไม่สามารถแทรกแถวเซลล์หรือคอลัมน์
jcbermu

... และฉันลืมไปแล้ว แน่นอนว่าจะใช้มาโครในการนี้เสมอ มนุษย์จะต้องเป็นสนิม ... : D
Gryzor

(ไม่ต้องสนใจความคิดเห็นก่อนหน้านี้หากคุณอ่านการจัดรูปแบบของฉันผิด ... ) ใช้งานได้! เย้!!!!!!! ขณะที่อยู่ในนั้นมันจะเป็นกระสุนได้อย่างง่ายดายหรือไม่ที่จะดึงคอลัมน์อื่น (%) ซึ่งสอดคล้องกับชื่อทางวิทยาศาสตร์แต่ละชื่อด้วยหรือไม่ เช่น Water (Trade) = aqua (วิทยาศาสตร์) 100% ในขณะที่ X (Trade) สามารถเป็น = 20%, b = 50% เป็นต้นเปอร์เซ็นต์เหล่านี้อยู่ในคอลัมน์ถัดไปใน Master ขอบคุณอีกครั้ง @jcbermu ... ไม่สามารถชื่นชมพอ!
Gryzor

@Gryzor แก้ไขแล้ว หลังจากที่สายฉันใส่นี้:wks.Cells(activerow, 2) = wks1.Cells(activerowmaster, 2) wks.Cells(activerow, 3) = wks1.Cells(activerowmaster, 3)
jcbermu

1

สำหรับ Excel 2010 หรือ 2013 ฉันจะใช้ Power Query Add-In สำหรับสิ่งนี้ จาก Excel 2016 Power Query จะถูกสร้างไว้ใน Ribbon ข้อมูลภายใต้ส่วน "รับและแปลง"

Power Query สามารถเริ่มต้นจากตาราง Excel มันมีคำสั่งผสานที่สามารถเข้าร่วมแบบสอบถามด้วยตัวเลือกเพื่อให้การแข่งขันเท่านั้น ผลการสืบค้นสามารถเขียนไปยังตาราง Excel

ความต้องการของคุณจะใช้เวลาสักครู่ในการออกแบบใน Power Query โดยไม่ต้องใช้รหัส

...

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

http://1drv.ms/1AzPAZp

มันเป็นไฟล์: Power Query demo - คืนค่าหลายค่าสำหรับแต่ละรายการของค่า

ฉันใช้เวลาในการสร้างน้อยกว่า 2 นาที (ไม่นับการคัดลอกในข้อมูลอินพุตและเขียนแผ่น Read Me) และไม่ต้องการรหัส / ฟังก์ชั่นใด ๆ

เทคนิคสำคัญคือผสานและขยายดังที่อธิบายไว้ที่นี่:

https://support.office.com/en-us/article/Merge-queries-Power-Query-fd157620-5470-4c0f-b132-7ca2616d17f9


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