PCDVD數位科技討論區

PCDVD數位科技討論區 (https://www.pcdvd.com.tw/index.php)
-   疑難雜症區 (https://www.pcdvd.com.tw/forumdisplay.php?f=34)
-   -   Excel VBA問題?? (https://www.pcdvd.com.tw/showthread.php?t=895851)

onizuka-t 2010-05-29 06:17 PM

Excel VBA問題??
 
各位大大好,

小弟有各問題想請教各位

如果column B、C、D分別代表時間、地點、人 (此時字型色彩為黑色)
而row則是分別代表每個事件
舉例來說B1為10/24、C1為小巨蛋、D1為我與弟
B2為10/25、C2為體育館、D2為我與同學
其餘類推......

若現在假若任何一個事件的 B、C、D任一數值改變,我會以紅字表示
以上動作都是使用人工

----------------VBA要做的事情-----------------
但現在問題為我希望任何一事件若有改變
舉例來說即B1、C1、D1內若有一格為紅色,則在A1顯示數值"1",若皆無改變A1則強制輸入空白值
其餘類推......
----------------VBA要做的事情-----------------

請問如何使用excel VBA,寫出來呢??

PS: 小弟上述例子為簡化表示,事實上的事件大約有5000多各,若要一各一各慢慢判斷可能會死人阿 :jolin:

airitter 2010-05-29 06:48 PM

你的問題好像不用VBA也可以做出來
不知道你說一各一各慢慢判斷是什麼意思?

用VBA做好像沒有比較快?
或者你少說明什麼

直接把檔案傳上來吧

無聊的人會幫你作

onizuka-t 2010-05-29 07:21 PM

引用:
作者airitter
你的問題好像不用VBA也可以做出來
不知道你說一各一各慢慢判斷是什麼意思?

用VBA做好像沒有比較快?
或者你少說明什麼

直接把檔案傳上來吧

無聊的人會幫你作



一各一各慢慢判斷是指此若B、C、D若有有改變者,A要打上1
若我資料有5000多行(row),則我要檢查B、C、D 行(column)各別5000多次,而B、C、D內若有任何一數字變成紅色,則我要在相對應的A行(row)打上1

這實在是很花時間,但卻是可以使用VBA作的routine工作,故才想請教各位大大的

airitter 2010-05-29 07:28 PM

簡單表格裡面的=if(a=b,1,0)這種作不出來嗎?

因為VBA是比較進階的東西, 用簡單的題目用進階的做 感覺怪怪的

直接把檔案分享好了

lcc22 2010-05-29 07:52 PM

Sub test()
Dim A As String, B As String, C As String, D As String
Dim i As Integer

For i = 1 To 10 '這裡只假設有10筆資料,且資料存在於同一worksheet
A = "A" & i
B = "B" & i
C = "C" & i
D = "D" & i

If Range(B).Font.ColorIndex = 3 Then
Range(A).Value = 1
ElseIf Range(C).Font.ColorIndex = 3 Then
Range(A).Value = 1
ElseIf Range(D).Font.ColorIndex = 3 Then
Range(A).Value = 1
Else
Range(A).Value = ""
End If
Next i

End Sub

onizuka-t 2010-05-29 08:43 PM

引用:
作者lcc22
Sub test()
Dim A As String, B As String, C As String, D As String
Dim i As Integer

For i = 1 To 10 '這裡只假設有10筆資料,且資料存在於同一worksheet
A = "A" & i
B = "B" & i
C = "C" & i
D = "D" & i

If Range(B).Font.ColorIndex = 3 Then
Range(A).Value = 1
ElseIf Range(C).Font.ColorIndex = 3 Then
Range(A).Value = 1
ElseIf Range(D).Font.ColorIndex = 3 Then
Range(A).Value = 1
Else
Range(A).Value = ""
End If
Next i

End Sub



謝謝大大,照您的寫的VBA已經可以成功了
感恩阿 :like: ~~~~省了好多時間阿
不過想請教若我要判斷的欄位有B至M, P至W
照您的寫法在宣告Dim A與A = "A & i 的地方
要分別寫出B至M, P至W的程式碼(這樣程式碼很冗長)
請問有更簡潔的方法寫出這些嗎??

lcc22 2010-05-29 11:01 PM

請不要叫我大大,我不是專門寫程式的,VBA的變數宣告有些怪,沒法一次宣告同樣的性質

Sub test()
Dim i As Integer, j As Integer

For i = 1 To 10 '假設資料10筆,並存於同一worksheet
For j = 2 To 23
If j <> 14 And j <> 15 Then
If ActiveSheet.Cells(i, j).Font.ColorIndex = 3 Then
ActiveSheet.Cells(i, 1).Value = 1
Exit For
Else
ActiveSheet.Cells(i, 1).Value = ""
End If
End If
Next j
Next i

End Sub


所有的時間均為GMT +8。 現在的時間是11:51 AM.

vBulletin Version 3.0.1
powered_by_vbulletin 2025。