梅一枝 发表于 2012-4-25 23:05


:'$在老师的带领下,又温习一次DO语句。

Iweb002 发表于 2012-4-26 08:15

坚持学习,总有收获。

君子豹变 发表于 2012-4-26 13:45

老师,上一课作业我不会做,听完课后才做。现交如下
Sub 第一题_按钮2_单击()
    Dim rg1, rg2 As Range
    Dim firstRow, endRow, k As Integer
    Set rg1 = Range("a1")
    Do
      k = k + 1
      Set rg1 = Range("a:a").Find("A", after:=rg1, lookat:=xlWhole)
      firstRow = rg1.Row
      Set rg2 = Range("a:a").Find("A", after:=rg1, lookat:=xlWhole)
      If rg2.Row < firstRow Then
            endRow = Range("a65536").End(xlUp).Row
      Else
            endRow = rg2.Row - 1
      End If
      Range("a" & firstRow & ":a" & endRow).Copy Cells(1, 2 + k)
    Loop Until rg2.Row < firstRow
End Sub

Sub 按钮2_单击()
   Dim x, firstRow As Integer
   If IsNull(Range("a1:a15").MergeCells) = True Then
      Range("a1:a15").UnMerge
    Else
      For x = 2 To Range("a65536").End(xlUp).Row
            firstRow = x
            Do
                x = x + 1
            Loop Until Cells(x, 1) <> Cells(x + 1, 1)
            Range(Cells(firstRow, 1), Cells(x, 1)).Merge
            Application.DisplayAlerts = False
      Next x
    End If
End Sub
第二题还有个疑问,如果合并之后,只剩下左上角数据了,中间会空一些,怎么办呢?
我加了一个判断,如下
Sub 按钮2_单击()
   Dim x, firstRow As Integer
   If IsNull(Range("a1:a15").MergeCells) = True Then
      Range("a1:a15").UnMerge
      For x = 2 To 15
            If Cells(x, 1) = "" Then Cells(x, 1) = Cells(x - 1, 1)
      Next x
    Else
      For x = 2 To Range("a65536").End(xlUp).Row
            firstRow = x
            Do
                x = x + 1
            Loop Until Cells(x, 1) <> Cells(x + 1, 1)
            Range(Cells(firstRow, 1), Cells(x, 1)).Merge
            Application.DisplayAlerts = False
      Next x
    End If
End Sub


本节课数组的作业
Sub 填充()
    Dim arr
    Dim arr1(1 To 10000, 1 To 1)
    Dim i, j, m As Integer
    arr = Range("a1:d17")
    For i = 1 To UBound(arr)
      For j = 1 To UBound(arr, 2)
            If arr(i, j) < 0 Then
                m = m + 1
                arr1(m, 1) = arr(i, j)
                Cells(m, "M") = arr1(m, 1)
                arr(i, j) = 0
            End If
      Next j
    Next i
    Range("g1:j17") = arr   
    Erase arr
    Erase arr1   
End Sub

Sub 清空()
    Range("g1:j17") = ""
    Range("m:m") = ""
End Sub


想飞的鸟 发表于 2012-4-27 14:11


Sub 按钮2_单击()
Dim X As Integer, 开始行数 As Integer
If IsNull(Range("a1:a15").MergeCells) = True Then
    Range("a1:a15").UnMerge
Else
    For X = 2 To Range("a65536").End(xlUp).Row
       开始行数 = X
       Do
         X = X + 1
       Loop Until Cells(X + 1, 1) <> Cells(X, 1)
       Application.DisplayAlerts = False
         Range(Cells(开始行数, 1), Cells(X, 1)).Merge
       Application.DisplayAlerts = True
    Next X
End If
End Sub

Sub 第一题_按钮2_单击()
Dim X As Integer, 开始行数, 结束行数
Dim rg As Range, rg1 As Range, y As Integer, k As Integer
Set rg = Range("a1")
Do
   k = k + 1
   Set rg = Range("a:a").Find("A", after:=rg, lookat:=xlWhole)
   开始行数 = rg.Row
   Set rg1 = Range("a:a").Find("A", after:=rg, lookat:=xlWhole)
   If rg1.Row < 开始行数 Then
      结束行数 = Range("A65536").End(xlUp).Row
   Else
      结束行数 = rg1.Row - 1
   End If
   Range(Cells(开始行数, 1), Cells(结束行数, 1)).Copy Cells(k + 2)
Loop Until rg1.Row < 开始行数
End Sub


liuho1 发表于 2012-4-27 15:27

不好意思,上次可没来听,作业没及时完成,补交

libenwen2011 发表于 2012-4-28 17:33

Sub 第13课数组作业()
Dim x As Long, y As Long, h
Dim arr(1 To 17, 1 To 4)
h = 0
For x = 1 To 17
    For y = 1 To 4
       arr(x, y) = Cells(x, y)
       Cells(x, y + 6) = arr(x, y) '要求1
       If arr(x, y) < 0 Then
          Cells(x, y + 6) = 0
       End If
       If arr(x, y) < 0 Then '要求2: 把负数全部显示到M列
          h = h + 1
          Range("m" & h) = arr(x, y)
       End If
    Next y
Next x
End Sub

libenwen2011 发表于 2012-4-28 17:46

老师你好,对不起,搞忘了写论坛ID号,现在补上,我的新组编号没有找到,27楼是我的作业
libenwen2011   (UID: 514207)
一直都在忙,今天才能抽空完成作业
谢谢老师体谅!!

libenwen2011 发表于 2012-4-28 18:57

对不起,搞错了,第16周的作业

gaoshuichang1 发表于 2012-4-29 21:15

Sub 第一题_按钮2_单击()
Dim x As Integer, 开始行数, 结束行数
Dim rg As Range, rg1 As Range, y As Integer, k As Integer
Set rg = Range("a1")
Do
   k = k + 1
   Set rg = Range("a:a").Find("A", after:=rg, lookat:=xlWhole)
   开始行数 = rg.Row
   Set rg1 = Range("a:a").Find("A", after:=rg, lookat:=xlWhole)
   If rg1.Row < 开始行数 Then
      结束行数 = Range("A65536").End(xlUp).Row
   Else
      结束行数 = rg1.Row - 1
   End If
   Range(Cells(开始行数, 1), Cells(结束行数, 1)).Copy Cells(1, k + 2)
Loop Until rg1.Row < 开始行数
End Sub
Sub 按钮2_单击()
Dim x As Integer, 开始行数 As Integer
If IsNull(Range("a1:a15").MergeCells) = True Then
    Range("a1:a15").UnMerge
Else
    For x = 2 To Range("a65536").End(xlUp).Row
       开始行数 = x
       Do
         x = x + 1
       Loop Until Cells(x + 1, 1) <> Cells(x, 1)
       Application.DisplayAlerts = False
         Range(Cells(开始行数, 1), Cells(x, 1)).Merge
       Application.DisplayAlerts = True
    Next x
End If
End Sub

laoau126 发表于 2015-6-18 07:21

122333
页: 1 2 [3]
查看完整版本: [通知] 统计VBA学习小组正式组的积分帖之作业上交贴(第15周)