Excel精英培训网

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

[已解决]求助:4个问题(有vba的)请大家帮忙了!!!!!!!

[复制链接]
发表于 2013-9-15 23:41 | 显示全部楼层 |阅读模式
本帖最后由 CEL_hjl 于 2013-9-16 01:26 编辑

求助:1、工作薄中想引用单元格数据,最简单的例如:直接可以输入“=A1”,但是用其他公式引用后就只能是“=A&1”不能指向单元格,怎么办?
2、还有3个问题请看附件,你能回答哪个就说哪个,麻烦大家了。
关于3个引用的问题 Excel 97-2003 工作表.rar (3.92 KB, 下载次数: 16)
发表于 2013-9-15 23:58 | 显示全部楼层    本楼为最佳答案   
=a&1,要起指向单元格的话,得=indirect("a" & 1)
回复

使用道具 举报

 楼主| 发表于 2013-9-16 01:22 | 显示全部楼层
hwc2ycy 发表于 2013-9-15 23:58
=a&1,要起指向单元格的话,得=indirect("a" & 1)

第一个问题对了谢谢
回复

使用道具 举报

发表于 2013-9-16 08:10 | 显示全部楼层
试了下RANGE的FIND方法,用数组的话,效率应该更高。
  1. Sub findA()
  2.     Dim rg1 As Range, rg2 As Range
  3.     Dim arr(1 To 1000, 1 To 2), lCount As Integer

  4.     On Error Resume Next
  5.     With Worksheets("sheet1")
  6.         Set rg1 = .UsedRange.Find(what:="A", lookat:=xlWhole)    '查找内容
  7.         Set rg2 = rg1

  8.         Do While Not rg1 Is Nothing
  9.             Debug.Print rg1.Address
  10.             lCount = lCount + 1
  11.             arr(lCount, 1) = "A"
  12.             arr(lCount, 2) = rg1.Offset(, 1).Value
  13.             Set rg1 = .UsedRange.FindNext(after:=rg1)
  14.             'f rg1.Address = rg2.Address Then Set rg1 = Nothing
  15.         Loop
  16.     End With

  17.     If lCount Then
  18.         With Worksheets("A")
  19.             .Range("a2").Resize(lCount, 2).Value = arr
  20.         End With
  21.         MsgBox "提取完成"
  22.     Else
  23.         MsgBox "没有找到匹配的数据"
  24.     End If
  25. End Sub
复制代码
回复

使用道具 举报

发表于 2013-9-16 08:17 | 显示全部楼层
数组法
  1. Sub FindInarr()
  2.     Dim arr, result(1 To 1000, 1 To 2)
  3.     Dim i As Long, j As Long
  4.     Dim lCount As Long

  5.     On Error GoTo ErrorHandler

  6.     With Worksheets("sheet1")
  7.         arr = .Range(.Range("a2"), .Cells(Rows.Count, "f").End(xlUp)).Value
  8.     End With

  9.     For i = LBound(arr) To UBound(arr)
  10.         For j = LBound(arr, 2) To UBound(arr, 2) Step 2
  11.             If arr(i, j) = "A" Then
  12.                 lCount = lCount + 1
  13.                 result(lCount, 1) = "A"
  14.                 result(lCount, 2) = arr(i, j + 1)
  15.             End If
  16.         Next
  17.     Next

  18.     If lCount Then
  19.         With Worksheets("A")
  20.             .Range("a2").Resize(lCount, 2).Value = result
  21.         End With
  22.         MsgBox "提取完成", vbInformation
  23.     Else
  24.         MsgBox "没有匹配的数据", vbCritical
  25.     End If
  26.     Exit Sub
  27. ErrorHandler:
  28.     MsgBox Err.Number & vbCrLf & Err.Description
  29. End Sub
复制代码
回复

使用道具 举报

发表于 2013-9-16 08:18 | 显示全部楼层
result(1 To 1000, 1 To 2)
这里数组只定义了1000行,如果你实际应用中,预测查到的数据项个数大于1000时,只需把1000改大即可。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 05:58 , Processed in 0.307779 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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