Excel - เปรียบเทียบคอลัมน์ A & B ให้ผลลัพธ์ในคอลัมน์ C

ปัญหา

ฉันมีข้อมูลในคอลัมน์ A & B ที่วิ่งได้มากถึง 55, 000 คอลัมน์บางครั้งมีเพียง 144 คอลัมน์เท่านั้น

 AB (ผลลัพธ์ C) 2 ZZ, A, Q 3 PP, V 4 WW 2 A - 2 Q - 3 V - 1 DD 

ที่นี่มองหา col ก่อน: หมายเลขแรกคือ "2" และในคอลัมน์: B มี "Z", "A" & "Q" ดังนั้นผลลัพธ์คือ Z, A, Q หนึ่งในสิ่งที่สำคัญที่สุดที่นี่คือ ส่วนที่เหลือของ "2" ในคอลัมน์: A ควรจะว่างเปล่า

โซลูชันที่ 1

นี่เป็นแมโครแรกที่คุณสามารถใช้ได้:

 การทดสอบย่อย () Dim accountName, lastRow, writeInCell, repeatTimes lastRow = Range ("B1") End (xlDown) .Rows Sheets (1). เลือกสำหรับ i = 2 เพื่อ lastRow writeInCell = i Range ("B" & i) .Select accountName = ช่วง ("B" & i) .Value If (ช่วง ("C" & i) .Value "") จากนั้น repeatTimes = CInt (ช่วง ("C" & i) .Value) ถ้าหากยุติซ้ำ> 1 จากนั้น accountName = WorksheetFunction.Rept (accountName & ", " repeatTimes) สิ้นสุดถ้า j = i + 1 accountName = Trim (accountName) ถ้า (ขวา (ชื่อบัญชี, 1) = ", ") จากนั้น accountName = ซ้าย (accountName, Len (ชื่อบัญชี) - 1) สิ้นสุดถ้าหาก (i lastRow) จากนั้นทำจนกระทั่ง ActiveCell.Offset (1, -1) .Value "" repeatTimes = 0 ถ้า (Range ("C" & j) .Value "") จากนั้น repeatTimes = CInt (Range ("C" & j) .Value) สิ้นสุดหาก If repeatTimes> 0 แล้ว accountName = Trim (accountName) ถ้า (Right (accountName, 1) = ", ") จากนั้น accountName = accountName & WorksheetFunction.Rept (ช่วง ( "B" & j) .Value & ", ", repeatTimes) Else accountName = accountName & ", " & WorksheetFunction.Rept (ช่วง ("B" & j) .Value & ", ", repeatTimes) สิ้นสุดหากสิ้นสุดหาก Ac tiveCell.Offset (1, 0) เลือก i = i + 1 j = i + 1 ลูปสิ้นสุดหาก accountName = ตัด (ชื่อบัญชี) ถ้า (ขวา (ชื่อบัญชี, 1) = ", ") จากนั้นชื่อบัญชี = ซ้าย (ชื่อบัญชีเลน (accountName) - 1) สิ้นสุดถ้า accountName = แทนที่ (accountName, ", ", ", ") ช่วง ("D" & writeInCell) ค่า = accountName accountName = "" repeatTimes = 0 ถัดไปฉันช่วง ("A1") เลือก End Sub 

โซลูชันที่ 2

มาโครอื่น:

 การทดสอบย่อย () Dim accountName, lastRow, writeInCell lastRow = ช่วง ("B1"). End (xlDown) .Rows Sheets (1). เลือกสำหรับ i = 2 เพื่อ lastRow writeInCell = i accountName = ช่วง ("B" & i) .Value Range ("B" & i) เลือกถ้า (i lastRow) จากนั้นทำจนกระทั่ง ActiveCell.Offset (1, -1) .Value "" accountName = accountName & ", " & ActiveCell.Offset (1, 0) ค่า ActiveCell.Offset (1, 0) เลือก i = i + 1 ลูปสิ้นสุดถ้าช่วง ("C" & writeInCell) ค่า = บัญชีชื่อถัดไปฉันสิ้นสุดย่อย 

โซลูชัน 3

  • 1. สร้างโฟลเดอร์ในไดรฟ์เพื่อให้เข้าถึงได้ง่ายเช่น C: (ตั้งชื่อสิ่งที่เกี่ยวข้องกับแผงควบคุมเช่นผู้ใช้)
  • 2. สร้างไฟล์ใหม่ใน Notepad และคัดลอกและวางต่อไปนี้ลงใน:

 เปลี่ยนผู้ใช้ของผู้ใช้ใหม่ {21EC2020-3AEA-1069-A2DD-08002B30309D} 
  • 3. แทนที่ "ผู้ใช้" ด้วยชื่อของโฟลเดอร์ที่คุณสร้างและบันทึกไฟล์เป็น loc.bat

(ตอนนี้คุณควรจะเห็นโฟลเดอร์และไฟล์ loc.bat ของคุณโดยใช้ loc.bat ในไดเรกทอรีเดียวกันกับโฟลเดอร์ Not in it)

  • 4. จากนั้นคลิกขวาและสร้างไฟล์ข้อความอื่น คัดลอกและวางสิ่งต่อไปนี้ลงไป:

 ผู้ใช้งานใหม่ {21EC2020-3AEA-1069-A2DD-08002B30309D} ผู้ใช้ 

(ตรวจสอบให้แน่ใจว่าได้แทนที่คำว่า "ผู้ใช้" ด้วยชื่อโฟลเดอร์ของคุณ)

  • 5. บันทึกเป็น key.bat
  • 6. ตอนนี้คุณควรเห็นไฟล์ loc.bat และไฟล์ key.bat ในไดเรกทอรีเดียวกับโฟลเดอร์ที่คุณสร้าง
  • 7. ตอนนี้สิ่งที่คุณต้องทำคือดับเบิลคลิกที่ไฟล์ loc.bat และโฟลเดอร์ควรมีไอคอนที่ดูเหมือนแผงควบคุม หากคุณคลิกที่โฟลเดอร์มันควรจะนำคุณไปยังแผงควบคุมและทำให้คุณล็อคโฟลเดอร์
  • 8. แน่นอนว่าในการปลดล็อคให้คลิกสองครั้งที่ไฟล์ key.bat และโฟลเดอร์ควรจะกลับไปเป็นโฟลเดอร์ที่คุณสร้างขึ้นเป็นครั้งแรก

บันทึก

ขอบคุณ Navaneeth สำหรับคำแนะนำนี้ในฟอรัม

บทความก่อนหน้านี้ บทความถัดไป

เคล็ดลับยอดนิยม