我需要在sheet2中提供更多信息,但我无法弄清楚如何添加它。
我在sheet1中有很多数据,但所有内容都分为3 sections
sheet1的第1部分在A,B,C,D列中,包含-date,time,name,last
sheet1的第2部分是数字数据,其范围是E到JX列
sheet1的第3部分在JY:MV范围内,它包含结果(来自第2部分)
我所拥有的代码经过第3部分,如果值为< 1,则将该值复制到F列中的第2页,并从该行第1部分复制
示例:
如果在sheet1 K32中找到值0.5,则表2看起来像:
A B C D F
date time name last 0.5
我需要帮助的任务
1)是否可以在E列中的sheet2中看到找到值的sheet1列名?
2)由于第3节中的每个值都来自第2节中的2个值,这两个值是否也可以复制到第2页?
例如
在sheet1中,K50为0.2,结果来自AA50(2.2)和AC50(2.0),使用的公式为(AA-AC)
是否可以根据公式单元格引用复制表2中的2.2和2.0?
要点: 最终的sheet2应如下所示:
A B C D E F G H
date, time, name, last, Column name where value is found, value, data1, data2
所以我需要帮助添加E,G和H
列 Sub moveData()
Dim rng As Range
Dim iniCol As Range
Dim i
Dim v
Dim x
Dim myIndex
Dim cellVal
Dim totalCols
Dim sht1 As Worksheet
Dim sht2 As Worksheet
Dim ABC() 'var to store data from Cols A,B,C in Sheet1
Dim JYJZKA As Range 'var to store data from Cols K,L,M in Sheet1
Set sht1 = Sheets("Sheet1")
Set sht2 = Sheets("Sheet2")
Set rng = Range("JY1:KB400")
Set iniCol = Range("JY1:JY400")
totalCols = rng.Columns.Count 'Count the total of columns in the selectec range
myIndex = 0 'ini the index for rows in sheet2
For Each i In iniCol
x = -1
ABC = Range(Cells(i.Row, 1), Cells(i.Row, 4))
Set JYJZKA = Range(Cells(i.Row, 285), Cells(i.Row, 351))
'Copy range from A to C
sht2.Activate
myIndex = Application.WorksheetFunction.CountA(Columns(1)) + 1
For Each v In JYJZKA
If v.Value < 1 Then
x = x + 1
Range(Cells(myIndex + x, 6), Cells(myIndex + x, 6)).Value = v.Value
Range(Cells(myIndex + x, 1), Cells(myIndex + x, 4)).Value = ABC
End If
Next v
'Paste range equal to copy range.
'Application.CutCopyMode = False
sht1.Activate
Next i
End Sub
答案 0 :(得分:2)
看看这是否可以让你开始。
我已将大块数据加载到变量数组中。这大大加快了通过单个细胞比较的循环。
Sub section_3_to_Sheet2()
Dim r As Long, c As Long, vVALs As Variant, vTMP As Variant
With Worksheets("Sheet1")
With .Range(.Cells(2, 1), .Cells(Rows.Count, "MV").End(xlUp))
vVALs = .Value2
End With
End With
With Worksheets("Sheet2")
For r = LBound(vVALs, 1) To UBound(vVALs, 1)
For c = 285 To UBound(vVALs, 2)
If vVALs(r, c) < 1 Then
vTMP = Array(vVALs(r, 1), vVALs(r, 2), vVALs(r, 3), vVALs(r, 4), _
"=ADDRESS(" & r + 1 & ", " & c & ", 4, 1, """ & .Name & """)", _
vVALs(r, c), vVALs(r, c - 280))
.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, 7) = vTMP
End If
Next c
Next r
End With
End Sub
通常,像这样的数据块具有列标题标签,所以我在第2行开始,而不是第1行,因为您的示例数据可能表示。
原始数据的位置由ADDRESS function提供。
由于E:JX与JY:MV的列数不同,我对作为第二个(例如data2
)值返回的值有点困惑。我选择了一个简单的偏移。