Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2988|回复: 6

[已解决]match函数的范围怎么用变量

[复制链接]
发表于 2021-3-3 07:12 | 显示全部楼层 |阅读模式
寻找sheet2的行中出现 1的最早列,将1所在单元格前一单元的日期添加到sheet4.
请教老师.
Sub 拍鸟清单网改11()
    Dim x As Long, i As Long, j As Long, k As Long
        i = Sheet2.Range("g65536").End(xlUp).Row
        j = 0
        k = 4
        m = 0
        For x = 4 To i
            If Trim(Sheet2.Cells(x, "ad")) = 1 Then
                j = j + 1               
                y = Application.WorksheetFunction.Match(1, Rows(x), 0)
                Sheet4.Cells(j + 1, k + 3) = Sheet2.Cells(x, y - 1)
                If j Mod 37 = 36 And j <> 0 Then
                    k = k + 4
                    'm = m + 2
                    j = 0
                End If
            End If
        Next x
    MsgBox "执行完毕!"
End Sub

最佳答案
2021-3-3 20:30
凤鸣岐山 发表于 2021-3-3 20:12
老师 这个好,首先能够把行变量用进去了。我在网上看了一个用法  y = Excel.Application.Workshee ...

   For x = 1 To 1
      y = Application.WorksheetFunction.match(1, Sheet2.Range(Sheet2.Cells(x, 3), Sheet2.Cells(x, 26)), 0)
   Next


Sheet2.Cells(x, 3)   代表 x 行 C 列
Sheet2.Cells(x, 26) 代表 x 行 Z 列

祝順心,南無阿彌陀佛!

石家庄的鸟 - 专用 -改动.rar

165.36 KB, 下载次数: 8

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2021-3-3 19:51 | 显示全部楼层
是不是这样?
y = Application.WorksheetFunction.Match(1, Sheet2.Rows(x), 0)
回复

使用道具 举报

 楼主| 发表于 2021-3-3 20:12 | 显示全部楼层
大灰狼1976 发表于 2021-3-3 19:51
是不是这样?
y = Application.WorksheetFunction.Match(1, Sheet2.Rows(x), 0)

       老师 这个好,首先能够把行变量用进去了。我在网上看了一个用法  y = Excel.Application.WorksheetFunction.Match(1, Sheet2.Range("8:8"), 0),不知道怎么把固定行作为变量,用在公式里。      现在还是控制不了查询的起始位置,比如说每行从C列--到Z列,怎么用变量的形势表达在公式里。
      请老师给予指导。
回复

使用道具 举报

发表于 2021-3-3 20:30 | 显示全部楼层    本楼为最佳答案   
凤鸣岐山 发表于 2021-3-3 20:12
老师 这个好,首先能够把行变量用进去了。我在网上看了一个用法  y = Excel.Application.Workshee ...

   For x = 1 To 1
      y = Application.WorksheetFunction.match(1, Sheet2.Range(Sheet2.Cells(x, 3), Sheet2.Cells(x, 26)), 0)
   Next


Sheet2.Cells(x, 3)   代表 x 行 C 列
Sheet2.Cells(x, 26) 代表 x 行 Z 列

祝順心,南無阿彌陀佛!

回复

使用道具 举报

 楼主| 发表于 2021-3-3 20:33 | 显示全部楼层
大灰狼1976 发表于 2021-3-3 19:51
是不是这样?
y = Application.WorksheetFunction.Match(1, Sheet2.Rows(x), 0)

老师 ,如果把判断值“1”,改为判断当前行最早出现的日期,应该怎么表达(MATCH(lookup_value, lookup_array, match_type))
谢谢 老师。
回复

使用道具 举报

 楼主| 发表于 2021-3-3 20:40 | 显示全部楼层
本帖最后由 cutecpu 于 2021-3-3 20:44 编辑
cutecpu 发表于 2021-3-3 20:30
For x = 1 To 1
      y = Application.WorksheetFunction.match(1, Sheet2.Range(Sheet2.Cells(x, 3 ...

还是老师有办法!我试了好多次 Range(Cells(x, “c"), Cells(x, "Z")),或Range(Cells(x, 3), Cells(x, 26))都有提示错,老师这个好,Range(Sheet2.Cells(x, 3), Sheet2.Cells(x, 26)),一下就解决问题了。

阿弥陀佛,老师功德无量!

3 , 26 改成下面也行:
Sheet2.Range(Sheet2.Cells(x, "c"), Sheet2.Cells(x, "z"))   

评分

参与人数 1学分 +2 收起 理由
cutecpu + 2 不客氣。祝順心,南無阿彌陀佛!

查看全部评分

回复

使用道具 举报

发表于 2021-3-3 20:56 | 显示全部楼层
凤鸣岐山 发表于 2021-3-3 20:33
老师 ,如果把判断值“1”,改为判断当前行最早出现的日期,应该怎么表达(MATCH(lookup_value, lookup_ ...

match函数查找日期也是把日期作为数值来进行处理的,一行里面有常规数值和日期时,match并不能分辨它们,所以最好不要用工作表函数,而是通过循环加isdate()来判断,或者你现在的1标记也未尝不可。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-29 04:39 , Processed in 0.152787 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表