アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA初心者です。

数字を検証するマクロ作成でつまづいています。

別々のシート(wsSakiとwsMoto)の、2つのセルを比べてもしあっていたら(同じなら)、そのセルに色を付けるというマクロを考えたのですが、2つのセルの値は同じにもかかわらず、はじかれてしまいます。(最後まで動くのですが、望んでいる結果が出てこず、色がつきません)

参照するセルも、セルに入っている値も、あっていることは確認しました。
とすると、私が書いたマクロがおかしいはずなのですが
どこがおかしいのかわかりません。

どなたか下記のマクロのおかしいところを指摘していただけないでしょうか?
------------------------------------------
Dim wsSaki As Worksheet
Dim wsMoto As Worksheet
Dim kyoku As Long
Dim retsu As Long
Dim gyoMoto As Long

For kyoku = 1 To 5
   Set wsSaki = Worksheets(kyoku)
   Set wsMoto = Worksheets("実績")
   gyoMoto = 15

   For retsu = 3 To 30
    If wsSaki.Cells(19, retsu).Value = wsMoto.Cells(gyoMoto, retsu).Value Then
     wsSaki.Cells(19, retsu).Interior.ColorIndex = 15
    End If
   Next

   gyoMoto = gyoMoto + 1

Next
-------------------------------------------

すみません、宜しくお願いします。

A 回答 (2件)

for...


   gyoMoto = 15 ’←こいつが原因では?
・・・
gyoMoto = gyoMoto+1
next

毎回初期化(=15)しています。
15~20の変化を与えたいのであれば
for の前に初期値を設定する必要があります。

※for next 内の Set(毎回同じ)もいただけません。

要するに
gyoMoto = 15 
For kyoku = 1 To 5 ’←ここにforを持ってくる
・・・
gyoMoto = gyoMoto+1
next

にすればよいのではないですか?
あるいは
For kyoku = 0 To 4
gyoMoto = 15+kyoku  
next

あとで、変更しやすい方を選んでください。
    • good
    • 0
この回答へのお礼

早速の助言をありがとうございます。
自分の記述の盲点がようわかりました。

少なくとも初期化を忘れていました。

i = i + 1

の記述では、常に初期化を頭に入れておくべきですね。
ありがとうございます。

取り急ぎ御礼まで。

お礼日時:2017/11/10 09:17

こんばんは!



やりたいコトがいまいちよく判らないのですが・・・

>gyoMoto = gyoMoto + 1
のように For~Next の中に入れているというコトは
Sheet順が増える毎に参照元の行が1行ずれる!と解釈しました。

あくまで憶測ですが、「実績」SheetはSheet見出しの6番目にあり、
Sheet見出しの一番左から5番目までのSheetを検索し、
① Sheet見出しの一番左Sheetは「実績」Sheetの15行目のC~AD列とそのSheetの19行目
② Sheet見出しの二番目Sheetは「実績」Sheetの16行目のC~AD列とそのSheetの19行目
 ・
 ・
 ・
と5番目のSheetまで順次比較し、同じデータであれば1~5番目Sheetの19行目セルを塗りつぶす!
というコトだとします。

他人様がお考えになったコードに手を付けるのは好きではありませんが、
極力元のコードに沿ってやってみました。

Dim wsSaki As Worksheet
Dim wsMoto As Worksheet
Dim kyoku As Long
Dim retsu As Long
Dim gyoMoto As Long

Set wsMoto = Worksheets("実績")
gyoMoto = 14
For kyoku = 1 To 5
Set wsSaki = Worksheets(kyoku)
gyoMoto = gyoMoto + 1
For retsu = 3 To 30
If wsSaki.Cells(19, retsu).Value = wsMoto.Cells(gyoMoto, retsu).Value Then
wsSaki.Cells(19, retsu).Interior.ColorIndex = 15
Else
wsSaki.Cells(19, retsu).Interior.ColorIndex = xlNone '//←追加した方が良いかも・・・★//
End If
Next retsu
Next kyoku

こんな感じをお望みなのでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

早速の返信をありがとうございます。

gyoMoto = 15

を記入する位置だったのですね。
くわえてif構文の後に
「色付けをしない」と敢えて記述するという事も参考になりました。

早速試してみます。

取り急ぎ御礼まで。

お礼日時:2017/11/10 09:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!