循环访问一列,将字号为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,但它缺lessEnd 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