循环遍历列以将字体大小为10的单元格向下移动一行

时间:2017-03-28 21:24:38

标签: excel vba excel-vba

我将部分标题单元格设置为10磅字体,而所有其他数据设置为A列中的9磅字体。我正在尝试编写一个vba宏来循环遍历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

2 个答案:

答案 0 :(得分:2)

试试这个

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,但却错过了End Sub

答案 1 :(得分:0)

不确定你的意思是下面的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