自动为Excel中的两列中的名称分配唯一值

时间:2018-05-15 15:17:27

标签: excel

我有一个棘手的问题,无论如何我都无法弄清楚如何手动操作。也许你们都可以帮我找到一个自动执行此操作的公式。这是设置。

我的组织目前正在切换CRM数据库,而不是支付新的CRM来进行数据上传,他们要求我上传新数据。好吧,没什么大不了的,我以前做过,而且不是最糟糕的。

然而,我发现的一个大问题是,使用其中一个数据库(Raisers Edge NXT),我必须将整个数据库导出为两个部分 - 其中一个成分和一个分配给成分的礼物。出于某种原因,他们导出了这些列表,但没有唯一的ID。

所以例如 - 我有一个成分列表中的记录的成分ID,我有一个成分的礼品记录,但除了名称之外,它们之间没有任何共享,遗憾的是,对于新的Everyaction系统来说,这可能是不够的在进行自动上传时识别。所以我的解决方案是为这个导入创建一个唯一的导入ID,并为成分和礼品记录列表中的每个唯一名称添加一个唯一的ID,这样我就可以运行两个导入 - 一个成分,然后一个礼物并分配礼物对选民来说。

这里有一个大问题,如何为两个列表分配相同的唯一ID,而无需手动完成所有3-4千条记录?

以下是一些示例数据:

问题的示例数据: enter image description here

1 个答案:

答案 0 :(得分:0)

Sub newNew()

Dim dict As Scripting.Dictionary
    Set dict = New Dictionary
    Dim lastRow As Integer
        lastRow = Sheets("Sheet1").Cells(Rows.Count, 2).End(xlUp).Row
    Dim IdCounter As Integer
        IdCounter = 1
  

Blockquote首先初始化我的字典,第一个循环的最后一行将查看成分列表和ID的第一个附属物

For rowNum = 3 To lastRow
   If dict.Exists(CStr(Sheets("Sheet1").Cells(2, rowNum))) = False Then
       Dim ID As String
           ID = "EA-IMP-1" & IdCounter
       Dim name As String
           name = CStr(Sheets("Sheet1").Cells(rowNum, 2))
       dict.Add name, ID
       IdCounter = IdCounter + 1
   End If Next rowNum
  

第一个循环中的Blockquote我正在测试rowNum,B列中的值,看它是否已被用作我字典中的键。如果没有它将A)创建一个新的ID#B)将在电子表格中找到的值添加为具有新ID作为值的键。 ID计数器递增以为每个新密钥创建唯一ID

lastRow = Sheets("Sheet1").Cells(Rows.Count, 5).End(xlUp).Row

For rowNum = 3 To lastRow
   name = CStr(Sheets("Sheet1").Cells(rowNum, 5))
   If dict.Exists(name) = False Then
       Sheets("Sheet1").Cells(rowNum, 4) = "NOT IN CONSTITUENT LIST"

   Else
       Sheets("Sheet1").Cells(rowNum, 4) = dict(CStr(Sheets("Sheet1").Cells(rowNum, 5)))
   End If 
Next rowNum
  

Blockquote我正在重复使用lastRow,但这次正在查找礼品列表列E列中的最后一行。然后我循环查看该列表,检查A列中的名称是否是我字典中的键。如果它是一个键,那么与该键相关的值将被放置在左侧的列中。如果不是,它会告诉你该名称没有密钥AKA,此列表中的名称不在组成列表中。

Set dict = Nothing

End Sub

https://i.stack.imgur.com/Pi4YX.png

相关问题