|
- Sub 练习3A() 'A03:开心妙妙
- Dim Arr, iRow&, i&, j&, x&, n&
- Application.ScreenUpdating = False
- '区域赋值给数组
- With Sheet4
- iRow = .Range("A" & Rows.Count).End(xlUp).Row
- Arr = .Range("A1:A" & iRow)
- End With
- '重置目标数组的大小,行数按原区域行除8,固定为8列大小
- ReDim Brr(1 To iRow / 8 + 1, 1 To 8)
- n = 1 '目标数值行初始变量
- For i = 1 To iRow '原数据循环
- If Arr(i, 1) <> "" Then '如果数据不为空,就+1
- j = j + 1
- x = InStr(1, Arr(i, 1), ":", 1) '查找":"在字符中的位置
- If VBA.Left(Arr(i, 1), x - 1) = "财付通" Then
- '如果前面的3个字符=财付通的时候,行+1,列从1开始
- n = n + 1: j = 1
- End If
- If i < 9 Then
- '判断原值行小于9的时候,即一条数据,第一行赋值标题,第二行赋值数据
- Brr(1, j) = VBA.Left(Arr(i, 1), x - 1)
- Brr(2, j) = VBA.Mid(Arr(i, 1), x + 1, 9)
- Else
- '否则 , 直接赋值数据
- Brr(n, j) = VBA.Mid(Arr(i, 1), x + 1, 9)
- End If
- End If
- Next
- '二维数组,赋值给区域
- Sheet4.Range("C1").Resize(UBound(Brr, 1), UBound(Brr, 2)) = Brr
- Application.ScreenUpdating = True
- End Sub
- Sub 练习3() 'A03:开心妙妙
- Dim Arr, RowC&, ArrB, Brr(), i&, j&, j1&, n&
- Application.ScreenUpdating = False
- With Sheet4
- RowC = .Range("A" & Rows.Count).End(xlUp).Row
- Arr = .Range("A1:A" & RowC)
- End With
- n = 1
- For i = 1 To RowC
- If Arr(i, 1) <> "" Then
- j = j + 1
- j1 = j Mod 8 '求余数最得列号
- ArrB = VBA.Split(Arr(i, 1), ":") '用Split分割成数据
- If ArrB(0) = "财付通" Then
- '判断如果数组的第一元素=财付通,行数+1,保留原值,重赋数组
- 'Preserve 只有最后一维可以用变量,所以将行置成列,将列置成行
- n = n + 1
- ReDim Preserve Brr(1 To 8, 1 To n)
- End If
- '求余数8的时候,余数是0,要作个判断,余数是0的时候=8
- If j1 = 0 Then j1 = 8
- If j < 9 Then
- '判断如果行小于9的时候,拆分的第一个元素赋值给第一行,第二个元素赋值给第二行
- Brr(j1, 1) = ArrB(0)
- Brr(j1, n) = ArrB(1)
- Else
- '否则,直接赋值
- Brr(j1, n) = ArrB(1)
- End If
- End If
- Next
- Sheet4.Range("C1").Resize(UBound(Brr, 2), UBound(Brr, 1)) = Application.WorksheetFunction.Transpose(Brr)
- Application.ScreenUpdating = True
- End Sub
- Sub 日期格式整理()
- Dim Arr, i&, Brr(1 To 10000), n&
- Application.ScreenUpdating = False
- With Sheet13 ''数据存入数组
- Arr = .Range("C4:C" & .Range("C" & Rows.Count).End(xlUp).Row)
- End With
- Brr(1) = VBA.Format(Arr(1, 1), "YYYY年M月") ' '数组的第一个值设置好格式后存入
- n = 1 '第一个值己赋入,初始变量为1
- For i = 1 To UBound(Arr)
- n = n + 1 '按原值循环加1
- If i >= UBound(Arr) Then
- '判断I>=数组最大个数,这里避免在循环到最后一个值的时候,无法和下一个的月份对比而出错.
- Brr(n) = Arr(i, 1)
- Else
- If VBA.Month(Arr(i, 1)) <> VBA.Month(Arr(i + 1, 1)) Then
- '如果月份不想等的时候,先赋值,然后N+1,再赋下一月份的值
- Brr(n) = Arr(i, 1)
- n = n + 1
- Brr(n) = VBA.Format(Arr(i + 1, 1), "YYYY年M月")
- Else '否则,直接赋值
- Brr(n) = Arr(i, 1)
- End If
- End If
- Next
- '生成的一维数组,赋值给区域前转置
- Sheet12.Range("M2").Resize(n) = Application.WorksheetFunction.Transpose(Brr)
- Application.ScreenUpdating = True
- End Sub
复制代码 |
评分
-
查看全部评分
|