Excel VBA,命名单元

Excel VBA,命名单元,excel,vba,naming,Excel,Vba,Naming,我目前正在尝试创建一个宏,使我的数据分析工作更容易。每次运行宏时,我都需要用不同的名称标记80多个单元格。我是VBA新手,所以我目前有86行代码,所有代码都读取工作表1。单元格4,2,1=样本1,然后是工作表1.Cells4,3。Value=样本2…等等 我想知道是否有一种方法可以编写一个更简单的代码,在这个代码中,我只可以在相邻的单元格中编写特定的名称,而不需要编写这么多行代码。我需要弄清楚这一点,因为我的宏现在太大了,无法运行 我曾尝试使用其他代码,如Next语句,以简化宏,但我无法理解。关

我目前正在尝试创建一个宏,使我的数据分析工作更容易。每次运行宏时,我都需要用不同的名称标记80多个单元格。我是VBA新手,所以我目前有86行代码,所有代码都读取工作表1。单元格4,2,1=样本1,然后是工作表1.Cells4,3。Value=样本2…等等

我想知道是否有一种方法可以编写一个更简单的代码,在这个代码中,我只可以在相邻的单元格中编写特定的名称,而不需要编写这么多行代码。我需要弄清楚这一点,因为我的宏现在太大了,无法运行


我曾尝试使用其他代码,如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