gpt4 book ai didi

excel - 计算列中的值并放入新列

转载 作者:行者123 更新时间:2023-12-04 20:21:29 26 4
gpt4 key购买 nike

我想计算一个值在列家具中出现的次数,但是该列有时可能位于不同的位置。所以我必须引用名称而不是列号。最终创建一个新列,其中说明该家具出现了多少次。下面是一个简单的例子。


所有者
家具


欧文
椅子

米拉
table

将要

jack
椅子

佐伊


麦克风


玛雅
椅子


想要的结果


所有者
家具
分组大小


欧文
椅子
3

米拉
table
1

将要


jack
椅子
3

佐伊

2

麦克风

2

玛雅
椅子
1


“椅子”在柱式家具中出现 3 次
我知道 countif公式,但我需要 vba。我尝试了几件事,但都没有接近。有什么建议么?

最佳答案

使用字典的唯一计数

Option Explicit

Sub CountFurniture()

Const sColName As String = "furniture"
Const dColName As String = "groupsize"

Dim ws As Worksheet: Set ws = ActiveSheet ' improve!
Dim rg As Range: Set rg = ws.Range("A1").CurrentRegion

Dim sData As Variant
Dim drg As Range
Dim rCount As Long

With rg

rCount = .Rows.Count
If rCount = 1 Then Exit Sub ' only headers or nothing

Dim sCol As Variant: sCol = Application.Match(sColName, .Rows(1), 0)
If IsError(sCol) Then Exit Sub ' source column not found
sData = .Columns(sCol).Value

Dim dCol As Variant: dCol = Application.Match(dColName, .Rows(1), 0)
If IsError(dCol) Then dCol = .Columns.Count + 1
Set drg = .Columns(dCol)

End With

Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")
dict.CompareMode = vbTextCompare

Dim Key As Variant
Dim r As Long

For r = 2 To rCount
Key = sData(r, 1)
If Not IsError(Key) Then
If Len(Key) > 0 Then
dict(Key) = dict(Key) + 1
End If
End If
Next r

Dim dData As Variant: ReDim dData(1 To rCount, 1 To 1)

dData(1, 1) = dColName

For r = 2 To rCount
dData(r, 1) = dict(sData(r, 1))
Next r

drg.Value = dData

End Sub

关于excel - 计算列中的值并放入新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71756574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com