Vba 在列中循环以将字体大小为10的单元格下移一行
我将节标题单元格设置为10磅字体,而将A列中的所有其他数据设置为9磅字体。我正在尝试编写一个vba宏以循环通过A列,将每个标题单元格向下移动一行(因为csv在其下方留下一个空白单元格),然后移到列中的下一个标题单元格。这是我的尝试,但我不确定我做错了什么Vba 在列中循环以将字体大小为10的单元格下移一行,vba,excel,Vba,Excel,我将节标题单元格设置为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 Acti
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
这些问题:
不应该有语音标记。也就是说,它应该是偏移量(0,1)。事实上,如果要粘贴到下面的行,那么它应该是Offset(“,1”)
Offset(1,0)
- 避免使用
。不是单元格在您的范围内循环,而是您运行sub时工作表上的活动单元格ActiveCell
对于一个范围来说是个坏名字,这可能是你感到困惑的原因。在声明(标注)范围时,请尝试为其指定一个名称,以明确您正在使用的范围Fnt
- 完全限定范围引用,以避免隐式引用
,例如ActiveSheet
此工作簿。工作表(“Sheet1”)。范围(“A1”)
- 通过直接设置
避免剪切粘贴值
- 您的缩进被去掉了,这使它看起来像一个完整的子对象,但是它缺少
结束子对象
要移动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
要移动一行,请执行以下操作:
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
这将导致运行时错误“13”-类型不匹配,因为它在“r.Cut Destination:=r.Offset(1,)”上遇到语法错误line@ParkerMcA我已经对代码做了一点修改,只是测试了一下——现在应该一切正常了——就是这样!我知道这是将10磅字体的单元格向下移动一行。第二个子单元看起来很接近,但它继续运行,同一个单元格会不断地将其沿行向下撞击,而不是在移动后跳过它,然后沿列移动到下一个标题单元格重试。应该有用。为了便于记录,移动的字体将从10改为11