How to code for each result in column to paste text

时间:2019-01-09 21:56:26

标签: excel vba

Goal: I have a set of results appearing at the next empty row for columns A, B and D (below screenshot). For Column C, I would like to build a function that would, for each result in column say A (from my code), Column C would simply paste "Business Interruption".

enter image description here

My Current code looks as below:

Sub Calc_Parish()

'Calculates the Parish for AICOW

Dim RPDataTbl As ListObject
    Dim parishCol As ListColumn, AICOWcol As ListColumn
    Dim copyRng As Range

    Set RPDataTbl = Sheets("Risk Partner Data").ListObjects("RPdata")
    With RPDataTbl
        Set parishCol = .ListColumns("Parish & Code")
        Set AICOWcol = .ListColumns("AICOW")

        .Range.AutoFilter Field:=AICOWcol.Index, Criteria1:="TRUE"
    End With

    On Error Resume Next
    Set copyRng = parishCol.DataBodyRange.SpecialCells(xlCellTypeVisible)
    On Error GoTo 0

    If Not copyRng Is Nothing Then
        copyRng.Copy

        With Sheets("Calc Data")
            .Cells(.Rows.Count, "A").End(xlUp).Offset(1).PasteSpecial xlPasteValues
        End With

        Application.CutCopyMode = False
    End If

    RPDataTbl.Range.AutoFilter Field:=AICOWcol.Index

End Sub

Sub Calc_Buildno()

' Calculates the Build # for AICOW

Dim RPDataTbl As ListObject
    Dim BuildnoCol As ListColumn, AICOWcol As ListColumn
    Dim copyRng As Range

    Set RPDataTbl = Sheets("Risk Partner Data").ListObjects("RPdata")
    With RPDataTbl
        Set BuildnoCol = .ListColumns("Building ID 1")
        Set AICOWcol = .ListColumns("AICOW")

        .Range.AutoFilter Field:=AICOWcol.Index, Criteria1:="TRUE"
    End With

    On Error Resume Next
    Set copyRng = BuildnoCol.DataBodyRange.SpecialCells(xlCellTypeVisible)
    On Error GoTo 0

    If Not copyRng Is Nothing Then
        copyRng.Copy

        With Sheets("Calc Data")
            .Cells(.Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial xlPasteValues
        End With

        Application.CutCopyMode = False
    End If

    RPDataTbl.Range.AutoFilter Field:=AICOWcol.Index

' Need to add here the Insured Asset (Column C) as Business Interruption

End Sub

Sub Calc_Cresta()

' Calculates Cresta for AICOW

Dim RPDataTbl As ListObject
    Dim CrestaCol As ListColumn, AICOW As ListColumn
    Dim copyRng As Range

    Set RPDataTbl = Sheets("Risk Partner Data").ListObjects("RPdata")
    With RPDataTbl
        Set CrestaCol = .ListColumns("Cresta")
        Set AICOWcol = .ListColumns("AICOW")

        .Range.AutoFilter Field:=AICOWcol.Index, Criteria1:="TRUE"
    End With

    On Error Resume Next
    Set copyRng = CrestaCol.DataBodyRange.SpecialCells(xlCellTypeVisible)
    On Error GoTo 0

    If Not copyRng Is Nothing Then
        copyRng.Copy

        With Sheets("Calc Data")
            .Cells(.Rows.Count, "D").End(xlUp).Offset(1).PasteSpecial xlPasteValues
        End With

        Application.CutCopyMode = False
    End If

    RPDataTbl.Range.AutoFilter Field:=AICOWcol.Index

End Sub

I understand my code is bulky, but I dont know how to simplify it, so leaving it as is. Could someone please assist? Thank you.

0 个答案:

没有答案