Excel精英培训网

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

[已解决]用VBA数组提取相同姓名连续天数

[复制链接]
发表于 2017-3-23 09:02 | 显示全部楼层 |阅读模式
本帖最后由 laoau138 于 2017-3-24 17:20 编辑

用VBA数组提取相同姓名连续天数


最佳答案
2017-3-24 14:04
Public Sub master()
Dim sAlldata As Variant
Dim iRow As Integer, iCol As Integer
Dim sName As String
Dim aName As Variant
Dim iaCount() As Integer
Dim i As Integer




sName = "初始"

sAlldata = Range("a3", Cells(3, 10).End(xlDown))
For iRow = 1 To UBound(sAlldata, 1)
    For iCol = 2 To UBound(sAlldata, 2) Step 2
        If sName = "初始" Then
            sName = sAlldata(iRow, iCol)
        Else
            If Not IsEmpty(sAlldata(iRow, iCol)) Then
                If InStr(sName, sAlldata(iRow, iCol)) = 0 Then
                    sName = sName & "-" & sAlldata(iRow, iCol)
                End If
            End If
        End If
    Next
Next
aName = Split(sName, "-")
ReDim iaCount(UBound(aName))
For i = 0 To UBound(aName)
    For iRow = 1 To UBound(sAlldata, 1)
        For iCol = 2 To UBound(sAlldata, 2) Step 2
            If aName(i) = sAlldata(iRow, iCol) Then
                iaCount(i) = iaCount(i) + 1
            End If
        Next
    Next
Next

For i = 0 To UBound(aName)
    sName = aName(i)
    Select Case iaCount(i)
        Case 2
            putdata 11, sName
        Case 3
            putdata 12, sName
        Case 4
            putdata 13, sName
        Case 5
            putdata 14, sName
    End Select
Next
               
End Sub

Public Function putdata(iCol As Integer, sName As String)
Cells(1048576, iCol).End(xlUp).Offset(1, 0).Value = sName

End Function
不考虑重名。
感觉这个算法很笨,应该有更好的算法。

用VBA数组提取相同姓名连续天数.rar

26.33 KB, 下载次数: 11

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2017-3-23 13:15 | 显示全部楼层
回复

使用道具 举报

发表于 2017-3-24 14:04 | 显示全部楼层    本楼为最佳答案   
Public Sub master()
Dim sAlldata As Variant
Dim iRow As Integer, iCol As Integer
Dim sName As String
Dim aName As Variant
Dim iaCount() As Integer
Dim i As Integer




sName = "初始"

sAlldata = Range("a3", Cells(3, 10).End(xlDown))
For iRow = 1 To UBound(sAlldata, 1)
    For iCol = 2 To UBound(sAlldata, 2) Step 2
        If sName = "初始" Then
            sName = sAlldata(iRow, iCol)
        Else
            If Not IsEmpty(sAlldata(iRow, iCol)) Then
                If InStr(sName, sAlldata(iRow, iCol)) = 0 Then
                    sName = sName & "-" & sAlldata(iRow, iCol)
                End If
            End If
        End If
    Next
Next
aName = Split(sName, "-")
ReDim iaCount(UBound(aName))
For i = 0 To UBound(aName)
    For iRow = 1 To UBound(sAlldata, 1)
        For iCol = 2 To UBound(sAlldata, 2) Step 2
            If aName(i) = sAlldata(iRow, iCol) Then
                iaCount(i) = iaCount(i) + 1
            End If
        Next
    Next
Next

For i = 0 To UBound(aName)
    sName = aName(i)
    Select Case iaCount(i)
        Case 2
            putdata 11, sName
        Case 3
            putdata 12, sName
        Case 4
            putdata 13, sName
        Case 5
            putdata 14, sName
    End Select
Next
               
End Sub

Public Function putdata(iCol As Integer, sName As String)
Cells(1048576, iCol).End(xlUp).Offset(1, 0).Value = sName

End Function
不考虑重名。
感觉这个算法很笨,应该有更好的算法。

评分

参与人数 1 +6 收起 理由
laoau138 + 6 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-3-24 17:19 | 显示全部楼层
wenzili 发表于 2017-3-24 14:04
Public Sub master()
Dim sAlldata As Variant
Dim iRow As Integer, iCol As Integer

你一个高手了


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-27 04:01 , Processed in 1.164660 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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