Board logo

標題: [發問] 比對不同工作表的儲存格以及刪除內容 [打印本頁]

作者: netfish777    時間: 2018-10-3 10:09     標題: 比對不同工作表的儲存格以及刪除內容

請問各位前輩,如果有十六張工作表,

工作表1 總共有15行的值
       A     B     C
1    13    9     YY
2    CC   44   XX
3    77    99   33
4    2A    PP   89
....................................
我想在工作表2 到16都設定一個按鈕來執行VBA,
假設工作表2 儲存格A1的值是 CC,在工作表2按下按鈕則搜尋工作表1   A欄儲存格CC這個值在第二行,然後刪除工作表1第二行 A1到A3的內容
假設工作表3 儲存格A1的值是 2A,在工作表3按下按鈕則搜尋工作表1   A欄儲存格CC這個值在第四行,然後刪除工作表1第四行 A1到A3的內容
其餘工作表按鈕功能都以此類推
請問能否讓這十五個工作表的按鈕共用同一個VBA?懇請指教,感謝
作者: n7822123    時間: 2018-10-4 01:14

本帖最後由 n7822123 於 2018-10-4 01:16 編輯

回復 1# netfish777

你的解說感覺邏輯怪怪的,我試著修改如下
你看對不對

工作表1 總共有15行的值
       A     B     C
1    13    9     YY
2    CC   44   XX
3    77    99   33
4    2A    PP   89
....................................

假設工作表2 儲存格A1的值是 CC,在工作表2按下按鈕則搜尋工作表1   A欄儲存格CC這個值在第二行,
然後刪除工作表1第二列 A2到C2的內容


假設工作表3 儲存格A1的值是 2A,在工作表3按下按鈕則搜尋工作表1   A欄儲存格2A這個值在第四行,
然後刪除工作表1第四列 A4到C4的內容
作者: netfish777    時間: 2018-10-4 17:10

回復 2# n7822123


    啊 是的說明我打錯了,很抱歉
就是您所修改的內容才對,感謝
作者: n7822123    時間: 2018-10-4 22:44

本帖最後由 n7822123 於 2018-10-4 22:57 編輯

回復 3# netfish777

能否提供範例檔案,因為這樣有點瞎子摸象

會有很多問題需要釐清

例如:
1.如果第一工作表D欄以後還有資料,D欄以後的資料都保留,只刪除A,B,C 三欄的資料
還是一併刪除?

2.你舉的兩個例子都在工作表1的A欄,是不是B欄與C欄不再比對範圍?
作者: Hsieh    時間: 2018-10-5 14:54

回復 3# netfish777
一般模組
所有按鈕都指定同一個巨集
  1. Sub Del_Find()
  2. Dim A As Range
  3. With 工作表1
  4.   Set A = .Columns("A:A").Find(ActiveSheet.[A1], lookat:=xlWhole)
  5.   If Not A Is Nothing Then A.Resize(, 3).ClearContents '清除內容
  6.   'If Not A Is Nothing Then A.Resize(, 3).Delete xlShiftUp '刪除列
  7. End With
  8. End Sub
複製代碼

作者: netfish777    時間: 2018-10-5 19:21

回復 4# n7822123
因為我剛學VBA,想寫個紀錄股票股利的EXCEL,寫了一半但是還沒寫完全出來@@
工作表1是定存股總明細,A欄十五格記錄著十五種股票代碼
工作表2到16則一個工作表紀錄一種股票的買賣以及股利明細
工作表2的A1股票代碼就是 工作表1的A1,工作表3的A1股票代碼就是 工作表1的A2,以此類推
假設我把工作表2的股票全部出清,只要按個按鈕就可自動清除工作表2該股票的買賣資料以及工作表1 A1 B1 C1三格股價資訊

您的問題

1.如果第一工作表D欄以後還有資料,D欄以後的資料都保留,只刪除A,B,C 三欄的資料
還是一併刪除?

只需刪除ABC三蘭的資料,D蘭以後只有版框圖案不可刪除

2.你舉的兩個例子都在工作表1的A欄,是不是B欄與C欄不再比對範圍?

只有比對A欄,也就是股票代碼,其他欄都不用比對

作者: netfish777    時間: 2018-10-5 21:40

本帖最後由 netfish777 於 2018-10-5 21:43 編輯

回復 4# n7822123

我剛剛把檔案大致完成了,這是我利用網路高手分享的加以拼裝修改,麻煩請前輩看一下
工作表1 的 C1 是股票代碼 是自動抓取 "一覽表" 的 C5 , 工作表2 的 C1 則是抓取 一覽表 的 C6 ,以此類推
每個工作表都有個 情除按鈕,假設我按 工作表1 的清除紐,
希望能用 C1 的股票代碼去找出 "一覽表" 這支股票是在哪一行,然後把該行 C5到N5 的內容清除而不移動任何儲存格
請問能不能十五個工作表的清除紐都能共用一個VBA程式
懇請指教,感謝
作者: n7822123    時間: 2018-10-6 02:31

本帖最後由 n7822123 於 2018-10-6 02:40 編輯

回復 7# netfish777


套用Hsieh 超版的程式
簡單,如下

Sub 清除一覽表某股票()
Sheet1.Columns(3).Find([c1], lookat:=xlWhole).Resize(, 12).ClearContents
End Sub
作者: netfish777    時間: 2018-10-6 20:57

本帖最後由 netfish777 於 2018-10-6 21:10 編輯

回復 8# n7822123

真的可以了,但是發現有個問題
如果在沒有買賣資料的空白工作表之中按下清除按鈕
會出現 " 沒有設定物件變數或者With變數"的錯誤訊息
請問該如何排除?感謝
作者: n7822123    時間: 2018-10-6 23:11

回復 9# netfish777


If [C1] <> 0 Then Sheet1.Columns(3).Find([c1], lookat:=xlWhole).Resize(, 12).ClearContents
作者: netfish777    時間: 2018-10-6 23:39

回復 10# n7822123

都沒問題了,我原本還想把每個工作表的C1儲存格使用IF來解決
結果大大直接在VBA加個IF就搞定了,真是高手
感謝  Hsieh 以及  n7822123兩位前輩指點,感恩




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