我的VBA IsNumeric函数有什么问题?
我找不到这段代码有什么问题,每次我尝试将其更改为我认为会更好的代码时,它都会显示为错误。非常感谢您的帮助 这是代码,它专门用于isnumeric函数的使用,我正在Mac上使用Excel 2016我的VBA IsNumeric函数有什么问题?,vba,excel,excel-2016,Vba,Excel,Excel 2016,我找不到这段代码有什么问题,每次我尝试将其更改为我认为会更好的代码时,它都会显示为错误。非常感谢您的帮助 这是代码,它专门用于isnumeric函数的使用,我正在Mac上使用Excel 2016 Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = Sheets("Sheet1") Set ws2 = Sheets("Sheet2") Set i = 1 Set n = 1 Do While ws1.Cell(i, "F") <&
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")
Set i = 1
Set n = 1
Do While ws1.Cell(i, "F") <> "End"
Num1 = ws1.Cell(i, "F")
If IsNumeric(Num1.value) <> False And Num1 <> ""
Set ws2.Cell(n, "B") = ws1.Cell(i, "F")
n = n + 1
End If
Next i
Dim ws1作为工作表
将ws2设置为工作表
设置ws1=图纸(“图纸1”)
设置ws2=图纸(“图纸2”)
集合i=1
设置n=1
Do While ws1.Cell(i,“F”)“End”
Num1=ws1.单元(i,“F”)
如果IsNumeric(Num1.value)为False且Num1为“”
设置ws2.Cell(n,“B”)=ws1.Cell(i,“F”)
n=n+1
如果结束
接下来我
也许您根本不需要VBA。对于非vba解决方案,在Sheet2单元格B1中输入此公式,并根据需要向下拖动任意多行(在Sheet1列F中)
=IF(AND(NOT(ISNUMBER(Sheet1!F1)),Sheet1!F1=“”),Sheet1!F1“”)
对于VBA解决方案,我对您的代码进行了一些清理,以消除许多语法错误。此外,请注意以下事项:
选项Explicit
,并声明所有变量类型选项显式
'... 子名称。。。
将wb设置为工作簿
将ws1设置为工作表
将ws2设置为工作表
Dim Num1作为变体
设置wb=ThisWorkbook'或工作簿(“myBook”)
设置ws1=wb.Sheets(“Sheet1”)
设置ws2=wb.Sheets(“Sheet2”)
暗淡的i一样长,n一样长
i=1'无需“设置”数字整数
n=1
Do While ws1.Cells(i,“F”)“End”
Num1=ws1.Cells(i,“F”).Value2'将其设置为单元格的Value2属性
如果不是IsNumeric(Num1)和Num1“”,则从变量中删除.Value
ws2.Cells(n,“B”).Value=ws1.Cells(i,“F”).Value'将Cells Value属性设置为等于每个。。。同样,Set在这里不起作用
n=n+1
i=i+1'也需要增加i
如果结束
Loop'不是Next I,因为您使用的是Do While循环
从Num1
中删除.value
,除非通过Dim Num1作为范围集Num1=ws1*显式`将Num1设置为范围对象。单元格(i,“F”)
无需设置变量。使用next
而不是loop
关闭do while
。您不需要递增i
。您不需要false
。。。编辑:噢,下一个i
不是你如何递增的,而是i=i+1
你如何处理n
。如果你设置了表格,你不应该限定这本书吗?@findwindow-是的,这真的是最佳实践。。。正在编辑。谢谢@Jeeped!昨晚睡眠不足!
Option Explicit
'... Sub Name ...
Dim wb as Workbook
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Dim Num1 as Variant
Set wb = ThisWorkbook 'or Workbooks("myBook")
Set ws1 = wb.Sheets("Sheet1")
Set ws2 = wb.Sheets("Sheet2")
Dim i as Long, n as Long
i = 1 'no need to "Set" numerical integers
n = 1
Do While ws1.Cells(i, "F") <> "End"
Num1 = ws1.Cells(i, "F").Value2 'set this to the value2 property of the cell
If Not IsNumeric(Num1) And Num1 <> "" 'remove .Value from variable
ws2.Cells(n, "B").Value = ws1.Cells(i, "F").Value 'set the cells Value property equal to each ... again, Set will not work here
n = n + 1
i = i + 1 'need to increment i as well
End If
Loop 'not Next I, since you are using a Do While Loop