- ベストアンサー
エクセル2003のマクロでセルの値を変更する方法
- エクセル2003のマクロを使用して、セルの値を変更する方法について質問です。
- 質問者は、特定の条件に基づいてセルの値を変更するマクロを作成しましたが、予期しない結果が得られています。
- 質問者は、マクロのどこに問題があるのかわからないため、助けを求めています。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
テストした結果、問題はありませんよ。 多分、どこか勘違いしているような気がします。 可能性があるのは、 1.日付の値が違う もし文字ならスペースがどこかに入っていて、等しくならない。 2.日付は M列 なのに 実際はL列やN列になっている。 この可能性が一番高いと思われます。 プログラムはもうちょっとシンプルで、また列名をわかりやすくした方が良いと思います。 例えば Sub TEST() Dim I As Integer I = 2 Do While Cells(I, "A").Value <> "" If Cells(I, "M") = Cells(I + 1, "M") Then Cells(I + 1, "V") = Cells(I, "V") Else Cells(I + 1, "V") = Cells(I, "V") + 1 End If I = I + 1 Loop End Sub またデバッグして、途中の変数値を確認すれば問題点はすぐにわかると思います。 色々大変ですが、がんばって下さい。
その他の回答 (5)
- layy
- ベストアンサー率23% (292/1222)
書式はありますか。目に見える値と比較している値が違うこともなくはない。 原因追求のため、 jをi+1に変えることにより、iを基準にした動きだけ見たらよくなる。 ループ判定にValueつけているのに他はつけていないのも直す。 セル値をCELLSで判定するのでなく一旦変数にしてみる。
お礼
iを基準にした動きだけにしたほうが、確かにわかりやすいですね。 ありがとうございました。
- layy
- ベストアンサー率23% (292/1222)
見る限りA列に値があればM列に日付があり、 この日付ごとのカウントをV列へ求める、と見受けられます。 結果からすると If Cells(i, 13) = Cells(j, 13) Then Cells(j, 22) = Cells(i, 22) + 1 Else Cells(j, 22) = Cells(i, 22) End If 条件式が=になっていれば、カウンタ+1を1つ下のセルへ 条件式が=になっていないならば、カウンタ(そのまま)を1つ下のセルへ の動きになっていませんか?。 やりたいことと+1する条件が逆になっている???。 If Cells(i, 13) = Cells(j, 13) Then がホントに一致する状態の値になっているか見直し。
お礼
そうなんですよ。おっしゃる通り、やりたいことと条件が逆になってるような感じです。 他の方からも頂いてるように、最初の条件が本当に一致する状態か確認したいと思います。 ありがとうございました。
- noyuo
- ベストアンサー率39% (33/84)
私もマクロを勉強したいので、話に入れてもらいます。 値を代入するので、 cells(x,y).value としてはどうですか? また、直前の行を参照するなら、jを(i+1)としては?(特に i と j は区別しにくいので、jを混在させない方が見やすくないですか? いかがでしょうか? 結果を教えてくださいね。
お礼
なるほど。試してみます。結果はまた、お伝えします。
補足
構文自体は最初のままのものと変わりない結果でした。どうやら前後のマクロが影響しているようです。
- Dahak
- ベストアンサー率50% (3/6)
マクロには問題がないようなので、シートのデータを確認してください。 また、Do While行とIf行の間に以下のデバッグ文を追加してイミディエイトウィンドウでセル値を確認してください。 Debug.Print Cells(i, 13) & "⇔" & Cells(j, 13)
お礼
試してみます。ありがとうございます。
補足
イミティエイトウィンドウには以下のように表示されました。 2010531⇔ これってどういう意味でしょうか?
- NNori
- ベストアンサー率22% (377/1669)
うーん、そうなってるならそうでしょうねぇ。 なにを数えて以下のようにしたいのかを書かないとさっぱり分かりません。 セル(3,22)の値は"1" セル(4,22)の値は"2" セル(5,22)の値は"2"
補足
同じ日付をひとつのグループとして捉え、日付の早いものから,1,2,3・・・となるようにしたいのですが。
お礼
テスト結果、正常に作動しました。 どうやら、この構文の前後が影響しているようです。 この部分は問題ないことがわかりました。 ありがとうございました。