Excel(エクセル)の操作が楽になる方法と便利な使い方を紹介しています。


menu

Excel(エクセル)が楽で便利になる方法 [あまおとろぐ]

行や列の連続したセルを繰り返して処理したい!Excelマクロ(VBA)のFor~Next文

  • このエントリーをはてなブックマークに追加
[ この記事の内容は Excel2013 でも使えます ]
 
Excelのデータは、行と列のセルが集まってできています。
 
例えば、連続したセルの値を取得する時、
var 1gyoume = Cells(1,1).Value   ' 1行目のセルの値
var 2gyoume = Cells(2,1).Value   ' 2行目のセルの値
var 3gyoume = Cells(3,1).Value   ' 3行目のセルの値
のように一つ一つ指定しても良いですが、たくさんの行がある時は大変です。
 
面倒くさいですし。
 
そんな時、For~Next文を使うと繰り返し処理が簡単にできますよ。
 
 

スポンサーリンク

For~Next文の使い方

 
[書式]
For カウント用の変数開始番号 to 終了番号
   [繰り返したい内容を書く]
Next
 
 
カウント用の変数は、カウントするための変数です。
そのままですね。
適当に数字型の変数を定義しておけば問題ありません。
 
例えばこんな感じ。
Dim gyou As Integer
 
gyouという変数を数字型(Integer)で宣言しています。
 
プログラムの本などでは、i や j や k などの文字が使われることが多いようですが、
gyou や gyou_no など、わかりやすい文字で良いと思います。
 
 
開始番号終了番号は、繰り返し処理を行う開始と終了の番号です。
 
例えば、
For gyou = 1 to 5 とすると、1から5までで5回、
For gyou = 1 to 10 とすると、1から10までで10回、
For gyou = 3 to 8 とすると、3から8までで6回、
繰り返します。
 
繰り返す時、カウント用の変数にはその時の番号が入っています。
上の例であれば、
For gyou = 1 to 5 の場合、gyouには「1, 2, 3, 4, 5」、
For gyou = 3 to 8 の場合、gyouには「3, 4, 5, 6, 7, 8」
が入ります。
 
 
このカウント用の変数をうまく使うことで、
Excelの行や列の値を取得したり設定したりできるのです。
 
 

スポンサーリンク

ます

ちなみにですが、終了番号の後に
STEP 間隔を開けたい番号
とすると、
1, 2, 3・・・ではなく、1, 3, 5・・・のように番号を飛ばすこともできます。
 
例えば、
For gyou = 1 to 10 step 2 の場合、gyouには「1, 3, 5, 7, 9」
For gyou = 0 to 10 step 3 の場合、gyouには「0, 3, 6, 9」
が入ります。
 
 
STEPを省略すると、「STEP 1」と同じ意味になります。
 
ですので、普通は指定しなくても大丈夫ですよ。
 
 

For~Next文を使ったサンプルプログラム

以下のような表があります。
 
名前毎に点数が入っていますね。
 
352-1.png
 
3列目(C列)に、A列とB列の文字を使って
 ○○さんはXX点です
という文字を設定してみましょう。
 
 
このプログラムを実行します。
実行方法はこの記事を参考にしてくださいね。
 
Function test2()
 
    '変数を定義する
    Dim gyou As Integer     '行の番号
    
    '3~7行目を見ていきます
    For gyou = 3 To 7
    
        '各行の3列目(C列)に「○○さんはXX点です」という文字を設定します
        Cells(gyou, 3).Value = Cells(gyou, 1).Value & "は" & Cells(gyou, 2).Value & "点です"
    
    Next
 
End Function
 
 
簡単に説明します。
 
gyou変数には、3, 4, 5, 6, 7の番号が入ります。
 
gyou変数が3の場合、
Cells(gyou, 1).Value は Cells(3, 1).Value となり、3行目で1列目(A列)のセルの値(Aさん)が取得できます。
同じく、
Cells(gyou, 2).Value は Cells(3, 2).Value となり、3行目で2列目(B列)のセルの値(60)が取得できます。
 
 
これらの文字をつなげると、
Cells(gyou, 1).Value & “は” & Cells(gyou, 2).Value & “点です”
“Aさん” & “は” & “60” & “点です”
になります。
 
 
その結果、”Aさんは60点です”という文字が Cells(gyou, 3) に設定されます。
Cells(gyou, 3)は、Cells(3, 3) ですので、3行目の3列目(C列)ですね。
 
以降、gyou変数が 4, 5, 6, 7 の場合も同じようになります。
 
 
実行結果です。
 
352-2.png
 
結果列に表示されました!
 
 

(おまけ)Forの中にForを書くと、行と列が一度に扱える!

先ほどの例では、一つのFor文で行方向に値を取得しました。
Excelには「列」もありますので、同時に扱えると便利そうです。
 
そんな時は、Forの中にForをもう一つ書きます。
 
 
先ほどの表を少し変更して、点数を3列にしてみました。
算数・理科・社会ごとに点数が入ってますね。
 
352-3.png
 
3列目の「結果」に、3科目の合計点数を表示してみましょう。
 
 
このプログラムを実行します。
 
Function test3()
 
    '変数を定義する
    Dim gyou As Integer     '行の番号
    Dim retsu As Integer    '列の番号
    Dim goukei As Integer   '合計
    
    '合計を初期化する
    hyouji = 0
    
    '3~7行目を見ていきます
    For gyou = 3 To 7
    
        'ある行で「2~4列目」を見ていきます
        For retsu = 2 To 4
        
            'ある行の「2~4列目の数字」を足します。
            goukei = goukei + Cells(gyou, retsu).Value
            
        Next
        
        '各行の5列目(E列)に「○○さんは合計XX点です」という文字を設定します
        Cells(gyou, 5).Value = Cells(gyou, 1).Value & "は合計" & goukei & "点です"
    
        '次の行で使うために合計を0にしておく
        goukei = 0
        
    Next
 
End Function
 
 
簡単に説明します。
 
赤い部分で「2~4列目」の値を取得しています。
ここ、Forの中にForが入ってますね。
 
ここで大事なことを。
「カウント用の変数」は、Forごとに別なものを使うのがポイントです!
 
今回は、列の値を取得したいので、retsu変数を追加してます。
 
 
gyou変数には、3, 4, 5, 6, 7 が入ります。
 
例えば、gyou変数が3の時、
もう一つのFor文によって、retsu変数は 2, 3, 4 という値が入っていきますので、
Cells(gyou, retsu).Value と書いておけば、
Cells(3, 2).Value は 算数の点数である 60、
Cells(3, 3).Value は 理科の点数である 80、 
Cells(3, 4).Value は 社会の点数である 90
が入ります。
 
これらを合計すると 230 となります。
 
以降、gyou変数が 4, 5, 6, 7 の場合も同じようになります。
 
 
実行結果です。
 
352-4.png
 
行と列の値をうまく使って表示できてますね。
 
 

まとめ

いかがでしたでしょうか?
 
For~Next文を使うと、Excelで行と列の値をうまく扱うことができます。
 
Forを2つ使うのでちょっと頭が混乱しがちですが、
落ち着いてじっくり考えると大丈夫ですよ。
 
使いこなせるととても便利です!
 
一度、お試しくださいね。
 
スポンサーリンク

  • このエントリーをはてなブックマークに追加

コメント

  • トラックバックは利用できません。

  • コメント (0)

  1. この記事へのコメントはありません。

だーしゅ
IT関係のお仕事してます。
Excel大好き。

[当ブログについて]

最近のコメント

  • だーしゅ { abcさん、コメントありがとうございます。 この記事で書いている「コピー」は、 ------------------------------------ 既に設定されている「セルやフォントの色」を Excelの「塗りつぶしの色」や「フォントの色」機能に設定する ------------------------------------ という意味で使っています。 なので、コピーした色をはりつけるときは、 リボン上にある「塗りつぶしの色」や「フォントの色」アイコンをクリックすれば良いですよ。 一度お試しくださいね。 } – 3月 26, 7:47 AM
  • abc { コピーした色を張り付ける方法がわからない。 } – 3月 26, 7:17 AM
  • だーしゅ { YUUKO26さん、コメントありがとうございます。 求めていた計算式があって良かったです。 >こちらの式でいう【田】の部分の項目が2つ存在する場合 ですが、COUNTIFS関数を使うと良いです。 COUNTIF関数に「S」が付いただけですが、 複数の項目を扱うことができます。 例えば、 =COUNTIFS(A4,"*田*", A4,"*子*")>0 とすると、「田」と「子」がある場合、TRUEになります。 これを使って、該当がなければ空欄、であれば、 = IF( COUNTIFS(A4,"*田*", A4,"*子*")>0, "○","" ) という感じですね。 式が分かりにくくなった時は、 一度、分解してみると良いですね。 } – 11月 14, 2:00 PM
  • YUUKO26 { 初めまして。まさに求めていた計算式でしたので、感動のあまりコメントさせていただきました! 本当にありがとうございます^^ ちなみに、こちらの式ですが、 こちらの式でいう【田】の部分の項目が2つ存在する場合、どのような式にすればよろしいでしょうか? 詳しく例を申し上げますと、ある列に田と子がある場合は○と示し、該当がなければ空欄としたい。。というかんじです。もしお教えいただけるようであればよろしくお願いします>< } – 11月 14, 8:57 AM
  • だーしゅ { 匿名さん、コメントありがとうございます。 解消されたようで良かったです。 } – 9月 12, 3:45 PM
  • { 長年の疑問が解消しました。ありがとうございます。 } – 9月 05, 5:00 AM