06For Nextループその2 ExcelVBAで密です!ソーシャルディスタンス!!

新型コロナが2類から5類に引き下がり、イベントでは「密です!」状態ですね。
ExcelVBAで単純ながら、密ですゲームみたいなものを作ってみました。

ボタンを2つ作ります。
1つ目のボタンは「密です!!」、2つ目のボタンは「ソーシャルディスタンス」です。
ボタンを押したらプログラムが動くようにします。

先に、これからコーディングするプログラムの実行結果の画面を掲載します。
ボタン「密です!!」を押すと、

このように「人」が密集します。
3密ですね。

では、ボタン「ソーシャルディスタンス」を押します。

で、このように感覚を空けました。

各ボタンについて解説します。

●「密です!!」ボタン
Range(“A1:K11”) = “人”で、セルA1からK11までの全てのセルに、「人」という文字を入れます。

●「ソーシャルディスタンス」ボタン
一旦シートを、Cells.Clear でクリアをしてから、Range(“A1”).Select で、ホームポジションのA1を選択して、この位置を基準をして、2行2列置きに「人」を入れて間隔を保ちます。

カウンタ変数の行をi、列をjにします。
(ここで、カウンタ変数って何? ループまだちょっと自信がないよ!と言う方は前回の記事の、はじめてのFor Nextループ をご覧下さい)

カウンタ変数iは外側のループで行(縦)を操作、jは内側のループで列(横)を操作します。

外側のループを固定して、内側のForループでjを2つずつ増やし、内側のループを抜けてから外側のループでiを2つずつ増やします。

コードは以下のようになります。

● ボタン「密です!!」に登録するコード

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

コードが書けたらボタンを作成します。
ボタンは、開発タブから作れます。

Windowsの場合は開発タブは、任意のタブを右クリックして「リボンのユーザー設定」の右側のメニューからチェックで表示できます。

または、ファイル → オプション → リボンのカスタマイズ → リボンの設定 から表示する方法もあります。

Macの場合は、Excel → 環境設定 → 表示 → 一番下あたりの開発タブにチェックを入れます。

以下の様に感じにシートを用意して、ボタンを2つ作ります。

iとjの挙動が分かり辛い場合は、外側のループのiをコメントアウトして、i=0で固定して、内側のループのみ動かしてみると少し分かりやすくなるかも知れません。

 '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

すると、(i,j)は(0,0)、(0,2)、(0,4)・・・(0,10)とセルを移動するので、この様な実行結果になります。

また、iを2にすると、
(i,j)は、(2,0)、(2,2)、(2,4)・・・(2,10)と移動するので、

この様になります。

二重ループは慣れるまでちょっと時間がかかりましたので、私は外側のループをコメントアウトして固定をしてみた所、だいぶ解きほぐれて来ました。

二重ループに悩まれていらっしゃる方の一助になりましたら幸いでございます。

皆さま、大変お疲れ様でした。
この記事最後のブレイクタイムPhotoは・・・

立川市の国営昭和記念公園で撮影した小ぶりのひまわり、サンフィニティです。

仕事や勉強のリフレッシュに、趣味で写真を撮っておりますので、宜しかったら フォトストック写真ACさん の投稿もご覧頂けますと、大変嬉しい限りでございます!!

こちら、無料の「ダウンロードユーザー」に登録して頂けると、無料で写真のダウンロードが可能になります。

※ 先にGoogleアカウントを作成して頂くと、登録が ラク です♪

写真素材素材【写真AC】

 

最後までご精読、誠にありがとうございました!!

自己紹介


VBA自作サンプルプログラム集へ戻る

取りあえず事務職で働きたいから手っ取り早くExcel教えてくれ


MOSなどの資格試験対策

投稿者: nekosiestr

プログラミング学習中のロスジェネ(就職氷河期世代)の発達障害者です。 宜しくお願いします。 趣味で写真を撮っています。 プログラミングは、GAS/HTML/CSS/JavaScript/jQuery/PHP、 発達障害は、自閉症スペクトラムASD/ADHD、その他双極性障害やHSP(5人に1人の繊細さん)などの生きづらさを抱えておりますが、それでも楽しく生きて行きたいです!! 写真は、以前はコンパクトデジカメ、現在は、OLYMPUSミラーレス一眼を使っています。