从一个 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 的新手,所以我的代码不会很友好。欢迎编辑:)
我在 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 的新手,所以我的代码不会很友好。欢迎编辑:)