循环访问一列,将字号为10的单元格向下移动一行
我有部分标题单元格设置为10磅字体,而所有其他数据设置为9点字体在A列。我试图写一个VBAmacros循环通过列A将每个标题单元格向下移动一行(因为csv离开他们下面的一个空白单元格),然后移动到列中的下一个标题单元格。 这是我的尝试,但我不知道我在这里做错了什么。
Sub FontSpacing() Dim Fnt As Range For Each Fnt In Range("A8:A5000") If Fnt.Font.Size = "10" Then ActiveCell.Cut Destination:=ActiveCell.Offset(",1") End If Next
尝试这个
Sub FontSpacing() Dim r As Range For Each r In ThisWorkbook.Worksheets("Sheet1").Range("A8:A5000") If r.Font.Size = 10 Then r.Offset(1,0).Value = r.Value r.Value = vbNullString End If Next r End Sub
问题:
-
Offset(",1")
不应该有语音标记。 即它应该是Offset(0,1)
。 事实上,如果你想粘贴到下面的行 ,那么它应该是Offset(1,0)
。 - 避免使用
ActiveCell
。 这不是循环遍历范围的单元格,而是运行子文件时在工作表上处于活动状态的单元格。 -
Fnt
是一个范围的坏名字,这可能是你困惑的原因。 当声明( 标注 )一个范围时,试着给它一个名字,说明你正在使用一个范围。
额外:
- 完全限定范围参考,以避免隐式引用
ActiveSheet
例如ThisWorkbook.Worksheets("Sheet1").Range("A1")
。 - 避免直接设置
Value
剪切粘贴 - 你的缩进是出来的,这使得它看起来像一个完整的Sub,但它缺less
End Sub
。
不知道你的意思是低于1行还是1行如此:
要移动1列:
Sub FontSpacing() Dim rng As Range, cell As Range Set rng = Range("A1:A5000") For Each cell In rng If cell.Font.Size = "10" Then cell.Offset(0, 1).Value = cell.Value cell.Clear End If Next End Sub
要移动1行:
Sub FontSpacing() Dim rng As Range, cell As Range Set rng = Range("A1:A5000") For Each cell In rng If cell.Font.Size = "10" Then a = cell.Row + 1 Rows(a & ":" & a).Insert Shift:=xlDown, CopyOrigin:=1 cell.Offset(1, 0).Value = cell.Value cell.Offset(1, 0).Font.Size = "11" cell.Clear End If Next End Sub