今回のテーマは繰返し For ~ Next 文です。
 
変数をセルの位置やワークシートの数、配列などと連動させて、作業を繰り返したい時に使います。
 
 
例えば、変数nを1~10の範囲で+2ずつ動かす (n=1,3,5,7,9) という場合、
 
For n = 1 to 10 Step 2
    ~
Next n
 
と表現できます。
Stepを省略すると、+1ずつ変数が動きます。
 
 
まずはセルの位置と連動させて、縦に動かしてみましょう。
そしてStepを入れて数字を変えたり、色々試してみましょう。
 
 
Sub 繰返し ()
 
  Dim 縦 As Integer
 
  For 縦 = 2 to 10
    Cells(縦,1)=縦
  Next 縦
 
End Sub
 
 
 
 
次に、セルを横方向へ繰返し操作します。
 
 
Sub 繰返し ()
 
  Dim 横 As Integer
 
  For 横 = 1 to 10 Step 3
    Cells(2,横)=横
  Next 横
 
End Sub
 
 
 
いかがですか?
どう入力すると、 どのセルを操作できるか、イメージが出来たでしょうか?
 
 
もし分からなくなったら、変数に一つずつ代入してみてください。
 
For~Nextの間の文が複雑になるほど、この確認の作業も根気が要りますが、 エラーになった時はよくやる工程なので、今のうちに練習して慣れておきましょう。
 
 
 
 
少しレベルアップして、 上記2つを組み合わせると、 2次元で繰返し操作できます。
 
Sub 繰返し ()
 
  Dim 縦 As Integer
  Dim 横 As Integer
 
  For 横= 1 to 10
  For 縦 = 1 to 10
    Cells(縦,横)=縦*横
  Next 縦
  Next 横
 
End Sub
 
 
 
挙動を図で表すと、
 
 
 
 
また、内側と外側のFor ~Nextを入れ替えると挙動が変わります。
 
Sub 繰返し ()
 
  Dim 縦 As Integer
  Dim 横 As Integer
 
  For 縦 = 1 to 10
  For 横=1 to 10
    Cells(縦,横)=縦*横
  Next 横
  Next 縦
 
End Sub
 
 
 
適宜最適な方を使ってください。
この2重ループは高頻度で使う機会があると思いますので、 是非是非マスターしたいところです。
 
 
 
 
 
最後に一つ注意点があります。 
 
たいていの操作は上⇔下、左右、 どの方向でも問題ありませんが、 For〜 Nextの中にDeleteが入っているときは、上←下、 左←右の方向に動かしましょう。 
そうしないと、飛ばしてしまう行列が出てきます。
 
 
例えば、下記の場合、1行目を削除すると2行目が1行目に繰り上がり、変数は+1されるので、奇数行だけ削除されることになります。
 
 
Sub 行削除()

    Dim 縦 As Integer

    For 縦 = 1 To 10
        Rows(縦).Delete
    Next 縦

End Sub
 
 
::::::::::::::::::::::::::::::::::::::
 
例題
 
変数の回で出した例です。 
For ~ Next文を使って解いてみましょう。
 
毎月りんごを買っています。
4月は1個190円のりんごを5個、5月は1個169円のりんごを8個、6月は1個211円のりんごを3個買いました。 
毎月の経費はいくらでしょう? 
 
ただし、りんごの個数と単価は下記のようにあらかじめワークシートに入力されているものとします。
 
 
 
 
::::::::::::::::::::::::::::::::::::::
 
 
回答例
 
Sub 例題()

    Dim 横 As Integer

    For 横 = 2 To 4
        Cells(4, 横) = Cells(2, 横) * Cells(3, 横)
    Next 横

End Sub
 
 
::::::::::::::::::::::::::::::::::::::
 
 
いかがでしたか?
 
今回はFor Nextの変数をセルの位置に使いましたが、シート番号等に使えば、グッと使える幅が広がります。
 
今後の回でも、多用していきますので、徐々に慣れていきましょう。
 
今回は変数について勉強していきましょう電球
 
変数は変化する数字や文字列を一時的に入れておくものです。
 
 
例えば、
 
毎月りんごを買っていますりんご
4月は1個190円のりんごを5個、5月は1個169円のりんごを8個、6月は1個211円のりんごを3個買いました。
毎月の経費はいくらでしょう?
 
といった場合、
 
個数=△△
単価=○○
経費=個数 * 単価
 
として、△△と○○を変化させていくイメージです。
個数・単価・経費が変数です。
 
 
 
変数を使用する時には、変数の名前とデータ型 (文字列・整数・少数など) を宣言します。 
   Dim 変数 As データ型
 
 
上記の例でいうと、
 
Dim 個数 As Integer
Dim 単価 As Integer
Dim 経費 As Integer
 
となります。
 
 
宣言しなくてもVariant型 (何にでも使える) とみなされ、 使えますが、
宣言すると見返したときに内容がより分かりやすくなりますし、誤ったデータが入ったときに気づきやすいので、少なくとも慣れるまでは宣言することをお勧めします。
 
 
 
よく使うデータ型はこちらです。
 
Integer:整数 (-32,768~32,767)
Long:Integerより大きい整数 (-2,147,483,648 ~ 2,147,483,647)
Double:小数点
String:文字列
Variant:なんでも使えます
 
 
オブジェクトも変数に入れられます。
Workbook:ワークブック
Worksheet:ワークシート
Range:セル、セル範囲
 
 
 
変数に使える文字は、
先頭は文字列。 2文字目以降は文字列、数字、「_」が使えます。 
日本語もアルファベットも使えます。
スペースは使用不可。
メソッドや関数等に使われている単語は使用不可です。
 
 
 
先ほど、 オブジェクトも変数に代入できると書きましたが、 代入の仕方が少し異なります。
 
Dim R As Range
Set R=ActiveCell
 
Setを忘れないよう注意しましょう。
 
ActiveCellは今選択されているセルのことです。 
ActiveCellやよく使う範囲のセルを変数に代入しておくと便利です。
 
ワークシート、ワークブックを変数に入れる場合も同様にSetで代入します。
詳しくはワークシート、 ワークブックの指定の仕方で触れます。
 
 
::::::::::::::::::::::::::::::::::::::
 
 
例。括弧()内の変数へ値を代入し、セルに入力してみましょう。
 
①5.4  (Dim 整数 As Integer, Dim 少数 As Double) 
②5.5  (Dim 整数 As Integer, Dim 少数 As Double)
 
③“文字”  (Dim 文字列 As String)
 
④B7を変数セルに代入し、"セル” を入力 (Dim セル As Range)
 
 
 
おおよそこのようなコードになるかと思います。
 
Sub 変数()

Dim 少数 As Double
Dim 整数 As Integer

少数 = 5.4    '例①
整数 = 少数
Cells(2, 2) = 少数
Cells(3, 2) = 整数

少数 = 5.5    '例②
整数 = 少数
Cells(2, 3) = 少数
Cells(3, 3) = 整数

Dim 文字列 As String   '例③
文字列 = "文字"
Cells(5, 2) = 文字列

Dim セル As Range    '例④
Set セル = Cells(7, 2)
セル = "セル"

End Sub
 
 
 
結果を見てみると、少数は整数のデータ型に入れると四捨五入された整数になることが分かります。
データ型を選ぶときにはこのような点も考慮して選びましょう!!
 
 
次回は繰り返し文についてです。
 


 

今回は事務作業でよく使うであろうメソッド(操作)を5つピックアップします電球

 

① Delete

② Copy Destination:=(Range)

③ Copy + Insert

④ Copy + PasteSpecial

⑤ Replace

 

 

 

① Delete

行や列を削除する時に使います。 

 

   例:Columns (2).Delete

 

 

 

② Copy Destination:=(Range)

指定された範囲のセルをコピーした後、

貼付け先(左上端にあたる) のセルをDestinationで指定します。

 

  例:Range("A1:E6").Copy Destination:=Range("A7")

 

 

 

③Copy + Insert

Insert単独では空白の行・列等の挿入となり、

Copy後のInsertでは「コピーしたセルの挿入」ができます。

 

  例:Columns(3).Insert

 

  例:Columns(1).Copy
        Columns(5).Insert

 

 

 

④ Copy + PasteSpecial

いわゆる 「形式を選択して貼り付け」です。 

指定された範囲のセルをコピーした後、

数式、 値、 書式など、 Pasteで何を貼り付けるか指定します。

 

 例:Range("A1:D1").Copy

   Range("A4").PasteSpecial Paste:=xlPasteFormulas  ’数式の貼付け

   Range("A5").PasteSpecial Paste:=xlPasteValues   ’値の貼付け

※図では、数式と定数が分かりやすいように、あらかじめ「数式の表示」をしています。

 

 

 

⑤ Replace

指定された範囲のセルの文字列を置換します。 

青字部分だけでも実行できますが、 引数を省略すると前回置換した時の条件が引き継がれるので、 指定した方が無難でしょう。

 

LookAtは完全一致か (xlWhole) 部分一致か (xlPart) 選びます。

MatchCaseは大文字と小文字を区別するか(True)、 区別しないか(False)選びます。

MatchByteは全角と半角を区別するか(True)、区別しないか(False)選びます。

 

(Range).Replace What:="置換前", Replacement:="置換後", LookAt:=xlPart, MatchCase:=True, MatchByte:=True

 

  例:Range("A1:A4").Replace What:="ABC", Replacement:="XXX",     LookAt:=xlWhole, MatchCase:=True, MatchByte:=False

 

 

以上、5つのメソッドでした。

今後の回でも出てくると思いますので、使いながら覚えていきましょう。

 

::::::::::::::::::::::::::::::::::::::

 

 

例題①

上記メソッド①~④を使って、左の表から右の表へ変更するようマクロを作ってみましょう。

A列の王林の位置を変えました。ふじは2つになってますね。

D列は数式から数値に変わっています。

 

(図では数式と数値どちらか分かりやすいように「数式の表示」をしていますが、わざわざ変える必要はありません。)

 

 

 

 

例題②

上記メソッド⑤を使って、左の表から右の表へ変更するようマクロを作ってみましょう。

A列は「ほん」が「かん」になり、B列はスペースがなくなってます。

 

 
 
::::::::::::::::::::::::::::::::::::::
 
回答例
 
 
Sub 例題①()

    Rows(3).Copy    ’「王林」コピーしたセルを貼付け
    Rows(5).Insert
    Rows(3).Delete

    Rows(4).Insert    ’「ふじ」を挿入
    Rows(2).Copy Destination:=Rows(4)

    Columns(4).Copy   ’「金額」列を値の貼付け
    Columns(4).PasteSpecial Paste:=xlPasteValues
    
End Sub



Sub 例題②()

    Columns(1).Replace what:="ほん", Replacement:="かん", LookAt:=xlPart, MatchCase:=True, MatchByte:=True
 ’「ほん」→「かん」置換

    Columns(2).Replace what:=" ", Replacement:="", LookAt:=xlPart, MatchCase:=True, MatchByte:=False
 ’スペースを置換

End Sub
 
 
::::::::::::::::::::::::::::::::::::::