首页 > 解决方案 > 在同一列中使用 vba 搜索类似字符串

问题描述

我需要从输入的excel文件中搜索存在于同一列下的类似字符串,并将它们组合在一起并执行一些计算。

例如说:我有输入文件名为:预测

FUND_NAME   CLASS_NAME  FUND_CODE    CASHFLOW_IN_FUND_CURRENCY 
AA              BB              SSIS         19200
VV              DD              SPIS         16200
QQ              NN              BNIS         15830
CC              DJ              SSIS         -6300

我想要一个 VBA 代码,它应该将 Similar Fund_Codes 组合在一起并在 CASHFLOW_IN_FUND_CURRENCY 上执行一些逻辑计算。

说当第 1 和第 4 行具有相同的基金代码(SSIS)时,我需要 ABS(sum(19200-6300))

我知道计算的逻辑,但找不到将fund_code分组到同一工作表和同一列中的逻辑。

我曾尝试过堆栈溢出中的 Rachels 方法模糊逻辑,但它没有用,

我也尝试了下面的代码,但它不起作用。

Dim ws As Worksheet
    Dim lRow As Long, i As Long
    Set ws = ThisWorkbook.Sheets("TRANS")
    Dim rngFundCode As Range

    lRow = Sheet1.Range("C" & Rows.Count).End(xlUp).Row

    Set rngFundCode = Range("C:C")

    For i = 2 To lRow
        Cells(i, 3) = Application.WorksheetFunction.VLookup(Cells(i, 1), rngFundCode, 2, False)
    Next i

谁能让我知道如何将 similr 字符串分组在同一列中并在另一列上执行一些逻辑计算

Dim ws As Worksheet
    Dim lRow As Long, i As Long
    Set ws = ThisWorkbook.Sheets("TRANS")
    Dim rngFundCode As Range

    lRow = Sheet1.Range("C" & Rows.Count).End(xlUp).Row

    Set rngFundCode = Range("C:C")

    For i = 2 To lRow
        Cells(i, 3) = Application.WorksheetFunction.VLookup(Cells(i, 1), rngFundCode, 2, False)
    Next i

我想要一个 VBA 代码,它应该将 Similar Fund_Codes 组合在一起并在 CASHFLOW_IN_FUND_CURRENCY 上执行一些逻辑计算。

说当第 1 和第 4 行具有相同的基金代码(SSIS)时,我需要 ABS(sum(19200-6300))

标签: excelvba

解决方案


我创建了一个类并从输入文件中获取值作为集合并解决了这个问题。

函数 CalculateReport() 作为布尔值

Dim bOutput As Boolean: bOutput = False
Dim colPrediction As Collection
Dim objPred As clsPrediction
Dim shtPred As Worksheet
Dim colFunds As New Collection

On Error GoTo ErrorAccessingFile
Set shtPred = g_colInputFiles("txtPredictions").GetSheets(1).GetSheet
On Error GoTo 0

'Get Data from Input Files
Set colPrediction = GetPredictionData(shtPred)
Dim col As Collection

'Split the data by FundCode
For Each objPred In colPrediction
    If ItemIsInCollection(colFunds, objPred.Fund_Code) Then
        Set col = colFunds(objPred.Fund_Code)
        col.Add objPred, objPred.getKey
    Else
        Set col = New Collection
        col.Add objPred, objPred.getKey
        colFunds.Add col, objPred.Fund_Code
    End If
Next objPred

For Each col In colFunds
    If col.Count > 1 Then
        'Apply Formula

    End If
Next col

推荐阅读