我是vba的新秀。 我创建了一个在微观基础上工作的解决方案,但是当我向该代码添加其他参数时,无法运行相同的代码。 我创建了一个带有答案单元的多项选择测验,在单独的(隐藏)工作表上测试答案。相邻单元格显示“是”或“否”响应。我在网上研究的功能效果很好。我正在尝试清除所有单元格的内容,以便用户可以完成测验,清除所有响应以便再次进行测试。
我有395个问题,我创建了代码来清除“范围(”B2“)。ClearContents” 我的子程序有395个这样的命令,需要45-60秒。我正在寻找更有效的解决方案。我不想只清除整个列中有用户输入的395个非相邻单元格。
Sub Test_Clear()
Range("B2,B5,B7,B9,B11").ClearContents
End Sub
我的单元格列表在Sheet2 D1上:D395 D1中的每个单元格:D395列出了我要清除的Sheet1上的单元格(即B6,B11,B17,B22,B35等)如何引用这些单元格Sheet2并执行ClearContents?
答案 0 :(得分:0)
虽然您可以在VBA而不是Sheet2
范围内对列表进行硬编码,但您可以在sheet2
中引用该单元格列表并一次清除所有内容:
Sub clearall()
Dim rngCell, listCells As String
For Each rngCell In Sheet2.Range("D1:D395").Cells
If listCell <> "" Then listCell = listCell & "," & rngCell.Value Else listCell = rngCell.Value
Next
Sheet2.Range(listCell).ClearContents
End Sub
答案 1 :(得分:0)
如果您只想清除A列中包含其中某些内容的单元格,则可以使用此
Sheet1.Range("A:A").SpecialCells(xlCellTypeConstants).ClearContents
'or
Sheet1.Range("A1:A395").SpecialCells(xlCellTypeConstants).ClearContents
答案 2 :(得分:0)
VBA Join
函数可用于将值连接到字符串中,并且需要Excel Transpose
函数来翻转&#34;翻转&#34;列值将2D数组转换为1D行值数组:
stringAdress = Join([Transpose(Sheet2!D1:D395)], ",")
ThisWorkbook.Worksheets("Sheet1").Range(stringAdress).ClearContents
如果Sheet2!D1:D395
范围内的任何单元格为空,则上述操作将导致错误。
在Excel 2016中,TextJoin
函数可用于忽略空单元格(未测试):
stringAdress = [TextJoin(",", True, Sheet2!D1:D395)]
ThisWorkbook.Worksheets("Sheet1").Range(stringAdress).ClearContents