Excel精英培训网

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

[已解决]数据值判断

[复制链接]
发表于 2015-9-15 15:39 | 显示全部楼层 |阅读模式
本帖最后由 wengrobert 于 2015-9-15 17:00 编辑

请教:
如数组arr(1,1)中的数据以1开头,则arr(1,2)="'02"
           arr(1,1)中的数据以2开头,则arr(1,2)="'03"
           arr(1,1)中的数据以3开头,则arr(1,2)="'01"

原来是通过单元格判断:
For Each Rg In Sheets("数据源").Range("E2:E" & x + 1)
'            If Rg Like "[1]*" Then
'            .Range("g" & x + Rown - 1) = "'02"
'            ElseIf Rg Like "[2]*" Then
'            .Range("g" & x + Rown - 1) = "'03"
'            ElseIf Rg Like "[3]*" Then
'            .Range("g" & x + Rown - 1) = "'01"
'            ElseIf Rg Like "[4]*" Then
'            .Range("g" & x + Rown - 1) = "'05"
'            ElseIf Rg Like "[5]*" Then
'            .Range("g" & x + Rown - 1) = "'08"
'            ElseIf Rg Like "[6]*" Then
'            .Range("g" & x + Rown + 1) = "'09"
'            End If
'            Next Rg


现在数组中运行,谢谢
最佳答案
2015-9-15 16:05
  1. For n = LBound(arr) To UBound(arr)
  2.     Select Case --Left(arr(n, 1), 1)
  3.         Case Is = 1
  4.         arr(n, 2) = "'02"
  5.         Case Is = 2
  6.         arr(n, 2) = "'03"
  7.         Case Is = 3
  8.         arr(n, 2) = "'01"
  9.         Case Is = 4
  10.         arr(n, 2) = "'05"
  11.         Case Is = 5
  12.         arr(n, 2) = "'08"
  13.         Case Is = 6
  14.         arr(n, 2) = "'09"
  15.         Case Else
  16.         arr(n, 2) = ""
  17.         End Select
  18. Next n
复制代码
发表于 2015-9-15 15:47 | 显示全部楼层
2  3   1   5  8  9  是什么规律
回复

使用道具 举报

 楼主| 发表于 2015-9-15 15:50 | 显示全部楼层
Hsiao 发表于 2015-9-15 15:47
2  3   1   5  8  9  是什么规律

没有规律,是指定的值
回复

使用道具 举报

发表于 2015-9-15 15:58 | 显示全部楼层
如果第2位,有且仅有这6种情况,才可以这么写。


    Dim k 'k是存放对应关系的数组
    k = Array("", 2, 3, 1, 5, 8, 9)
    For Each rg In Sheets("数据源").Range("E2:E" & x + 1)
        .Range("g" & x + Rown - 1) = Format(k(Mid(rg, 2, 1)), "00")
    Next rg

回复

使用道具 举报

发表于 2015-9-15 16:02 | 显示全部楼层
arr = Sheets("数据源").Range("E2:E" & x + 1)
    For s = 1 To UBound(arr)
        If arr(s, 1) Like "[1]*" Then
             arr(s, 1) = "'02"
        ElseIf arr(s, 1) Like "[2]*" Then
             arr(s, 1) = "'03"
        ElseIf arr(s, 1) Like "[3]*" Then
             arr(s, 1) = "'01"
        ElseIf arr(s, 1) Like "[4]*" Then
             arr(s, 1) = "'05"
        ElseIf arr(s, 1) Like "[5]*" Then
             arr(s, 1) = "'08"
        ElseIf arr(s, 1) Like "[6]*" Then
             arr(s, 1) = "'09"
        End If
    Next
    .Range("g" & Rown - 1).Resize(UBound(arr)) = arr '数组输出到单元格
回复

使用道具 举报

 楼主| 发表于 2015-9-15 16:05 | 显示全部楼层
爱疯 发表于 2015-9-15 15:58
如果第2位,有且仅有这6种情况,才可以这么写。

但我不想在单元格中循环,因为数据较多,我想在数组中循环将值计算出来后,一次性放入单元格区域。
回复

使用道具 举报

发表于 2015-9-15 16:05 | 显示全部楼层    本楼为最佳答案   
  1. For n = LBound(arr) To UBound(arr)
  2.     Select Case --Left(arr(n, 1), 1)
  3.         Case Is = 1
  4.         arr(n, 2) = "'02"
  5.         Case Is = 2
  6.         arr(n, 2) = "'03"
  7.         Case Is = 3
  8.         arr(n, 2) = "'01"
  9.         Case Is = 4
  10.         arr(n, 2) = "'05"
  11.         Case Is = 5
  12.         arr(n, 2) = "'08"
  13.         Case Is = 6
  14.         arr(n, 2) = "'09"
  15.         Case Else
  16.         arr(n, 2) = ""
  17.         End Select
  18. Next n
复制代码

工作簿1.rar

12.27 KB, 下载次数: 2

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 08:20 , Processed in 0.409797 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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