Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Upcoming SlideShare
What to Upload to SlideShare
What to Upload to SlideShare
Loading in …3
×
1 of 6

memo_VBA_A-1

Download to read offline

EXCEL-VBA勉強会 初級者コース A-1
2019/04/21

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

memo_VBA_A-1

  1. 1. EXCEL-VBA勉強会 初級者コース A-1 2019/04/21 '============================================================ VBA開発環境 開き方  開発→Visual Basic 左側のツリー  Sheet1 にマクロを書くと、シートを消すとマクロも消える  ThisWorkbook にマクロを書くと・・・?  ↓  挿入 標準モジュール をつくって、ここにマクロを書く イミディエイトウィンドウ  …デバッグ用 マクロ本文に Debug.Print name1 などと書いて途中のデータ値を確認する  …1行だけの文を実行できる   ? name1   と書いてEnterを押すと name1 の値が表示される   マクロの1行ごとの動作確認することで、構文エラーを事前に確認できる '============================================================ InputBox()の ()をつける/つけない マクロ文:実行するときは   InputBox "may I know name?" で大丈夫 マクロ文:代入するときは   name = Inputbox( "may I know name?") と()が必要 イミディエイトウィンドウで実行するときは   ? Inputbox( "may I know name?") と()が必要 '============================================================ マクロ文の作成で便利な機能 Ctrl+space でオブジェクト、メンバー、メソッドの候補が出る TAB で候補から選ぶ Ctrl+Z で入力を破棄(戻る) 破棄をやめる(=元に戻す)時は アイコン「やり直し入力」を使う エクセルの Ctrl+Y は、VBAでは行削除なので悲惨 最初にアイコン「コメントブロック」は 表示→ツールバーで”編集”にチェックを入れておく 複数行をコメントアウトする時は アイコン「コメントブロック」 '============================================================ マクロ文の留意点 ボタンに割り付けるためには Public で宣言しておく private の procedure はボタンに割付けできない マクロ実行の結果は Ctrl+Z で戻らない …マクロでセルを消した時は、Ctrl+Zで戻りません 変数を sub の外で定義すると、 全てのprocedureで共用できる=各々のprocedureで提示しなくてもよい 副作用 他のprocedureで変更された値が共有されるので意図しない値になっていることがある '============================================================ マクロを作るときの作法 条件が変わった時に、ユーザーがマクロ文を書き換える必要がないように ユーザーが変更するシートを限定し、どのセルに何を書くのかを決めておく
  2. 2. 具体的には ・シート output をつくり  ユーザーが変更するようなことはこのシートに列挙しておく ・マクロの先頭で、シート input に書かれた値を読み込み、変数に代入して使う 変数の命名ルール(マクロを作る前に決めておく)  定数…大文字で始める  変数…小文字で始める  ※予約語(マクロの命令、オブジェクト名、等と同じ単語)は使えない。 '============================================================ マクロ文の実例 MsgBoxで指示を受け取ることもできる  MsgBox("消してもいいですか", vbOKCancel) ' 1 vbOK ' 2 vbCancel  MsgBox("三択で指示してください", vbYesNoCancel) ' 6 vbYes ' 7 vbNo ' 2 vbCancel with オブジェクト~end with の間は、オブジェクトの記述を省略できる =マクロ文の記述が楽になる  (オブジェクトの表示文字数が長い場合は)マクロを読み易くなる ActiveSheet.Range("A:A").Copy ・・・ コピー ActiveSheet.Range("C:C").Insert ・・・ 挿入 ActiveSheet.Range("C:C").PasteSpecial ・・・ 形式を選択して貼り付け '============================================================ 作成したマクロ '------------------------------------------------------------ Option Explicit Public Sub MyMsg01() 'メッセージボックスに表示する 'comment MsgBox "Hello VBA!" End Sub '------------------------------------------------------------ Public Sub MyConsole01() 'イミディエイトウィンドウに表示する Debug.Print "Hello VBA console!" End Sub '------------------------------------------------------------ Public Sub MyInpurt() Dim name1 As String name1 = InputBox("may I know name?") Debug.Print name1 MsgBox name1 End Sub '------------------------------------------------------------ Private Sub MyNumber01() Dim num1 As Long ' 数値型に文字列は代入できない ' num1 = "100" num1 = 100 Debug.Print num1 Dim str1 As String str1 = "100"
  3. 3. Debug.Print num1 + str1 ' 200 が表示される Debug.Print num1 & str1 ' 100 100 と表示される Debug.Print str1 + num1 ' 200 が表示される 'Debug.Print "test: " + str1 + num1 ' エラー 型が一致しない Debug.Print "test: " & str1 + num1 ' test: 200 が表示される Debug.Print "test: " & str1 & num1 ' test: 100100 が表示される ' 数値と文字をつなげて表示させるときは & でつなぐ End Sub '------------------------------------------------------------ Public Sub MyWrite01() ' セルに値を書き込む ActiveSheet.Range("a1").value = "A1に書き込む" ' inputbox に入れた値を直接セルに書く ActiveSheet.Range("a1").value = InputBox("please input value 1st?") ' 行を折り返す時は _ を使う ActiveSheet.Range("a1").value = _ InputBox("please input value 2nd?") ' 作法にそって値の型を宣言すること Dim val As String val = InputBox("please input value 3rd?") ActiveSheet.Range("a1").value = val ' range に複数セルを指定すると Dim val As String val = InputBox("please input value 4th?") ActiveSheet.Range("a1:c9").value = val End Sub '------------------------------------------------------------ Public Sub MyWrite02() ' セルに値を書き込む Dim val As String val = InputBox("please input value") ActiveSheet.Cells(1, 2).value = val End Sub '------------------------------------------------------------ Public Sub MyClear01() ' range指定で消す ' ActiveSheet.Range("A1:C9").Clear ' ActiveSheetだと大切なデータを消してしまうのでシートを指定する 'Sheets("Sheet1").Range("A1:C9").Clear Dim confirm As Integer confirm = MsgBox("消してもいいですか", vbOKCancel) ' 1 vbOK ' 2 vbCancel If confirm = vbOK Then Sheets("Sheet1").Range("A1:C9").Clear Else MsgBox "キャンセルされました"
  4. 4. End If End Sub '------------------------------------------------------------ Private Sub myIf01() Dim confirm As Integer confirm = MsgBox("三択で答えてもらう場合", vbYesNoCancel, "3つめの引数でMsgBoxのタイトルを指定 できる") ' 2 vbCancel ' 7 vbNo ' 6 vbYes ' 戻り値を知らなくても、定数の名前を知っておけばよい If confirm = vbYes Then Debug.Print "vbYes vbYes" ElseIf confirm = vbNo Then Debug.Print "vbNo vbNo" ElseIf confirm = vbCancel Then Debug.Print "vbCancel vbCancel" End If End Sub '------------------------------------------------------------ Public Sub MyRead01() ' セルから値を読み込む ' 定数は最初に宣言し、値を決めておく ' InputSn : inputシート名 Const InputSn As String = "input" Const MyNameRange As String = "B1" Dim name As String 'name = Sheets("input").Range("B1").Value ' 定数は最初に宣言すると… name = Sheets(InputSn).Range(MyNameRange).value Debug.Print name End Sub '------------------------------------------------------------ Public Sub MyFor01() ' For文で0から10までカウントアップ Dim ProcStart As Long ProcStart = 0 Dim ProcEnd As Long ProcEnd = 10 Dim i As Integer 'For i = 0 To 10 Step 1 '変数を使ってみる… For i = ProcStart To ProcEnd Step 1 Debug.Print i Next End Sub '------------------------------------------------------------ Public Sub MyProg() ' シートouputの列名の開始行から終了行までを値で埋める Const OutputSn As String = "output" Const InputSn As String = "input" Const ProcCol As String = "B2" Dim vProcCol As String Const ProcStart As String = "B3" Dim vProcStart As Long Const ProcEnd As String = "B4" Dim vProcEnd As Long Const Procvalue As String = "B5" Dim vProcvalue As String Dim i As Integer
  5. 5. ' 設定値を読み込む vProcCol = Sheets(InputSn).Range(ProcCol).value vProcStart = Sheets(InputSn).Range(ProcStart).value vProcEnd = Sheets(InputSn).Range(ProcEnd).value vProcvalue = Sheets(InputSn).Range(Procvalue).value ' with を使うと記述が楽になる ' With Sheets(InputSn) ' vProcCol = Range(ProcCol).value ' vProcStart = Range(ProcStart).value ' vProcEnd = Range(ProcEnd).value ' vProcvalue = Range(Procvalue).value ' End With ' 三択で指示を受ける Dim confirm As Integer confirm = MsgBox("Range指定で一気に埋める…Y for文で一つずつ埋める…N 消す…キャンセル", vbYesNoCancel) If confirm = vbYes Then ' rangeで指定して一気に埋める Sheets(OutputSn).Range(vProcCol & vProcStart & ":" & vProcCol & vProcEnd).value = vProcvalue ElseIf confirm = vbNo Then 'for文で一つずつ埋める For i = vProcStart To vProcEnd Step 1 Sheets(OutputSn).Range(vProcCol & i).value = vProcvalue & vProcvalue Next ElseIf confirm = vbCancel Then Sheets(OutputSn).Range(vProcCol & vProcStart & ":" & vProcCol & vProcEnd).Clear End If End Sub '------------------------------------------------------------ Public Sub MyInsert01() Const OutputSn As String = "output" Const InputSn As String = "input" Const ProcSrc As String = "B7" Dim vProcSrc As Long Const ProcDst As String = "B8" Dim vProcDst As Long Const ProcCount As String = "B9" Dim vProcCount As Long Dim i As Integer ' 設定値を読み込む vProcSrc = Sheets(InputSn).Range(ProcSrc).value vProcDst = Sheets(InputSn).Range(ProcDst).value vProcCount = Sheets(InputSn).Range(ProcCount).value ' 設定値をwithで読み込むと値が全てゼロになる=読み込めない? ' With Sheets(InputSn) ' vProcSrc = Range(ProcSrc).value ' vProcDst = Range(ProcDst).value ' vProcCount = Range(ProcCount).value ' End With Debug.Print vProcSrc Debug.Print vProcDst Debug.Print vProcCount ' 設定値をwithで読み込むと値が全てゼロになる=読み込めない? With Sheets(OutputSn) For i = 1 To vProcCount Range(vProcSrc & ":" & vProcSrc).Copy Range(vProcDst & ":" & vProcDst).Insert ' Range(vProcDst & ":" & vProcDst).PasteSpecial 'ペースト Next End With End Sub
  6. 6. '------------------------------------------------------------

×