程序问答   发布时间:2022-05-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何应用 InStr 将标题名称与名称数组匹配?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何应用 instr 将标题名称与名称数组匹配??

开发过程中遇到如何应用 instr 将标题名称与名称数组匹配?的问题如何解决?下面主要结合日常开发的经验,给出你关于如何应用 instr 将标题名称与名称数组匹配?的解决方法建议,希望对你解决如何应用 instr 将标题名称与名称数组匹配?有所启发或帮助;

我的宏应该将标题名称与名称数组相匹配。

  • 如果为真,则省略@H_489_6@
  • 如果不是,则将第二行到最后一行的值设置为 Customer@H_489_6@

最初,我在“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 行,其余的不是)。

加上前面提到的一些东西 - 有时标题设置为客户和第一行,没有别的。

如何应用 InStr 将标题名称与名称数组匹配?

New headerRow 让我不匹配,当我最初更改为 ws.Range 时,它​​只获取第一列,就像不是拖动 xlToleft

如何应用 InStr 将标题名称与名称数组匹配?

解决方法

只需循环遍历所有工作表 For Each ws In ThisWorkbook.Worksheets 并确保所有 RangeCellsRowscolums 对象都被工作表引用,例如 {{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,请注明来意。
标签: