[[20100531142829]] 『A列が5の倍数の時に実行するマクロ』(natsu69) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『A列が5の倍数の時に実行するマクロ』(natsu69)

A列にIDが入力されているシートがあります。

このIDが5の倍数の時、B列に「処理1を実行する」と表示したいと考えています。

   A     B
 1   ID
 2    1
 3    2
 4    3
 5    4
 6    5        処理1を実行する
 7    6
 8    7
 9    8

―――――――――――――――――――――――

 Sub test1()

 Dim i As Integer
 Dim LastRow As Integer
 LastRow=Cells(Rows.Count, 1).End(xlUp).Row

 For i = 1 To LastRow

   If i Mod 5 = 0 Then
       Cells(i, 2) = "処理1を実行する"
   Else
       Cells(i, 2) = ""
   End If

 Next

 End Sub

―――――――――――――――――――――――

試しに上のようにコードを書いたらA列の値に関わらず行番号が5倍のときにB列に表示されてしまいました。

A列のIDの値を参照させるにはどうすればよいでしょうか。

OSはWindowsXP、バージョンはExcel2003または2007です。

よろしくお願いいたします。


 If i Mod 5 = 0 Then  は、i(行番号)に対して、
 5の倍数かどうか判定する構文です。

 A列の内容に対して判定するのだから、
 If Cells(i, 1).Value Mod 5 = 0 Then   では?
 
(純丸)(o^-')b

 純丸様、回答ありがとうございます。
 おっしゃるようにiは行番号でしたね。ご指摘ありがとうございます。
 それで構文を If Cells(i, 1).Value Mod 5 = 0 Then   のように変えてみましたが
 "型が一致しません"とエラーが出てしまいました。
 どうにか期待通りの処理を行うことはできないでしょうか。
 よろしくお願いいたします。

 (natsu69)

 もしかして、 For i = 2 To LastRow  ならOKですか?
 
(純丸)(o^-')b


 残念ながら For i = 2 To LastRow にしてもIDの分だけずれてしまいました。
 必ずしもIDが1から番号順に並んでいるとは限らないため、
 どうしてもA列の内容を反映させたいと思っています。
 よろしくお願いいたします。
 (natsu69)

IDの列をチェックしているのだから、
 If Cells(i, 2).Value Mod 5 = 0 Then
 では?

(WING)


 A列の内容を判断するのは
 If Cells(i, 1).Value Mod 5 = 0 Then
 です。

 If i Mod 5 = 0 Then
 の部分を上記に変えたうえで
 For i = 2 To LastRow
 にしていますか?

 1行目が見出しで「ID」という文字が入っていると文字を計算で使おうとしてエラーになります。
 ですので1行目は飛ばして2行目から処理をおこなうようにするわけです。
 (独覚)

 WING様、独覚様、回答ありがとうございます。

 独覚様のように実行しましたら期待通りの結果が得られました。
 また何故できなかったのかもよくわかるように説明もしてくださり、とても勉強になりました。

 最後に重ねて御礼を申し上げます。
 純丸様、WING様、独覚様、本当にありがとうございました。
 (natsu)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.