Excel VBA 程式設計教學:活頁簿、工作表與儲存格

複製與貼上

Excel VBA 也可以使用程式自動進行複製與貼上的動作,假設原本的 Excel 資料是這樣:

excel-vba-programming-workbook-worksheet-cell-18

Excel 活頁簿

我們可以使用 Select 將要複製的範圍先選取起來:

Range("A1:A2").Select

當這些儲存格被選取之後,在 VBA 中就可以透過 Selection 物件來取得這些被選取的儲存格,接著就使用 Selection 物件的 Copy,將選取的儲存格複製起來:

Selection.Copy

複製好資料之後,接著再選擇要貼上的位置:

Range("C3").Select

然後呼叫 ActiveSheetPaste 將資料貼上去:

ActiveSheet.Paste

這是貼上後的結果:

excel-vba-programming-workbook-worksheet-cell-19

Excel 活頁簿

清除儲存格

若要清除儲存格中的資料,可以使用 ClearContents

Range("A1:A2").ClearContents

或是直接將儲存格的內容指定為空字串亦可:

Range("A1").Value = ""

接下來要介紹工作表與活頁簿的操作方式,請繼續閱讀下一頁。

Windows, 程式設計

18 留言

  1. CS

    想請教, 一個已經定義名稱的欄位, 要如何用巨集填入值? 謝謝

    • G. T. Wang

      使用 Range,例如 Range("MyCell").Value = 123

      這部分已經加入文章中。

      • chh

        一個已經定義名稱的欄位, 要如何用巨集填入值
        那麼,該如何在VBA直接定義”MyCell”

        • Hsieh

          [B2].Name = “MyCell”

          B2是我隨意挑的一個儲存格,你可以自行更改

  2. CS

    Thank you very much…

  3. JC

    想請問
    因公司需用VBA抓取測試出來的資料做成曲線圖,再相互比較
    做比對,但這個程式共用於許多測試出來的檔案,每個檔案的
    工作表以檔名做命名,讓這個VBA程式,可以適用於各個檔案 ;
    我試過很多工作表指定,但都無法抓到值,除非在VBA程式中直
    接輸入檔名,就可以畫出曲線…是否可幫忙指教一下,要如何
    修正呢?

    • G. T. Wang

      沒有看到實際的程式與資料,我也不知道該如何處理。

  4. Alex

    請問大大:
    我有兩欄資訊(A欄與C欄),只知道A欄的資訊列數少與C欄,利用Sheets(1).UsedRange.Columns.Count可知C欄最大列數,我要怎麼知道A欄的最大列數呢!?
    ex
    A C
    ────────
    1 2
    2 3
    4
    C欄最大列數為3,A欄要如何取的最大列數(2)!?

  5. Alex

    系統自動把空白吃掉了!!!
    那改問這個吧
    “C欄的資訊列數少與A欄”要怎麼知道A欄的最大列數呢!?(反正都是一樣的)
    ex
    A C
    ────────
    1 2
    2 3
    4
    A欄最大列數為3,C欄要如何取的最大列數(2)!?

    • drmilk

      正在學VBA,剛好可以解答

      Y= cells(rows.count,”A”).end(xlup).row ‘從下向上算有多少列
      debug.print “Y=”, Y ‘及時運算視窗可以看到最大A欄 Y軸有多少列
      or
      Msgbox “Y=”, Y

  6. IRONER

    我完全不會這些程式的東西。但看你寫的文章很容易明白。
    感謝您。

  7. Mw

    您好 想請問一下 如果我要做一按下按鈕 儲存格計算a1+b1 並 顯示在 c1
    我該如何做呢 感謝 !

  8. Jimchang

    Excel VAL程式設計教學寫得不錯 我想應用在股票每天5日平均值減60日平均值每天的值計算 就不用很辛苦計算
    請教每天5日平均值 60日平均值 如何由看盤中取得?
    感恩喔!

  9. Eric

    淺顯易懂,謝謝分享!

  10. PJ

    請問:
    我的工作表以數字命名,程式是放在Macro.xlsm檔案中,指定B1=檔名,B2=工作表名 (儲存格值為1)
    當我指定Sh.Activate (指定到”1″的工作表),vba會判定為從前面開始數第一個工作表,請問VBA該如何寫才不會被誤判?
    Sub 測試II()

    Dim Wb As Workbook, Sh As Worksheet
    Set Wb = Workbooks(Workbooks(“Macro.xlsm”).Worksheets(“VBA”).Range(“B1”).Value) ‘儲存格的值為檔案名稱
    Set Sh = Wb.Worksheets(Worksheets(“VBA”).Range(“B2”).Value) ‘儲存格的值為工作表名稱
    Sh.Activate ‘Range(“B2”)的值為數字,也就是工作表名稱
    ‘Wb.Worksheets(Sh.Name).Activate ‘或寫這樣,也還是會跑到第一個工作表
    End Sub

  11. Alan Chen

    請問針對Excel VBA程式設計教學課程中的第16~21項, 能提供課程內容嗎? 由衷感謝!

    16. 資料繪圖(Charts)
    17. Application 物件
    18. ActiveX 控制項
    19. 使用者表單(Userform)
    20. 範例集錦

  12. 阿宏

    大大好:EXCEL的A1及B1有資料,請問有巨集可以在SHEET裡點任意位置(如N3),A!的資料就可以自動填入

  13. Andrew

    Dear G. T. Wang Sir,

    1)如何禁止使用者新增或刪減指定欄位,vba 程式怎樣寫? 請賜教.
    2)如何禁止使用者利用 active command bar,vba 程式怎樣寫? 請賜教.

Comments are Closed