Excel宏_实现对动态数据求均值和落在特定范围的数据的个数

516号晚,同学叫我帮忙写一个Excel宏,实现对动态数据的求均值和落在特定范围的数据的个数。由于我在大二学过VB(那时学VB主要是为了应付学校的计算机二级考试,过后就没动过了),但对VBA从没碰过,匆忙间也就在Microsoft 的在线帮助中看看,搞到早上5点左右,终于搞定,今天在此记下代码,以后如果有用,就方便了,如果他人觉得有用,请注明出处,谢谢!

 

Sub QIU_ZHI()

'要求:选中你要处理的数据,数据请不要放在前4列中

'功能:对数据求均值、0.9*均值、1.1*均值和落在这个范围内的数据的个数。

'注明:均值在33列,0.9*均值在43列,1.1*均值在53列,落在这个范围内的数据的个数在63

'edit by Hsxzhe 080517

 

  Dim mycell As Range                    '声明mycell是一个区域变量

 

  '声明各变量,由于对VBA常用函数、属性不熟悉,故此宏中定义了大量变量来存储需要处理的数据

  Dim data_sum As Double                 '总和

  Dim pin_jun As Double                  '均值

  Dim zero_p_nine_pinjun As Double       '0.9*均值

  Dim one_p_one_pinjun As Double         '1.1*均值

  Dim fanwei_feshu As Integer            '落在这个范围内的数据的个数

 

  Dim row_start As Integer               '标记所选区域的开始行号

  Dim row_end As Integer                 '标记所选区域的结束行号

  Dim column_start As Integer            '标记所选区域的开始列号

  Dim column_end As Integer              '标记所选区域的结束列号

  Dim aero_num As Integer                '标记所选区域的总个数

 

  Dim row_temp As Integer

  Dim column_temp As Integer

 

 

  '初始化变量

  data_sum = 0

  pin_jun = 0

  zero_p_nine_pinjun = 0

  one_p_one_pinjun = 0

  fanwei_geshu = 0

 

 

  '求出总和

  aero_num = 0

  For Each mycell In Selection

      If aero_num = 0 Then

         row_start = mycell.Row

         column_start = mycell.Column

      End If

      data_sum = data_sum + mycell.Value

      aero_num = aero_num + 1

      row_end = mycell.Row

      column_end = mycell.Column

  Next

 

  '求出个数据

  pin_jun = data_sum / aero_num

  zero_p_nine_pinjun = 0.9 * pin_jun

  one_p_one_pinjun = 1.1 * pin_jun

 

 

  row_temp = 0

  column_temp = 0

  '求出落在这个范围内的数据的个数

  For row_temp = row_start To row_end

    For column_temp = column_start To column_end

      If Cells(row_temp, column_temp).Value > zero_p_nine_pinjun And Cells(row_temp, column_temp).Value < one_p_one_pinjun Then

         fanwei_geshu = fanwei_geshu + 1       '落在范围内,则统计个数

      End If

    Next

  Next

 

  Cells(3, 3) = pin_jun

  Cells(4, 3) = zero_p_nine_pinjun

  Cells(5, 3) = one_p_one_pinjun

  Cells(6, 3) = fanwei_geshu

 

 

 

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''下面的是垃圾,只是格式处理''''''''''''''''''''''''''

Cells(3, 2) = "均值"

Cells(4, 2) = "0.9*均值"

Cells(5, 2) = "1.1*均值"

Cells(6, 2) = "范围个数"

Range(Cells(3, 2), Cells(6, 3)).Select

Range(Cells(3, 2), Cells(6, 3)).Font.Bold = True

With Selection.Borders(xlEdgeLeft)

    .LineStyle = xlContinuous

    .Weight = xlMedium

    .ColorIndex = xlAutomatic

End With

With Selection.Borders(xlEdgeTop)

    .LineStyle = xlContinuous

    .Weight = xlMedium

    .ColorIndex = xlAutomatic

End With

With Selection.Borders(xlEdgeBottom)

    .LineStyle = xlContinuous

    .Weight = xlMedium

    .ColorIndex = xlAutomatic

End With

With Selection.Borders(xlEdgeRight)

    .LineStyle = xlContinuous

    .Weight = xlMedium

    .ColorIndex = xlAutomatic

End With

 

End Sub

你可能感兴趣的:(Excel,Microsoft,Integer,vb,each,VBA)