Excel VBA,命名单元
我目前正在尝试创建一个宏,使我的数据分析工作更容易。每次运行宏时,我都需要用不同的名称标记80多个单元格。我是VBA新手,所以我目前有86行代码,所有代码都读取工作表1。单元格4,2,1=样本1,然后是工作表1.Cells4,3。Value=样本2…等等 我想知道是否有一种方法可以编写一个更简单的代码,在这个代码中,我只可以在相邻的单元格中编写特定的名称,而不需要编写这么多行代码。我需要弄清楚这一点,因为我的宏现在太大了,无法运行Excel VBA,命名单元,excel,vba,naming,Excel,Vba,Naming,我目前正在尝试创建一个宏,使我的数据分析工作更容易。每次运行宏时,我都需要用不同的名称标记80多个单元格。我是VBA新手,所以我目前有86行代码,所有代码都读取工作表1。单元格4,2,1=样本1,然后是工作表1.Cells4,3。Value=样本2…等等 我想知道是否有一种方法可以编写一个更简单的代码,在这个代码中,我只可以在相邻的单元格中编写特定的名称,而不需要编写这么多行代码。我需要弄清楚这一点,因为我的宏现在太大了,无法运行 我曾尝试使用其他代码,如Next语句,以简化宏,但我无法理解。关
我曾尝试使用其他代码,如Next语句,以简化宏,但我无法理解。关键是找到一个好的算法,用于生成单元格值示例1、示例2等,并生成单元格坐标。如果您的列表严格地放在彼此下面,没有间隙,并且您可以生成单元格值,那么@QHarr的建议就可以了。如果无法通过编程生成单元格值,则可以将@QHarr suggestion与预定义的值列表相结合,如下所示:
Dim init As String
Dim c As Variant
Dim iRow As Long
init = "a,d,3,ww,12.5,cxz" ' once you need to type in the values anyway
iRow = 3
For Each c In Split(init, ",")
ThisWorkbook.Worksheets(1).Cells(iRow, 3) = c
iRow = iRow + 1
Next
如果不是解决方案,您仍然可以使用以下命令缩短行:
下面是一个例子@AcsErno提出了一些关于根据您的上下文进行裁剪的好观点。这是基于对循环中不同列的写入。如果需要,可以swop在单元格的行参数中使用i+1
Option Explicit
Public Sub test()
Application.ScreenUpdating = False
Dim myNames(), i As Long
myNames = Array("name1", "name2", "name3", "name4", "name5")
With Worksheets("Sheet1")
For i = LBound(myNames) To UBound(myNames)
.Cells(4, i + 1) = myNames(i)
Next
End With
Application.ScreenUpdating = True
End Sub
在给出的示例中使用For循环。比如:对于i=2到3:工作表1.单元格4,i=Sample&i。我不确定你想用工作表1.单元格4,2引用什么,1@QHarr虽然示例1位于.Cells4,2中,所以您必须稍微调整:对于i=1到86:ThisWorkbook.Worksheets1.Cells4,i+1.Value=Sample&i@QHarr那也行,很好。将您所有的名字都放在一个数组中,并对其进行迭代。^^^如果需要,使用数组中索引的位置作为增量。这非常有效,谢谢!
Option Explicit
Public Sub test()
Application.ScreenUpdating = False
Dim myNames(), i As Long
myNames = Array("name1", "name2", "name3", "name4", "name5")
With Worksheets("Sheet1")
For i = LBound(myNames) To UBound(myNames)
.Cells(4, i + 1) = myNames(i)
Next
End With
Application.ScreenUpdating = True
End Sub