大佬教程收集整理的这篇文章主要介绍了如何应用 InStr 将标题名称与名称数组匹配?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我的宏应该将标题名称与名称数组相匹配。
最初,我在“Else”部分设置了客户值,但宏按照预期执行了相反的操作 - 仅更改了数组值上的单元格。这对我来说没有意义,因为我已经将 instr 函数设置为正输出,但是我已将指令放在匹配部分
在 70 个变量中,有 67 个如预期的那样积极,3 个变量被命名为 Customer,其中很少有它不是从第二个到最后一个,但例如只有第二个,或者只有几个。
Sub test2() Dim headerRow As Range Dim headername As String headername = Join(Array("ID","@R_674_11064@ER","REVENUE")) Set headerRow = Range(Cells(1,1),Cells(1,1).End(xlToRight)) For Each header In headerRow DeBUG.Print header DeBUG.Print headername If instr(1,headername,header.Value,vbTextComparE) = 0 Then Range(Cells(2,header.column).Address,Cells(Cells(Rows.Count,header.column).End(xlUp).Row,header.column).Address).Value2 = "Customer" Else End If Next header End Sub
@H_874_17@例如,BD 列是它应该是的样子,所有这些列都有间隙,但 BD、BF、BG、BO 是好的(该特定文件中有 1-59 行,其余的不是)。
加上前面提到的一些东西 - 有时标题设置为客户和第一行,没有别的。
New headerRow 让我不匹配,当我最初更改为 ws.Range 时,它只获取第一列,就像不是拖动 xlToleft
解决方法
只需循环遍历所有工作表
For Each ws In ThisWorkbook.Worksheets
并确保所有Range
、Cells
、Rows
和colums
对象都被工作表引用,例如 {{1 }} 等ws.Range
@H_874_17@
请注意,
Option Explicit Public Sub test2() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets 'loop all worksheets Dim HeaderName As String HeaderName = Join(Array("ID","@R_674_11064@ER","REVENUE")) Dim HeaderRow As Range Set HeaderRow = ws.Range(ws.Cells(1,1),ws.Cells(1,1).End(xlToRight)) Dim Header As Variant For Each Header In HeaderRow Debug.Print Header Debug.Print HeaderName If instr(1,HeaderName,Header.Value,vbTextComparE) = 0 Then ws.Range(ws.Cells(2,Header.column),ws.Cells(ws.Rows.Count,Header.column).End(xlUp)).Value2 = "Customer" End If Next Header Next ws End Sub
对象可以将Range
作为参数并且不需要Cells
,因此您可以缩短此Address
@H_874_17@到
Range(Cells(2,Header.column).Address,Cells(Cells(Rows.Count,Header.column).End(xlUp).Row,Header.column).Address).Value2 = "Customer"
@H_874_17@
根据评论的想法
如果您的标头更改,则意味着
Range(Cells(2,Cells(Rows.Count,Header.column).End(xlUp)).Value2 = "Customer"
以标头结尾,因为下面没有数据。所以这个范围ws.Cells(ws.Rows.Count,Header.column).End(xlUp)
@H_874_17@实际上是从第 2 行到第 1 行。为了防止这种情况,您需要将其拆分并进行测试:
ws.Range(ws.Cells(2,Header.column).End(xlUp)).Value2 = "Customer"
@H_874_17@
如果空格应该一直填到所有列的最后一行
Dim LastCellInCol As Range Set LastCellInCol = ws.Cells(ws.Rows.Count,Header.column).End(xlUp) If LastCellInCol.Row >= 2 Then 'only change if there is data in the column ws.Range(ws.Cells(2,LastCellInCol).Value2 = "Customer" End If
@H_874_17@大佬总结
以上是大佬教程为你收集整理的如何应用 InStr 将标题名称与名称数组匹配?全部内容,希望文章能够帮你解决如何应用 InStr 将标题名称与名称数组匹配?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。