แก้ไข: เพิ่มตัวอย่างข้อมูลดิบด้านล่าง
ฉันจัดทำรายงานการเคลมทุกเดือนและคัดลอกข้อมูลลงในแท็บ ข้อมูลทั้งหมดถูกจัดระเบียบเป็นคอลัมน์ และฉันใช้สเปรดชีตที่เต็มไปด้วย SumProduct
และ CountIf
เพื่อนับและจัดระเบียบข้อมูลตามเกณฑ์ชุดต่างๆ แต่ใช้เวลานานเกินไปในการประมวลผล ดังนั้นฉันจึงพยายามเขียน VBA ย่อยเพื่อให้บรรลุผลสำเร็จได้อย่างมีประสิทธิภาพมากขึ้น ข้อมูลคอลัมน์หนึ่งคือ "Adjuster Home Office" คอลัมน์นี้โดยพื้นฐานแล้วคือรายชื่อสำนักงานที่การเรียกร้องแต่ละครั้งเกิดขึ้น ฉันใช้ AdvancedFilter
เพื่อแยกค่าที่ไม่ซ้ำกันทั้งหมดในคอลัมน์นี้ และคัดลอกไปยังแท็บแยกต่างหากในคอลัมน์ A จากนั้น ในคอลัมน์ C ใต้แต่ละสถานที่ ฉันมีรายการประเภทการอ้างสิทธิ์หรือ "รายการโฆษณา" ที่จัดการในแต่ละแห่ง สำนักงาน. ฉันไม่มีปัญหาในการตั้งค่าส่วนนี้ ในคอลัมน์ D ฉันจะต้องสามารถแสดงจำนวนแต่ละรายการในตำแหน่งที่กำหนดได้ นี่คือจุดที่ Countif
และ SumProduct
ทั้งหมดเข้ามามีบทบาทในเทมเพลตเก่าของฉันที่ฉันใช้ นี่คือจุดที่ฉันได้รับอุปสรรค์ ฉันกำลังพยายามใช้ For Each loops เพื่อนับแต่ละรายการในคอลัมน์ B ใต้ตำแหน่งแรก จากนั้นย้ายไปยังตำแหน่งถัดไปในคอลัมน์ A แล้วทำซ้ำ ด้านล่างเป็นรหัสที่ฉันได้ลอง:
Private Sub CommandButton23_Click()
Dim linerngs As Range
Dim lineitem As Range
Dim lastlinerow As Long
Dim wsf
Dim TabLastRow
Dim claimstab As String
Dim officesrange As Range
Dim office As Range
claimstab = Sheet2.Range("F2") & " Claims"
TabLastRow = Sheets(claimstab).Cells(Sheets(claimstab).Rows.Count, "A").End(xlUp).Row
Set wsf = Application.WorksheetFunction
officeslastrow = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
lastlinerow = Sheet2.Range("C" & Rows.Count).End(xlUp).Row
Set officerng = Range("A6:A" & officeslastrow).SpecialCells(xlCellTypeConstants, 23)
Set linerngs = Range("C7:C" & lastlinerow).SpecialCells(xlCellTypeConstants, 23)
For Each office In officerng
For Each lineitem In linerngs
If InStr(1, lineitem.Value, "IN") > 0 And InStr(1, lineitem.Value, "AOS") = 0 Then
lineitem.Offset(0, 3) = Application.WorksheetFunction.SumProduct(wsf.CountIfs(Sheets(claimstab).Range("B2:B" & TabLastRow), office))
End If
Next lineitem
Next office
End Sub
ฉันรู้ว่าสิ่งนี้ไม่ถูกต้องเนื่องจากการวนซ้ำเหล่านี้จะวนซ้ำทุกอย่างในคอลัมน์ B ไม่ใช่แค่รายการโฆษณาด้านล่างแต่ละตำแหน่ง ดังนั้นสิ่งที่ฉันได้คือจำนวนตำแหน่งสุดท้ายที่แสดงสำหรับทุกรายการในคอลัมน์ทั้งหมด ด้านล่างนี้เป็นตัวอย่างของสิ่งที่ฉันต้องการให้มีลักษณะเช่นนี้ ตอนนี้สิ่งที่ฉันกังวลทั้งหมดคือการตั้งค่าการวนซ้ำเพื่อให้ทำงานได้อย่างถูกต้อง
ตัวอย่างสิ่งที่ฉันได้รับในปัจจุบัน [
ตัวอย่างของสิ่งที่ฉันพยายามจะได้รับ [
คุณจะเห็นได้จากตัวอย่างแรกว่าฉันได้รับค่า "3" สำหรับทุกสิ่ง ฉันรวมสาระสำคัญของสถานที่และคุณค่าของพวกเขาไว้ด้วย คุณจะเห็นว่าตำแหน่งสุดท้ายในจุดหมุน เซาท์พอร์ตแลนด์ มีจำนวน 3
ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมอย่างมาก.
ตัวอย่างข้อมูลดิบ [
วัตถุประสงค์ [
[รายการของรายการโฆษณาเสร็จสมบูรณ์แล้วซึ่งสร้างขึ้นโดยแบบฟอร์มผู้ใช้ที่ขอให้ผู้ใช้ใส่ข้อมูล
Cells()
,Range()
,Rows.Count
ฯลฯ ตัวอย่างเช่น เปลี่ยนบรรทัดของคุณเป็นofficeslastrow = Sheet2.Range("A" & Sheet2.Rows.Count).End(xlUp).Row
(และเหมือนกันสำหรับตัวแปรอื่น) - person BruceWayne   schedule 24.11.2015