Board logo

標題: 如何利用VBA一鍵自動填入1或3呢? [打印本頁]

作者: RCRG    時間: 2015-11-12 09:06     標題: 如何利用VBA一鍵自動填入1或3呢?

[attach]22411[/attach]

[attach]22412[/attach]
作者: lpk187    時間: 2015-11-12 10:09

  1. Sub 按鈕1_Click()
  2. Dim Rng As Range
  3. With Sheets("Sheet2")
  4.     For Each Rng In .Range("C3:C79")
  5.         If Rng <> "" Then
  6.             Set da = .Range("AA3:AA500").Find(Rng.Value, LookAt:=xlWhole, SearchDirection:=2)
  7.             If da Is Nothing Then
  8.                 Rng.Offset(, -1) = 3
  9.             Else
  10.                 Rng.Offset(, -1) = 1
  11.                 Set da = Nothing
  12.             End If
  13.         End If
  14.     Next
  15. End With
  16. End Sub
複製代碼
回復 1# RCRG
作者: 准提部林    時間: 2015-11-12 10:09

Sub TEST()
With [B3:B79]
   .Formula = "=IF(C3="""","""",3^(1-COUNT(MATCH(C3,AA$2:AA$500,))))"
   .Value = .Value
End With
[D1] = Now
End Sub
作者: RCRG    時間: 2015-11-12 11:01

謝謝兩位的回答,測試兩位的結果都是我要的答案,真的非常謝謝!自從知識+改版後,提出問題好像都石沉大海,索性讓我發現這個論壇,更讓我驚豔的是,以前曾經在舊版知識+幫我解答過的excel專家們竟然都在這兒,真的好讓我開心!希望日後還能獲得各位大大賜教與指導。
作者: RCRG    時間: 2015-11-13 11:02

回復 3# 准提部林


想請問一下准大相反做法,若符合號碼就填3,否則就填1,那公式要如何修改呢?
作者: 准提部林    時間: 2015-11-13 12:13

回復 5# RCRG


=IF(C3="","",3^COUNT(MATCH(C3,AA$2:AA$500,)))
=IF(C3="","",IF(COUNT(MATCH(C3,AA$2:AA$500,)),3,1))
=IF(C3="","",IF(ISNA(MATCH(C3,AA$2:AA$500,)),1,3))
作者: RCRG    時間: 2015-11-14 04:03

回復 6# 准提部林


    原來如此,下面三個都可以通用是吧!可是好像會出現錯誤,自己反覆測試後,應該是少了"",所以如容許我把正解再PO一次吧!
   最後也再次謝謝 准大 囉!


=IF(C3="""","""",3^COUNT(MATCH(C3,AA$3:AA$500,)))
=IF(C3="""","""",IF(COUNT(MATCH(C3,AA$3:AA$500,)),3,1))
=IF(C3="""","""",IF(ISNA(MATCH(C3,AA$3:AA$500,)),1,3))
作者: 准提部林    時間: 2015-11-14 11:04

回復 7# RCRG


提供的是工作表公式, 若要寫到VBA中, 遇有"??"包覆的文字, 都須再加一層""??"", 這是通則,
也可先使用錄製再貼入!
作者: RCRG    時間: 2015-11-21 11:14

本帖最後由 RCRG 於 2015-11-21 11:16 編輯
Sub TEST()
With
   .Formula = "=IF(C3="""","""",3^(1-COUNT(MATCH(C3,AA$2:AA$500,))))"
   . ...
准提部林 發表於 2015-11-12 10:09



    謝謝准大的解題!

我想了解另一種不必按鈕的做法,就是不用按鍵也會直接幫我填入,而觸發填入時間點為:每當Sheet2的C3:C200任何一欄內容有異動時,B3:B79就全部再重新填入一次。

有點龜毛,但還是先跟各位大大說聲抱歉,麻煩指教了!>"<
作者: 准提部林    時間: 2015-11-21 12:50

回復 9# RCRG


Private Sub Worksheet_Change(ByVal Target As Range)
With Target
   If Not Intersect([AA2:AA500], .Cells) Is Nothing Then
     With [Sheet2!B3:B79]
        .Formula = "=IF(C3="""","""",3^COUNT(MATCH(C3,AA$2:AA$500,)))"
        .Value = .Value
     End With
     [Sheet2!D1] = Now
   End If
End With
End Sub
作者: RCRG    時間: 2015-11-21 13:21

回復 10# 准提部林


    好怪,把您的VBA貼在Sheet2工作表後,在C欄裡一直修改內容,也沒見他自動填入呢?
是我貼錯位置還是需要甚麼其他動作嗎?

對了!我會觸發的 "自動填入" 的修改C欄的範圍有增加到C3:C200喔,因為有時使用者會異動到100多列,所以我乾脆把範圍增加到C200也會觸發。
作者: 准提部林    時間: 2015-11-21 13:54

回復 11# RCRG


公式及程式不是膏藥貼了就用, 先去了解一下, 有問題試著去修改再測試看看~~
作者: RCRG    時間: 2015-11-21 18:31

回復 10# 准提部林


    謝謝准大的指正,測試的的結果,我好像找不到修改C欄位後就自動填入的,有一些都是我只是滑鼠點選C欄位,還沒修改就填入了,不知還有其他可以選嗎

[attach]22533[/attach]
作者: 准提部林    時間: 2015-11-21 20:15

回復 13# RCRG


Private Sub Worksheet_Change(ByVal Target As Range)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

看一下兩者不同處, 可參考VBE說明~~事件~~
作者: RCRG    時間: 2015-11-22 04:12

回復 14# 准提部林


    謝謝准大解答,參照您的答案,我自己再變更一下手法,也算是可以自動觸發了,再一次感謝您多次的幫忙!
作者: RCRG    時間: 2015-11-24 16:39     標題: 如何利用VBA一鍵自動填入1或3呢? Part2

http://forum.twbts.com/viewthrea ... a=pageD1&page=1
上列網址是原問題與解答;

但是最近又有新的需求,就是如果自動在B欄位填入1或3後,有些使用者會誤改到B欄位自動填入的數值,
不知能否 彈出視窗  "填入號碼與預設不同,請確認是否要修改!"  來提醒一下使用者。


以上問題,有勞大大幫解!
作者: RCRG    時間: 2015-11-25 16:39

上列網址是原問題與解答;

但是最近又有新的需求,就是如果自動在B欄位填入1或3後,有些使用者會誤改到 ...
RCRG 發表於 2015-11-24 16:39



    原來這樣算重複發帖,謝謝版大提醒與幫忙合併,也希望各位大大能幫解上1樓(16樓)PATR2問題,3Q!
作者: 千暉尋    時間: 2015-12-25 20:23

回復 3# 准提部林
請問准大, .Formula = "=IF(C3="""","""",3^(1-COUNT(MATCH(C3,AA$2:AA$500,))))"中
COUNT(MATCH(C3,AA$2:AA$500,))))的值要嘛是0,要嘛是1,結果才能顯示出1或3,而MATCH是找出相符所在的位置,例如可能找到在第400列,這樣怎麼會得出0或1的結果?
作者: 千暉尋    時間: 2015-12-25 20:40

回復 18# 千暉尋
找到答案了,原來是COUNT的作用:找到包含數字的儲存格個數,所以MATCH的結果不管是何數字(或找不到),結局不是0就是1!
作者: yen956    時間: 2015-12-26 18:36

回復 10# 准提部林
利用3^0, 3^1來填入1或3, 真妙, 拜服, 收下, 謝謝!!




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)