動画登録者20万越えの教育系YouTuberでお馴染み、Yousefulの長内孝平氏、神川陽太氏のExcelとスプレッドシートの本では、「現場の教科書」というタイトルが付いてある通り、実務に直結した内容をまずは本で要点を掴んで、動画で詳しく解説して下さっています。 個人的にはお二人の動画最後の「See you next time! Bye Bye!!」が好きで勉強のモチベーションが上がる教材です。
Sub 密です()
'セルA1からK11まで「人」で埋めつくして密にする
Range("A1:K11") = "人"
End Sub
● ボタン「ソーシャルディスタンス」に登録するコード
Sub ソーシャルディスタンス()
' カウンタ変数iとjを宣言する
Dim i As Integer, j As Integer
' シートをクリアする
Cells.Clear
'セルA1を選択する
Range("A1").Select
'外側のループでiを0から10まで2ずつ増やす
For i = 0 To 10 Step 2
'内側のループでjを0から10まで2ずつ増やす
For j = 0 To 10 Step 2
'セルA1を基準として、下にi、右にj分移動したセルをアクティブにして「人」と言う字を入れる
ActiveCell.Offset(i, j).Value = "人"
'内側のループjを進める
Next j
' 外側のループiを進める
Next i
End Sub
'i= 0で固定して内側のループのみを動かす
Sub ソーシャルディスタンス()
' カウンタ変数iとjを宣言する
Dim i As Integer, j As Integer
' シートをクリアする
Cells.Clear
'セルA1を選択する
Range("A1").Select
'外側のループでiを0から10まで2ずつ増やす
'For i = 0 To 10 Step 2 ←コメントアウト
'内側のループでjを0から10まで2ずつ増やす
For j = 0 To 10 Step 2
'セルA1を基準として、下にi、右にj分移動したセルをアクティブにして「人」と言う字を入れる
ActiveCell.Offset(0, j).Value = "人" ' ← iを0にする
'内側のループjを進める
Next j
' 外側のループiを進める
'Next i ←コメントアウト
End Sub
TEST START
RPUSH
OUT MOJI,LEN
;GR1にMOJIの先頭アドレスを指定
;GR2に文字数を格納
;大文字に変換するサブルーチンUPPERを呼び出す
OUT MOJI,LEN
RPOP
RET
MOJI DC 'Social Distance'
LEN DC 15
;大文字に変換するサブルーチンUPPER
UPPER RPUSH
;<<大文字判定ループ>>
;GR3に配列MOJIの文字を読み込む
;その文字の文字コードを小文字の「a」と比較
;文字コードがaより小さかったらSKIPへ分岐
;小文字の「z」と比較
;文字コードがzより大きかったらSKIPへ分岐
;文字コードを20引いて「小文字 → 大文字」に変換
;上で大文字にした文字を配列MOJIに格納
;配列MOJIを1つ先に進める
;ループカウンタにしているGR2から1を引く
;ループカウンタがプラスであればLOOPへ
RPOP
RET
END
TEST START
RPUSH
OUT NAME,LEN ;OUT命令で「Enter your favorite name(推しの名前を入力)」を出力
IN OSHI,LENO ;IN命令で推しの名前を入力
OUT OSHI,LENO ;入力した名前を出力
LAD GR1,5 ;GR1に5を読み込む(GR1をループカウンタに使用)
;<<ここからループ>>
LOOP LD GR2,='0' ;GR2に'0'を読み込む
ADDL GR2,GR1 ;出力する為、文字コード'0'(0030)が入っているGR2にGR1を加算
ST GR2,DAYS ;ST命令でGR2の日数をDAYSに格納する
OUT DAYS,LEND ;OUT命令でDAYSに入っている日数を出力
SUBL GR1,=1 ;GR1をデクリメント
CPL GR1,=1 ;GR1の値と1を比較
JPL LOOP ;GR1が1より大きい間はループを繰り返す
;<<ループここまで>>
OUT DAY1,LEND1 ;OUT命令であと1日と出力
OUT MSG,LENM ;OUT命令で推しに「DAISUKI!!」と出力
RPOP
RET
NAME DC 'Enter your favorite name!';文字列「Enter your favorite name!」
LEN DC 25 ;その文字数
OSHI DS 256 ;推しの名前の領域を確保
LENO DS 256 ;推しの名前の文字数の領域を確保
DAYS DS 1 ;日数の領域を確保
LEND DC 7 ;日数の文字数
DAYCOUNT DC 'days.' ;出力する日数の単位
DAY1 DC '1-DAY!! TOMORROW!!' ;あと1日の文字列
LEND1 DC 18 ;あと1日の文字数
MSG DC 'DAISUKI!!' ;文字列「DAISUKI!!」
LENM DC 9 ;その文字数
END
TEST START
RPUSH
;OUT命令で「Enter your favorite name(推しの名前を入力)」を出力
;IN命令で推しの名前を入力
;入力した名前を出力
;GR1に5を読み込む(GR1をループカウンタに使用)
;<<ここからループ>>
;GR2に'0'を読み込む
;出力する為、文字コード'0'(0030)が入っているGR2にGR1を加算
;ST命令でGR2の日数をDAYSに格納する
;OUT命令でDAYSに入っている日数を出力
;GR1をデクリメント
;GR1の値と1を比較
;GR1が1より大きい間はループを繰り返す
;<<ループここまで>>
;OUT命令であと1日と出力
;OUT命令で推しに「DAISUKI!!」と出力
RPOP
RET
NAME DC 'Enter your favorite name!';文字列「Enter your favorite name!」
LEN DC 25 ;その文字数
OSHI DS 256 ;推しの名前の領域を確保
LENO DS 256 ;推しの名前の文字数の領域を確保
DAYS DS 1 ;日数の領域を確保
LEND DC 7 ;日数の文字数
DAYCOUNT DC 'days.' ;出力する日数の単位
DAY1 DC '1-DAY!! TOMORROW!!' ;あと1日の文字列
LEND1 DC 18 ;あと1日の文字数
MSG DC 'DAISUKI!!' ;文字列「DAISUKI!!」
LENM DC 9 ;その文字数
END