• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル2003でのマクロで質問です。)

エクセル2003のマクロでセルの値を変更する方法

このQ&Aのポイント
  • エクセル2003のマクロを使用して、セルの値を変更する方法について質問です。
  • 質問者は、特定の条件に基づいてセルの値を変更するマクロを作成しましたが、予期しない結果が得られています。
  • 質問者は、マクロのどこに問題があるのかわからないため、助けを求めています。

質問者が選んだベストアンサー

  • ベストアンサー
  • jcctaira
  • ベストアンサー率58% (119/204)
回答No.5

テストした結果、問題はありませんよ。 多分、どこか勘違いしているような気がします。 可能性があるのは、 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 またデバッグして、途中の変数値を確認すれば問題点はすぐにわかると思います。 色々大変ですが、がんばって下さい。

sou-kana
質問者

お礼

テスト結果、正常に作動しました。 どうやら、この構文の前後が影響しているようです。 この部分は問題ないことがわかりました。 ありがとうございました。

その他の回答 (5)

  • layy
  • ベストアンサー率23% (292/1222)
回答No.6

書式はありますか。目に見える値と比較している値が違うこともなくはない。 原因追求のため、 jをi+1に変えることにより、iを基準にした動きだけ見たらよくなる。 ループ判定にValueつけているのに他はつけていないのも直す。 セル値をCELLSで判定するのでなく一旦変数にしてみる。

sou-kana
質問者

お礼

iを基準にした動きだけにしたほうが、確かにわかりやすいですね。 ありがとうございました。

  • layy
  • ベストアンサー率23% (292/1222)
回答No.4

見る限り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 がホントに一致する状態の値になっているか見直し。

sou-kana
質問者

お礼

そうなんですよ。おっしゃる通り、やりたいことと条件が逆になってるような感じです。 他の方からも頂いてるように、最初の条件が本当に一致する状態か確認したいと思います。 ありがとうございました。

  • noyuo
  • ベストアンサー率39% (33/84)
回答No.3

私もマクロを勉強したいので、話に入れてもらいます。 値を代入するので、 cells(x,y).value としてはどうですか? また、直前の行を参照するなら、jを(i+1)としては?(特に i と j は区別しにくいので、jを混在させない方が見やすくないですか? いかがでしょうか? 結果を教えてくださいね。

sou-kana
質問者

お礼

なるほど。試してみます。結果はまた、お伝えします。

sou-kana
質問者

補足

構文自体は最初のままのものと変わりない結果でした。どうやら前後のマクロが影響しているようです。

  • Dahak
  • ベストアンサー率50% (3/6)
回答No.2

マクロには問題がないようなので、シートのデータを確認してください。 また、Do While行とIf行の間に以下のデバッグ文を追加してイミディエイトウィンドウでセル値を確認してください。 Debug.Print Cells(i, 13) & "⇔" & Cells(j, 13)

sou-kana
質問者

お礼

試してみます。ありがとうございます。

sou-kana
質問者

補足

イミティエイトウィンドウには以下のように表示されました。 2010531⇔ これってどういう意味でしょうか?

  • NNori
  • ベストアンサー率22% (377/1669)
回答No.1

うーん、そうなってるならそうでしょうねぇ。 なにを数えて以下のようにしたいのかを書かないとさっぱり分かりません。 セル(3,22)の値は"1" セル(4,22)の値は"2" セル(5,22)の値は"2"

sou-kana
質問者

補足

同じ日付をひとつのグループとして捉え、日付の早いものから,1,2,3・・・となるようにしたいのですが。

関連するQ&A