为数组vba赋值
我没有在VBA中使用数组的经验,所以我迷路了。我尝试做的是以下几点: 在A列中,我有15个字符串(数字不是固定的,有时更多,有时更少) 我删除重复项,然后为A列中的每个名称在文件中创建单独的工作表 我创建了一个数组,我尝试使用此循环为其中的每个名称分配名称:为数组vba赋值,vba,excel,Vba,Excel,我没有在VBA中使用数组的经验,所以我迷路了。我尝试做的是以下几点: 在A列中,我有15个字符串(数字不是固定的,有时更多,有时更少) 我删除重复项,然后为A列中的每个名称在文件中创建单独的工作表 我创建了一个数组,我尝试使用此循环为其中的每个名称分配名称: Sub assigningvalues() Dim i As Integer Dim myArray(20) As Variant Dim finalrow As Long ActiveSheet.Range("A1", Range("
Sub assigningvalues()
Dim i As Integer
Dim myArray(20) As Variant
Dim finalrow As Long
ActiveSheet.Range("A1", Range("A1").End(xlDown)).RemoveDuplicates Columns:=Array(1)
finalrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlDown).Row
'For i = 2 To finalrow -> I get overflow error when I use this range
For i = 2 To Cells(20, 1)
myArray(i) = Cells(i, 1).Value
Next i
'I check with the lines below if values were assigned
Cells(2, 4).Value = myArray(4)
Cells(3, 4).Value = myArray(2)
End Sub
但是,要指定的单元格中的值不会指定给数组
此外,当我尝试使用finalrow
作为循环的范围时,我会得到溢出错误(这不是一个大问题,因为有解决方法,尽管知道我做错了什么会很好)尝试下面的代码:
Option Explicit
Sub assigningvalues()
Dim i As Long
Dim myArray(20) As Variant
Dim FinalRow As Long
Dim Sht As Worksheet
Set Sht = ThisWorkbook.Sheets("Sheet1") ' modify "Sheet1" to your sheet's name
With Sht
.Range("A1", .Range("A1").End(xlDown)).RemoveDuplicates Columns:=Array(1)
FinalRow = .Cells(.Rows.Count, "A").End(xlUp).Row ' get last row in column "A"
For i = 2 To FinalRow
myArray(i) = Cells(i, 1).Value
Next i
'I check with the lines below if values were assigned
.Cells(2, 4).Value = myArray(4)
.Cells(3, 4).Value = myArray(2)
End With
End Sub
注意:您可以使用应用程序将范围
的内容读取到一维数组,而无需For
循环。转置
,您需要将定义它的行更改为:
Dim myArray As Variant
并使用以下命令填充整个阵列:
myArray = Application.Transpose(.Range("A2:A" & FinalRow))
请尝试以下代码:
Option Explicit
Sub assigningvalues()
Dim i As Long
Dim myArray(20) As Variant
Dim FinalRow As Long
Dim Sht As Worksheet
Set Sht = ThisWorkbook.Sheets("Sheet1") ' modify "Sheet1" to your sheet's name
With Sht
.Range("A1", .Range("A1").End(xlDown)).RemoveDuplicates Columns:=Array(1)
FinalRow = .Cells(.Rows.Count, "A").End(xlUp).Row ' get last row in column "A"
For i = 2 To FinalRow
myArray(i) = Cells(i, 1).Value
Next i
'I check with the lines below if values were assigned
.Cells(2, 4).Value = myArray(4)
.Cells(3, 4).Value = myArray(2)
End With
End Sub
注意:您可以使用应用程序将范围
的内容读取到一维数组,而无需For
循环。转置
,您需要将定义它的行更改为:
Dim myArray As Variant
并使用以下命令填充整个阵列:
myArray = Application.Transpose(.Range("A2:A" & FinalRow))
请尝试以下代码:
Sub assigningvalues()
Dim myArray As Variant
ActiveSheet.Range("A1", Range("A1").End(xlDown)).RemoveDuplicates Columns:=Array(1)
myArray = ActiveSheet.Range("A1", Range("A1").End(xlDown))
For Each element In myArray
ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)).Name = element
Next element
End Sub
注意:上述代码的问题是
ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlDown).Row
返回工作表中的绝对行数,而不是已使用的行数。因为你的阵列有20米长,而片长约为1米。行,您有一个溢出。您可以使用
Debug.Print ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlDown).Row
在上面的代码中,在删除dublicates之后,再次从A1
向下走到末尾,并将范围保存到数组中。数组myArray
现在包含缩小范围内的所有单元格值
现在,使用
For Each element in myArray
并使用Workbook.Sheets创建一个新的工作表。添加并将名称指定给我的设置Sheets(index)。name=element
上面的代码应该适合您。几句话:
不要使用“ActiveSheet”、此工作簿等。
您应该始终使用以下内容启动子项:
Dim wb As Workbook
Set wb = ThisWorkbook 'for the workbook containing the code
Set wb = Workbooks(workbookName) 'to reference an other Workbook
'And for all the sheets you are using
Dim ws As Worksheet
Set ws = wb.Sheets(sheetName) 'this way you avoid problems with multiple
workbooks that are open and active or
unactive sheets.
请尝试以下代码:
Sub assigningvalues()
Dim myArray As Variant
ActiveSheet.Range("A1", Range("A1").End(xlDown)).RemoveDuplicates Columns:=Array(1)
myArray = ActiveSheet.Range("A1", Range("A1").End(xlDown))
For Each element In myArray
ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)).Name = element
Next element
End Sub
注意:上述代码的问题是
ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlDown).Row
返回工作表中的绝对行数,而不是已使用的行数。因为你的阵列有20米长,而片长约为1米。行,您有一个溢出。您可以使用
Debug.Print ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlDown).Row
在上面的代码中,在删除dublicates之后,再次从A1
向下走到末尾,并将范围保存到数组中。数组myArray
现在包含缩小范围内的所有单元格值
现在,使用
For Each element in myArray
并使用Workbook.Sheets创建一个新的工作表。添加并将名称指定给我的设置Sheets(index)。name=element
上面的代码应该适合您。几句话:
不要使用“ActiveSheet”、此工作簿等。
您应该始终使用以下内容启动子项:
Dim wb As Workbook
Set wb = ThisWorkbook 'for the workbook containing the code
Set wb = Workbooks(workbookName) 'to reference an other Workbook
'And for all the sheets you are using
Dim ws As Worksheet
Set ws = wb.Sheets(sheetName) 'this way you avoid problems with multiple
workbooks that are open and active or
unactive sheets.
很好的教程内容(+1)谢谢你的答案和提示。我将在未来使用它。很好的教程内容(+1)谢谢你的答案和提示。我将在未来使用它,谢谢你。我会记住你的建议:)谢谢你,弗洛利。我会记住你的建议:)