【发布时间】:2019-01-03 19:54:18
【问题描述】:
我的 VBA 技能充其量只是新手,我不知道如何有效地解决这个问题。
目标:匹配案例 ID # 的 AND 客户端名称(一个案例 ID # 可以有多个客户端),如果它们都匹配,则拉 Q基于问题#(问题列)的响应列的响应
我有 2 个源文件和一个目标文件。我已经设法将所有必要的数据从源文件 1(SF1) 提取到目标文件 (DF)。
我需要将数据从 SF2 提取到 DF。
SF2 数据的结构如下:
Case ID Client Name Question # Response
10095 ABS 0.1 50
10095 ABS 0.2 100
10095 ABS 0.3 0
10095 ZZZ 0.1 0
10095 ZZZ 0.2 40
10095 ZZZ 0.3 99
29999 OVFLW 0.1 100
DF 的结构/看起来如下所示:
CASE ID Client Name 0.1 0.2 0.3
10095 ABS 50 100 0
10095 ZZZ 0 40 99
29999 OVFLW 100
我拥有的代码能够获得上述所有内容,但无法说明额外变量是客户端名称,以匹配 到 CASE ID。欢迎任何想法/建议。
提前谢谢你。代码如下:
选项显式
Public Sub GrabKpiData3()
Dim sht As Worksheet, sht2 As Worksheet
Dim i As Long, k As Long
Dim lastrow As Long, lastcol, foundrow As Long, foundcol As Long
Dim macrobook As Workbook
Dim macrosheet As Worksheet
Set macrobook = ThisWorkbook
Set macrosheet = macrobook.Worksheets("Macro")
'source
Set sht = Workbooks("SourceFile2.csv").Worksheets("SF2")
'destination
Set sht2 = Workbooks("MacroFile.xlsm").Worksheets("Data")
lastrow = sht.Cells(sht.Rows.Count, 1).End(xlUp).Row
k = 2
For i = 2 To lastrow
If sht2.Cells(k, 1).Value = sht.Cells(i, 1).Value Then
'the below 2 rows grab different date values present within SF2. This would change based on match criteria requiring Case ID + Client name
sht2.Cells(k, 16).Value = sht.Cells(i, 2).Value
sht2.Cells(k, 17).Value = sht.Cells(i, 3).Value
lastcol = sht2.Cells(1, sht2.Columns.Count).End(xlToLeft).Column
'captures responses for 0.1
sht2.Cells(k, 18).Value = sht.Cells(i, 6).Value
i = i + 1
'captures responses for 0.2
sht2.Cells(k, 19).Value = sht.Cells(i, 6).Value
i = i + 1
'captures responses for 0.3
sht2.Cells(k, 20).Value = sht.Cells(i, 6).Value
i = i + 1
sht2.Cells(k, 21).Value = sht.Cells(i, 6).Value
i = i + 1
sht2.Cells(k, 22).Value = sht.Cells(i, 6).Value
k = k + 1
Else
On Error Resume Next
End If
Next i
End Sub
【问题讨论】:
-
您需要 VBA 吗?这可以通过公式来实现。
-
不幸的是,VBA 是必要的 :( 还涉及其他数据 + 将来可能扩展到其他事物。
-
您似乎不了解
On Error Resume Next的工作原理。您可能应该删除它,并且仅在绝对需要时使用它(这比您想象的要少见)。对于k,您还需要一个完整的第二个 for 循环。整个k = k +1不对。 -
@VBAWARD,您应该选择下面哪个答案最有帮助。这样问题就不会一直悬而未决。
标签: excel vba loops multiple-columns transpose