从一个 sheet 中复制一列,然后使用应用程序工作sheet 在 vba 中作为行粘贴到另一个中

Copy a column from one sheet and paste as row in another using application worksheetfunciton match in vba

我在 Sheet1 中有这个 excel 文件:

  A       B          C                       D
Brand   Model      Type           No_of_unit_sold
A       AB123        1                       1
A       AB124        1                       2
A       AB125        1                      11
A       AB113        1                      21
A       AB127        1                      42
A       AB128        1                      12
B       BB123        1                      21
B       BB121        1                      32
AB      BB122        2                      21
AB      BB124        1                      79
AB      BB125        2                      61
AB      BB126        1                      181
B       BB127        1                      28
B       BB128        1                      132
C       CB121        1                      91
C       CB122        1                      73
C       CB123        1                      63
C       CB124        1                      52
C       CB125        1                      85
A       AB129        2                      12
C       CB126        1                      13
C       CB128        1                      94
C       CB129        1                      121

我需要 VBA 来首先扫描列 "Type" 仅针对类型 1。

然后,要查找品牌,请复制品牌 A 的名称,汇总售出的单位数并将其粘贴到 Sheet2 中:

 A                     B      C      D      E
Brand                  A      B      AB     C
No_of_unit_sold       89     213    260    592

为了求和该值,我可以使用具有双重条件的 sumif 函数。但是如何改变品牌名称呢?这不像我可以为 "Type" 列...

那样使用带有整数的 for 循环

另外,如何将品牌名称从 sheet1 复制到 sheet2 而不重复? 我使用 application.worksheetfunction.match 吗?例如。如果在 sheet2 的单元格 (1,i) 中找不到品牌名称,请从 sheet1 复制到 sheet2?

以下代码适合您。我使用了几个 For 循环、If 语句和 Function 来实现这一点,因为我不了解 application.worksheetfunction.match。我尝试了以下方法并为我工作!

输入sheet:

试试下面的代码。

Sub VBAReader()

Dim CompareBrand As String
'Dim CompareBrands() As Variant
Dim Types, units, Units_sold, ValidatedBrands As Integer
Units_sold = 0
Dim Brand As String
Dim i, j, k, l As Integer
k = 2

Types = Worksheets("Sheet1").Range("C2").End(xlDown).Row

For i = 2 To Types

'Give the type of value
If Worksheets("Sheet1").Range("C" & i).Value = 1 Then
Brand = Worksheets("Sheet1").Range("A" & i).Value

If BrandIsValidated(Brand) = False Then

For j = 2 To Types
If Worksheets("Sheet1").Range("A" & j).Value = Brand And Worksheets("Sheet1").Range("C" & j).Value = 1 Then
units = Worksheets("Sheet1").Range("D" & j).Value
Units_sold = Units_sold + units
End If
Next

Worksheets("Sheet2").Cells(1, k).Value = Brand
Worksheets("Sheet2").Cells(2, k).Value = Units_sold

Units_sold = 0
CompareBrand = Worksheets("Sheet2").Cells(1, k).Value

k = k + 1

End If

End If

Next

End Sub

Function BrandIsValidated(stringToBeFound As String) As Boolean

  ValidatedBrands = Worksheets("Sheet2").Cells(1, Columns.Count).End(xlToLeft).Column
   For l = 1 To ValidatedBrands
   If stringToBeFound = Worksheets("Sheet2").Cells(1, (l + 1)).Value Then
   BrandIsValidated = True
   Exit For
   Else
   BrandIsValidated = False

   End If
   Next

End Function

输出sheet:

注意:我是 VBA 的新手,所以我的代码不会很友好。欢迎编辑:)