標題:
請教一下!下列的語法可用迴圈來簡化嗎?
[打印本頁]
作者:
skyutm
時間:
2012-8-23 22:35
標題:
請教一下!下列的語法可用迴圈來簡化嗎?
各位先進大家好!小弟為了設計成績系統依然繼續努力中,但在此又有一個問題想請教,請問一下,下列的語法可以用迴圈簡化嗎?應該怎麼寫。
Sub Worksheet_Change(ByVal Target As Range) '國語成績'
Dim ch1 As Integer, ch2 As Integer, ch3 As Integer, ch4 As Integer, chsc1 As Integer, chsc2 As Integer, chsc3 As Integer, chsc4 As Integer
ch1 = Worksheets("基本設定").Range("e2").Value
ch2 = Worksheets("基本設定").Range("f2").Value
ch3 = Worksheets("基本設定").Range("g2").Value
ch4 = Worksheets("基本設定").Range("h2").Value
chsc1 = Worksheets("期中評量").Range("c3").Value
chsc2 = Worksheets("期中評量").Range("h3").Value
chsc3 = Worksheets("期中評量").Range("i3").Value
chsc4 = Worksheets("期中評量").Range("j3").Value
Worksheets("期中成績").Range("c5").Value = (chsc1 * ch1 + chsc2 * ch2 + chsc3 * ch3 + chsc4 * ch4) / 100
End Sub
http://www.FunP.Net/795776
作者:
skyutm
時間:
2012-8-24 00:29
補充一下,就是這一大串
Worksheets("期中成績").Range("c5").Value = (Range("c3") * ch1 + Range("h3") * ch2 + Range("i3") * ch3 + Range("j3") * ch4) / 100
Worksheets("期中成績").Range("c6").Value = (Range("c4") * ch1 + Range("h4") * ch2 + Range("i4") * ch3 + Range("j4") * ch4) / 100
Worksheets("期中成績").Range("c7").Value = (Range("c5") * ch1 + Range("h5") * ch2 + Range("i5") * ch3 + Range("j5") * ch4) / 100
Worksheets("期中成績").Range("c8").Value = (Range("c6") * ch1 + Range("h6") * ch2 + Range("i6") * ch3 + Range("j6") * ch4) / 100
Worksheets("期中成績").Range("c9").Value = (Range("c7") * ch1 + Range("h7") * ch2 + Range("i7") * ch3 + Range("j7") * ch4) / 100
Worksheets("期中成績").Range("c10").Value = (Range("c8") * ch1 + Range("h8") * ch2 + Range("i8") * ch3 + Range("j8") * ch4) / 100
Worksheets("期中成績").Range("c11").Value = (Range("c9") * ch1 + Range("h9") * ch2 + Range("i9") * ch3 + Range("j9") * ch4) / 100
Worksheets("期中成績").Range("c12").Value = (Range("c10") * ch1 + Range("h10") * ch2 + Range("i10") * ch3 + Range("j10") * ch4) / 100
Worksheets("期中成績").Range("c13").Value = (Range("c11") * ch1 + Range("h11") * ch2 + Range("i11") * ch3 + Range("j11") * ch4) / 100
Worksheets("期中成績").Range("c14").Value = (Range("c12") * ch1 + Range("h12") * ch2 + Range("i12") * ch3 + Range("j12") * ch4) / 100
Worksheets("期中成績").Range("c15").Value = (Range("c13") * ch1 + Range("h13") * ch2 + Range("i13") * ch3 + Range("j13") * ch4) / 100
Worksheets("期中成績").Range("c16").Value = (Range("c14") * ch1 + Range("h14") * ch2 + Range("i14") * ch3 + Range("j14") * ch4) / 100
Worksheets("期中成績").Range("c17").Value = (Range("c15") * ch1 + Range("h15") * ch2 + Range("i15") * ch3 + Range("j15") * ch4) / 100
Worksheets("期中成績").Range("c18").Value = (Range("c16") * ch1 + Range("h16") * ch2 + Range("i16") * ch3 + Range("j16") * ch4) / 100
Worksheets("期中成績").Range("c19").Value = (Range("c17") * ch1 + Range("h17") * ch2 + Range("i17") * ch3 + Range("j17") * ch4) / 100
Worksheets("期中成績").Range("c20").Value = (Range("c18") * ch1 + Range("h18") * ch2 + Range("i18") * ch3 + Range("j18") * ch4) / 100
Worksheets("期中成績").Range("c21").Value = (Range("c19") * ch1 + Range("h19") * ch2 + Range("i19") * ch3 + Range("j19") * ch4) / 100
Worksheets("期中成績").Range("c22").Value = (Range("c20") * ch1 + Range("h20") * ch2 + Range("i20") * ch3 + Range("j20") * ch4) / 100
Worksheets("期中成績").Range("c23").Value = (Range("c21") * ch1 + Range("h21") * ch2 + Range("i21") * ch3 + Range("j21") * ch4) / 100
Worksheets("期中成績").Range("c24").Value = (Range("c22") * ch1 + Range("h22") * ch2 + Range("i22") * ch3 + Range("j22") * ch4) / 100
Worksheets("期中成績").Range("c25").Value = (Range("c23") * ch1 + Range("h23") * ch2 + Range("i23") * ch3 + Range("j23") * ch4) / 100
Worksheets("期中成績").Range("c26").Value = (Range("c24") * ch1 + Range("h24") * ch2 + Range("i24") * ch3 + Range("j24") * ch4) / 100
Worksheets("期中成績").Range("c27").Value = (Range("c25") * ch1 + Range("h25") * ch2 + Range("i25") * ch3 + Range("j25") * ch4) / 100
Worksheets("期中成績").Range("c28").Value = (Range("c26") * ch1 + Range("h26") * ch2 + Range("i26") * ch3 + Range("j26") * ch4) / 100
Worksheets("期中成績").Range("c29").Value = (Range("c27") * ch1 + Range("h27") * ch2 + Range("i27") * ch3 + Range("j27") * ch4) / 100
Worksheets("期中成績").Range("c30").Value = (Range("c28") * ch1 + Range("h28") * ch2 + Range("i28") * ch3 + Range("j28") * ch4) / 100
Worksheets("期中成績").Range("c31").Value = (Range("c29") * ch1 + Range("h29") * ch2 + Range("i29") * ch3 + Range("j29") * ch4) / 100
Worksheets("期中成績").Range("c32").Value = (Range("c30") * ch1 + Range("h30") * ch2 + Range("i30") * ch3 + Range("j30") * ch4) / 100
Worksheets("期中成績").Range("c33").Value = (Range("c31") * ch1 + Range("h31") * ch2 + Range("i31") * ch3 + Range("j31") * ch4) / 100
Worksheets("期中成績").Range("c34").Value = (Range("c32") * ch1 + Range("h32") * ch2 + Range("i32") * ch3 + Range("j32") * ch4) / 100
Worksheets("期中成績").Range("c35").Value = (Range("c33") * ch1 + Range("h33") * ch2 + Range("i33") * ch3 + Range("j33") * ch4) / 100
Worksheets("期中成績").Range("c36").Value = (Range("c34") * ch1 + Range("h34") * ch2 + Range("i34") * ch3 + Range("j34") * ch4) / 100
Worksheets("期中成績").Range("c37").Value = (Range("c35") * ch1 + Range("h35") * ch2 + Range("i35") * ch3 + Range("j35") * ch4) / 100
Worksheets("期中成績").Range("c38").Value = (Range("c36") * ch1 + Range("h36") * ch2 + Range("i36") * ch3 + Range("j36") * ch4) / 100
Worksheets("期中成績").Range("c39").Value = (Range("c37") * ch1 + Range("h37") * ch2 + Range("i37") * ch3 + Range("j37") * ch4) / 100
Worksheets("期中成績").Range("c40").Value = (Range("c38") * ch1 + Range("h38") * ch2 + Range("i38") * ch3 + Range("j38") * ch4) / 100
Worksheets("期中成績").Range("c41").Value = (Range("c39") * ch1 + Range("h39") * ch2 + Range("i39") * ch3 + Range("j39") * ch4) / 100
Worksheets("期中成績").Range("c42").Value = (Range("c40") * ch1 + Range("h40") * ch2 + Range("i40") * ch3 + Range("j40") * ch4) / 100
Worksheets("期中成績").Range("c43").Value = (Range("c41") * ch1 + Range("h41") * ch2 + Range("i41") * ch3 + Range("j41") * ch4) / 100
Worksheets("期中成績").Range("c44").Value = (Range("c42") * ch1 + Range("h42") * ch2 + Range("i42") * ch3 + Range("j42") * ch4) / 100
作者:
GBKEE
時間:
2012-8-24 07:35
回復
2#
skyutm
Sub nn()
Dim I As Integer, ch1 As Integer, ch2 As Integer, ch3 As Integer, ch4 As Integer
For I = 3 To 43
Worksheets("期中成績").Range("c" & 5 + I - 3).Value = (Range("c" & I) * ch1 + Range("h" & I) * ch2 + Range("i" & I) * ch3 + Range("j" & I) * ch4) / 100
Next
End Sub
複製代碼
作者:
skyutm
時間:
2012-8-24 13:07
回復
3#
GBKEE
感謝版大,我知道哪裡出問題了,我昨天是這樣寫
For I = 3 To 40
Worksheets("期中成績").Range(c&(I+2)).Value = (Range("ci" ) * ch1 + Range("hi" ) * ch2 + Range("ii" ) * ch3 + Range("ji" ) * ch4) / 100
原來括號內要這樣寫
Worksheets("期中成績").Range("c" & 5 + I - 3).Value = (Range("c" & I) * ch1 + Range("h" & I) * ch2 + Range("i" & I) * ch3 + Range("j" & I) * ch4) / 100
另外,還想再請教您。有關統計成績的語法,就是說考100分的幾人,考90~99分的幾人....
'成績統計'
Dim myrange As Range
For Each myrange In Worksheets("期中評量").Range("c3", Range("c3").End(xlDown))
If myrange.Value = 100 Then Worksheets("sheet1").Range("a1") = myrange.Count
這樣的語法是哪裡該修改?謝謝。
作者:
GBKEE
時間:
2012-8-24 14:49
本帖最後由 GBKEE 於 2012-8-24 20:56 編輯
回復
4#
skyutm
Option Explicit
Sub Ex()
Dim Rng As String, I As Integer, 分數間格 As Integer, Msg As String
分數間格 = 10 '也可以間格 5分
Rng = Worksheets("期中評量").Range("c3", Range("c3").End(xlDown)).Address '計算範圍的Address
'Application.Min(Range(Rng)) :最低分-> 還要加1個分數間格 來執行迴圈
For I = 100 To Application.Min(Range(Rng)) - 分數間格 Step -分數間格 '- : 負數迴圈遞減
If I = 100 Then
Msg = "100 = " & Application.Evaluate("SumProduct((" & Rng & ">=100)*1 )")
Else
Msg = Msg & Chr(10) & I + 分數間格 - 1 & "~" & I & " = " & Application.Evaluate("SumProduct((" & Rng & "<=" & I + 分數間格 - 1 & ")*(" & Rng & ">=" & I & " ))")
End If
Next
MsgBox Msg
End Sub
複製代碼
補上另一寫法
Option Explicit
Sub Ex_CountIf()
Dim Rng As Range, 間隔 As Integer, A As Integer, B As Integer, I As Integer, AR(1 To 2)
Set Rng = Range("A1:A" & [A1].End(xlDown).Row) '統計的範圍
間隔 = 10
For I = 100 To Application.Min(Rng) - 間隔 Step -間隔
B = Application.CountIf(Rng, ">=" & I)
'COUNTIF 工作表函數: 計算某範圍內符合某搜尋準則的儲存格個數
If B - A > 0 Then
AR(1) = AR(1) & "," & IIf(I < 100, I + 間隔 - 1 & "~", "") & I
AR(2) = AR(2) & "," & B - A
A = B
End If
Next
AR(1) = Application.Transpose(Split(Mid(AR(1), 2), ","))
AR(2) = Application.Transpose(Split(Mid(AR(2), 2), ","))
[B:C] = ""
[B1].Resize(UBound(AR(1))) = AR(1)
[C1].Resize(UBound(AR(2))) = AR(2)
End Sub
複製代碼
作者:
假面超人
時間:
2012-8-24 15:23
本帖最後由 假面超人 於 2012-8-24 15:24 編輯
回復
4#
skyutm
我也試寫了一個
你試看看
分數是填在C欄位
Sub 統計()
a = 0
b = 0
c = 0
d = 0
e = 0
f = 0
myRowCount = Sheets("期中評量").Range("C1").CurrentRegion.Rows.Count '判斷C1到最後一筆資料有列
For i = 1 To myRowCount
myrange = Sheets("期中評量").Range("c" & i)
Select Case myrange
Case "100"
a = a + 1
Case "90" To "99"
b = b + 1
Case "80" To "89"
c = c + 1
Case "70" To "79"
d = d + 1
Case "60" To "69"
e = e + 1
Case "0" To "69"
f = f + 1
End Select
Next i
Sheets("sheet1").Range("A1").Value = a '100分總數
Sheets("sheet1").Range("A2").Value = b '90-99總數
Sheets("sheet1").Range("A3").Value = c '80-89 總數
Sheets("sheet1").Range("A4").Value = d '70-79 總數
Sheets("sheet1").Range("A5").Value = e '60-69 總數
Sheets("sheet1").Range("A6").Value = f '0-59 不及格總數
End Sub
複製代碼
作者:
skyutm
時間:
2012-8-24 18:25
感謝兩位!我先去試試,再上來報告成果。
作者:
GBKEE
時間:
2012-8-24 21:31
本帖最後由 GBKEE 於 2012-8-25 05:55 編輯
回復
6#
假面超人
'Case "0" To "69" 應是-> Case "0" To "59"
'但 6,7,8,9,無法計算到, 可是 101 會計算到
'建議修改如下
For I = 1 To myRowCount
myrange = Sheets("期中評量").Range("c" & I)
Select Case myrange
Case 100
A = A + 1
Case 90 To 99
B = B + 1
Case 80 To 89
c = c + 1
Case 70 To 79
d = d + 1
Case 60 To 69
E = E + 1
Case 0 To 59
f = f + 1
End Select
複製代碼
作者:
假面超人
時間:
2012-8-24 22:13
回復
8#
GBKEE
真的A....
沒測試到6.7.8.9
原來有加""和沒加""差那麼多,這是bug嗎?還是?
另外
Select Case myrange.Value
這一行會出現錯誤,我把value拿掉就OK了!!
作者:
GBKEE
時間:
2012-8-25 05:58
回復
9#
假面超人
.Value 不知為何會加上的,已更正了
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)