【勉強メモ】ExcelVBAの基本
エクセルの大先生こと金子さんの動画のアウトプット記事(メモ)です。お先にこちらご覧ください。noteにはまとめすぎてしまった感があるため、違法指摘次第、削除します🌿
・
・
・
VisualBasicforアプリケーション 言語のこと
VisualBasicforエディター 言語を書く場所
マクロ 実行すること
ファイル オプション トラストセンター(セキュリティ関連) 設定 マクロの設定 Dをチェック(許可すればマクロ使える) OK
フォーム リボンのユーザー設定 開発☑ OK
開発 VBウィンドウ 挿入 標準モジュール(言語をかくところ)
①
Sub テスト() タイトル タイトル名
Msgbox "テスト" メッセージ出す
End Sub エンターで出る
△(実行) エクセル画面で実行される
ツール オプション エディターの設定 サイズ(S) ※メッセージのサイズ
②
Sub 取得()
Range("A1").value エクセル側の文字("A1")を選択.何する(取得・設定する)
※このままだと取得してるだけなので実行しても何もできない(エラー)
End Sub
Sub 取得()
Msgbox Range("A1").value → 取得して「メッセージ出す」
End Sub
エクセル側 のA1セルに「練習」入力
☐(終了・停止)
Range("A1")にあたる部分をオブジェクトという セルやシートや図形など
.valueに当たる部分をプロパティという 状態を表す 大きさや色など
③
Sub 文字入力()
Range("A2").value = "テスト" 右に書いたものが左に入る(A2に文字を設定する)
Range("A4").value = Range("A3").value A3に入力されている文字をA4に入力する
Cells(5, 5).value = "テスト" セルを選択する(行→, 列↓)
End Sub
F5(実行)※△でもできる
エクセル側に文字が入力される
④
マクロの記録・・・手動でプログラム書かなくても、エクセルで実行したことが自動的にプログラムで書かれる機能
エクセル側で適当なセルを選択 開発 マクロの記録
マクロ名=タイトル名(例・太字)
マクロの記録:OK → エクセル側:A4セル選択 ホーム B →開発 記録終了
新しいモジュールが作成されている
↓
Sub 太字()
Range("A4").Select A4選択
Selection.Font.Bold = True 選択したセルの.文字.太く=実行する
End Sub
⑤
(③+④)
Sub 文字入力()
Range("A4").value = Range("A3").value A3に入力されている文字をA4に入力する
Range("A4").Select A4選択
Selection.Font.Bold = True 選択したセルの.文字.太く=実行する
End Sub
⑥
エクセル側でボタンを設置、実行
開発 挿入 フォームコントロール ボタン(左上) 実行するタイトル名選択 OK
ボタン名変更 右クリック テキスト編集
⑦
コンパイルエラー
エラーとして怪しい箇所が青色になる
⑧
’コメント
Sub 文字入力()
’文字を入力 コメント
Range("A4").value = Range("A3").value
End Sub
⑨
シートにわたって文字入力
エクセル側:シート追加しておく
Sub 文字入力()
Worksheets("Sheet2").Range("A1").value = "テスト" Worksheets(”シート名”).セル(”セルの場所”).値
※Sheets(”シート名”)でも可
Sheets("Sheet2").Range("A2").value = Sheets("Sheet1").Range("A2").value
Sheets("Sheet2").Range("A3").value = Date 今日の日付を入力
End Sub
Worksheets("Sheet2") 親オブジェクト
Range("A1") 子オブジェクト
value プロパティ
⑩
まとめ
エクセル(シート1:登録)
イメージ
エクセル(シート2:一覧)
イメージ
不要なモジュール削除しておく 右クリック モジュールの開放 データ残さない場合(いいえ)
Sub 売上登録()
Sheets("一覧").Range("B3").value = Sheets("登録").Range("B2").value ①
Sheets("一覧").Range("C3").value = Sheets("登録").Range("B3").value ②
Sheets("一覧").Range("D3").value = Sheets("登録").Range("B4").value ③
Sheets("一覧").Range("A3").value = Date Date
Sheets("登録").Range("B2:B4").Clearcontents 指定のセルの値を削除する
Msgbox "売上登録しました"
End Sub
F5(一気に実行)
F8(一行ずつ実行)
Sub 売上登録()
If Sheets("一覧").Range("A3").value = "" Then 空白だったら
Sheets("一覧").Range("B3").value = Sheets("登録").Range("B2").value 入力
Sheets("一覧").Range("C3").value = Sheets("登録").Range("B3").value 入力
Sheets("一覧").Range("D3").value = Sheets("登録").Range("B4").value 入力
Sheets("一覧").Range("A3").value = Date 入力
Else 空白じゃなかったら
Sheets("一覧").Range("B4").value = Sheets("登録").Range("B2").value 1行ずらして入力
Sheets("一覧").Range("C4").value = Sheets("登録").Range("B3").value 1行ずらして入力
Sheets("一覧").Range("D4").value = Sheets("登録").Range("B4").value 1行ずらして入力
Sheets("一覧").Range("A4").value = Date 1行ずらして入力
End If
'Sheets("登録").Range("B2:B4").Clearcontents ※コメントブロック
'Msgbox "売上登録しました" ※コメントブロック
End Sub
※ 表示 ツールバー 編集 コメントブロック
Sub 売上登録()
If Sheets("一覧").Range("A3").value = "" Then A3が空白だったら
Sheets("一覧").Range("B3").value = Sheets("登録").Range("B2").value 入力
Sheets("一覧").Range("C3").value = Sheets("登録").Range("B3").value 入力
Sheets("一覧").Range("D3").value = Sheets("登録").Range("B4").value 入力
Sheets("一覧").Range("A3").value = Date 入力
Else If Sheets("一覧").Range("A4").value = "" Then A4が空白だったら
Sheets("一覧").Range("B4").value = Sheets("登録").Range("B2").value 1行ずらして入力
Sheets("一覧").Range("C4").value = Sheets("登録").Range("B3").value 1行ずらして入力
Sheets("一覧").Range("D4").value = Sheets("登録").Range("B4").value 1行ずらして入力
Sheets("一覧").Range("A4").value = Date 1行ずらして入力
Else いずれも空白じゃなかったら
Sheets("一覧").Range("B5").value = Sheets("登録").Range("B2").value 1行ずらして入力
Sheets("一覧").Range("C5").value = Sheets("登録").Range("B3").value 1行ずらして入力
Sheets("一覧").Range("D5").value = Sheets("登録").Range("B4").value 1行ずらして入力
Sheets("一覧").Range("A5").value = Date 1行ずらして入力
End If
End Sub
⑪
繰り返し構文
Sub 繰り返しテスト()
'Sheets("Sheets3").Range("A1").value = 1 コメント
'Sheets("Sheets3").Range("A2").value = 2 コメント
'Sheets("Sheets3").Range("A3").value = 3 コメント
'Sheets("Sheets3").Range("A4").value = 4 コメント
'Sheets("Sheets3").Range("A5").value = 5 コメント
hako = 1
Sheets("Sheets3").Range("A1").value = hako 実行:1となる
Sheets("Sheets3").Range("A" & hako).value = hako 実行:1となる
'Sheets("Sheets3").Range("A2").value = 2
'Sheets("Sheets3").Range("A3").value = 3
'Sheets("Sheets3").Range("A4").value = 4
'Sheets("Sheets3").Range("A5").value = 5
for i = 1 To 5 つづける i 1~5まで
Sheets("Sheets4").Range("A" & i).value = i
Next for~Nextまでを繰り返す
End Sub
変数(文字の置き換え) 宣言必要(なくても動くが想定通りの動きをするとは限らない)
⑫
まとめ2(整形)
Sub 売上登録()
Dim i 変数の宣言
For i = 3 To Sheets("一覧").Range("A1000").End(xlUp).Row + 1 一覧シートの最終行の指定
If Sheets("一覧").Range("A" & i).value = "" Then
With Sheets("一覧") Whit・・・以下をこのSheetsで統一する
.Range("A" & i).value = Date
.Range("B" & i).value = Sheets("登録").Range("B2").value
.Range("C" & i).value = Sheets("登録").Range("B3").value
.Range("D" & i).value = Sheets("登録").Range("B4").value
End With ここまでSheets統一
Exit for 一回でも転記されたら終了
End If
Next 繰り返し終了
Sheets("登録").Range("B2:B4").Clearcontents
Msgbox "売上登録しました"
End Sub
Sheets("一覧").Range("A1000").End(xlUp).Row + 1
→「A1000からCtrl+↑で値の入ったセル+1」のセルを指定
ファイル 名前を付けて保存 フォルダ選択 Excelマクロ有効book
コンテンツの有効化