我对这一切都非常非常陌生,这个社区在编写 VBA 函数等方面似乎非常有帮助。我一直在网站上寻找类似的问题,但找不到任何涉及我的特定问题的内容问题。
我需要创建一个函数,复制一个单元格的格式和另一个单元格的值,并将它们组合成一个输出。
对于某些上下文,我有一个工作表,它找到格式为 [00:00:00] 的数字,将它们转换为总时间值 (hh:mm:ss) 并为每个值添加一个公共值。并非所有初始值都是数字,其他都是文本,需要在最终输出中保留其粗体/斜体属性。因此,我正在寻找一种方法来复制单元格(假设为 G2)中的值和不同单元格(假设为 A2)中的格式,并将它们组合起来以获得最终输出。
我糟糕的编码技巧产生了这个:
Function Copy_Format(cell1, cell2)
Dim cell1 As String, cell2 As String
Range("cell1").Copy
Range("cell2").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Range("cell2").Copy
Range("output").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End Function
我希望“cell1”成为复制格式的单元格,“cell2”成为值的来源,“cell3”成为函数插入的单元格。
任何和所有的帮助将不胜感激!总体目标是使其成为一个一步式过程,因为这最终将分发给一百多名几乎没有 Excel 经验的人。
谢谢!! FFstack
这会将格式从 cell1 复制到 cell2,然后将 cell2 的值复制到输出:
Function Copy_Format(cell1, cell2, output)
cell1.Copy
cell2.Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
cell2.Copy
output.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Copy_Format = output
End Function
这能解决您的问题吗?
Public Function CopyFormat(cell1 As Range, cell2 As Range)
CopyFormat = Format(cell2, cell1.NumberFormat)
End Function
CopyFormat = ...
)Range(cell1)
而不是 Range("cell1")
).NumberFormat
属性并将其与 Format
函数一起应用如果在 Excel 工作表上使用该函数,可以像
=CopyFormat(A1,B1)
一样输入,否则如果在 VBA 中,则省略 =
编辑:如果您想要复制粗体等,则使用函数是不可能的(正如斯科特上面所解释的)。似乎最简单的方法是使用带有条件的 Sub,如下所示:
Sub Copy_Format(cell1 As Range, cell2 As Range, cell3 As Range)
Dim sel As Range
Set sel = Selection
Application.ScreenUpdating = False
cell1.Copy
cell3.PasteSpecial Paste:=xlPasteFormats
cell2.Copy
cell3.PasteSpecial Paste:=xlPasteValues
sel.Activate
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
此 Sub 无法从工作表中调用,但可以通过 VBA 调用,如下所示:
Sub test()
Call Copy_Format(Range("A1"), Range("B1"), Range("C1"))
End Sub
如果您要运行特定的单元格,您可以创建一个循环来执行整个列,等等。