我将部分标题单元格设置为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
答案 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
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