计算访问字段中的文本值以生成另一个字段的值

时间:2016-07-01 15:51:55

标签: vba ms-access text

我有一个奇怪的问题,我试图解决。我有一个带有文本字段的表。在该文本字段中,同一个单词可能不止一次出现(故意)。我此时并不担心拼写错误或变异。

这是一个例子......  文本字段是一个人拥有的大学学位。  样本记录可能是...... "地质科学学士学位,篮子编织艺术学士学位,科学学士学位。"  现在,我想计算多少次" Bachelors"和"员工"出现在此字段中。  因此会有两个额外的计算字段称为" Total Bachelors"和" Total Associates。"在这种情况下,它们将设置为" 2"和" 1"分别

这是甚至可能的吗?如果是这样,我如何在查询中执行此操作?  非常感谢您的帮助。  英奇曼

2 个答案:

答案 0 :(得分:2)

要统计一个单词,您需要在标准模块中使用公共VBA功能:

'--- Counts the number of occurrences of Needle in Haystack ---
' It is always safest to use Variant parameters for functions that called with user data
Public Function CountWord(vHaystack As Variant, vNeedle As Variant) As Long

    Dim sHaystack As String
    Dim sNeedle As String

    If Len(vHaystack) > 0 And Len(vNeedle) > 0 Then
        ' Variant to string
        sHaystack = vHaystack
        sNeedle = vNeedle
        ' 1. Remove all instances of sNeedle in sHaystack
        ' 2. Calculate length difference of original vs. replaced string
        ' 3. Divide this number of characters by the length of sNeedle
        CountWord = (Len(sHaystack) - Len(Replace(sHaystack, sNeedle, ""))) / Len(sNeedle)
    Else
        ' Empty input data
        CountWord = 0
    End If

End Function

然后在查询中调用该函数:

SELECT ID, [Name], [degrees],
  CountWord([degrees], "Bachelors") AS TotalBachelors,
  CountWord([degrees], "Associates") AS TotalAssociates
FROM persons

答案 1 :(得分:0)

最简单的解决方案 - 在标准模块中创建一个函数,它返回字符串中的单词出现次数并在查询字段中使用它