从每个工作表中的单元格值填充列
Filldown columns from cells value in each worksheet
我想做的是从特定单元格中获取值并将它们设为填充列。我有多个工作表,其中包含不同的值。
此代码在一张工作表上按预期工作:
Sub Formatting_one()
Range("A12").Value = Range("M6").Value
Range("A12:A" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
End Sub
然后,我开始尝试同样的事情,但循环遍历工作表。这就是我坚持的重点。这是我的代码:
Sub Formatting_many()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.[A1].Resize(, 6).EntireColumn.Insert
ws.Range("A12").Value = ws.Range("M6").Value
ws.Range("A12:A" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
ws.Range("B12").Value = ws.Range("M7").Value
ws.Range("B12:B" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
ws.Range("C12").Value = ws.Range("M8").Value
ws.Range("C12:C" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
ws.Range("D12").Value = ws.Range("I5").Value
ws.Range("D12:D" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
ws.Range("E12").Value = ws.Range("I4").Value
ws.Range("E12:E" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
ws.Range("F12").Value = ws.Range("I6").Value
ws.Range("F12:F" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
ws.Range("G12").Value = ws.Range("I7").Value
ws.Range("G12:G" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
Next ws
End Sub
我一步一步来的,结果单元格被复制到filldown range单元格的第一个单元格,然后被删除了。有人可以帮忙吗?
问题……
…是在G
列中查找最后使用的行
Cells(Rows.Count, 7).End(xlUp).Row
但是由于您添加了 6 列 ws.[A1].Resize(, 6).EntireColumn.Insert
G 列现在是空的,所以最后使用的行是 1
而你实际上 运行
ws.Range("A12:A1").FillDown
从 A1 中取出空单元格并将其填充到 A12(这样您在 A12 中插入的值将被删除)。
解决方案
插入后你原来的G列移到了
ws.Cells(ws.Rows.Count, 7 + 6).End(xlUp).Row
我想做的是从特定单元格中获取值并将它们设为填充列。我有多个工作表,其中包含不同的值。
此代码在一张工作表上按预期工作:
Sub Formatting_one()
Range("A12").Value = Range("M6").Value
Range("A12:A" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
End Sub
然后,我开始尝试同样的事情,但循环遍历工作表。这就是我坚持的重点。这是我的代码:
Sub Formatting_many()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.[A1].Resize(, 6).EntireColumn.Insert
ws.Range("A12").Value = ws.Range("M6").Value
ws.Range("A12:A" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
ws.Range("B12").Value = ws.Range("M7").Value
ws.Range("B12:B" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
ws.Range("C12").Value = ws.Range("M8").Value
ws.Range("C12:C" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
ws.Range("D12").Value = ws.Range("I5").Value
ws.Range("D12:D" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
ws.Range("E12").Value = ws.Range("I4").Value
ws.Range("E12:E" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
ws.Range("F12").Value = ws.Range("I6").Value
ws.Range("F12:F" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
ws.Range("G12").Value = ws.Range("I7").Value
ws.Range("G12:G" & Cells(Rows.Count, 7).End(xlUp).Row).FillDown
Next ws
End Sub
我一步一步来的,结果单元格被复制到filldown range单元格的第一个单元格,然后被删除了。有人可以帮忙吗?
问题……
…是在G
列中查找最后使用的行Cells(Rows.Count, 7).End(xlUp).Row
但是由于您添加了 6 列 ws.[A1].Resize(, 6).EntireColumn.Insert
G 列现在是空的,所以最后使用的行是 1
而你实际上 运行
ws.Range("A12:A1").FillDown
从 A1 中取出空单元格并将其填充到 A12(这样您在 A12 中插入的值将被删除)。
解决方案
插入后你原来的G列移到了
ws.Cells(ws.Rows.Count, 7 + 6).End(xlUp).Row