【勉強メモ】ExcelVBAの基本

エクセルの大先生こと金子さんの動画のアウトプット記事(メモ)です。お先にこちらご覧ください。noteにはまとめすぎてしまった感があるため、違法指摘次第、削除します🌿

画像3



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


エクセル(シート2:一覧) 
イメージ 

画像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
コンテンツの有効化