Sunting: Menambahkan contoh data mentah di bawah
Saya menjalankan laporan klaim setiap bulan dan menyalin data ke dalam tab. Semua data disusun dalam kolom dan saya telah menggunakan spreadsheet yang penuh dengan SumProduct
dan CountIf
untuk menghitung dan mengatur data berdasarkan kumpulan kriteria yang berbeda tetapi prosesnya terlalu lama, jadi saya mencoba menulis VBA sub untuk mencapai hal ini dengan lebih efisien. Salah satu kolom datanya adalah "Adjuster Home Office". Kolom ini pada dasarnya adalah daftar kantor asal setiap klaim. Saya menggunakan AdvancedFilter
untuk mengekstrak semua nilai unik di kolom ini dan menyalinnya ke tab terpisah di kolom A. Kemudian, di kolom C, di bawah setiap lokasi, saya memiliki daftar jenis klaim atau "item baris" yang ditangani di masing-masing lokasi. kantor. Saya tidak punya masalah dalam menyiapkan bagian ini. Di kolom D, saya harus bisa menampilkan jumlah setiap item baris di lokasi yang ditentukan. Di sinilah semua Countif
dan SumProduct
berperan dalam template lama yang saya gunakan. Di sinilah saya menemui hambatan. Saya mencoba menggunakan loop For Each untuk menghitung setiap item baris di kolom B di bawah lokasi pertama, lalu pindah ke lokasi berikutnya di kolom A dan ulangi. Di bawah ini adalah kode yang saya coba:
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
Saya tahu ini salah karena loop ini akan mengulang semua yang ada di kolom B, bukan hanya item baris di bawah setiap lokasi. Jadi yang saya dapatkan adalah hitungan lokasi terakhir yang ditampilkan untuk setiap item baris di seluruh kolom. di bawah ini adalah contoh tampilan yang saya perlukan. Saat ini, yang saya pedulikan hanyalah menyiapkan loop agar berjalan dengan benar.
contoh dari apa yang saya dapatkan saat ini [
contoh dari apa yang saya coba dapatkan [
Anda dapat melihat dari contoh pertama bahwa saya mendapatkan nilai "3" untuk semuanya. Saya menyertakan poros lokasi dan nilainya. Anda dapat melihat bahwa lokasi terakhir di pivot, South Portland, memiliki hitungan 3.
Bantuan apa pun akan SANGAT dihargai.
contoh data mentah [
Tujuan [
[daftar item baris selesai dibuat oleh formulir pengguna yang meminta masukan pengguna
Cells()
,Range()
,Rows.Count
, dll. Misalnya, ubah baris Anda menjadiofficeslastrow = Sheet2.Range("A" & Sheet2.Rows.Count).End(xlUp).Row
(dan hal yang sama untuk variabel lain). - person BruceWayne   schedule 24.11.2015