- ベストアンサー
繰り返しマクロについて
- 繰り返しマクロについて質問をさせていただきました。常に右側の列と左側の列のデータを比較して、右側の列のデータが多ければ「↑」マークを、同じなら「―」マークを、少なければ「↓」マークを表示させたいのです。
- マクロの参考として、以下のようなコードを提供いたします。このマクロは、D列からM列までの行に対して、右側の列とその直ぐ左側の列のデータを比較し、結果をN列に表示します。
- マクロを実行する際には、データを入力した後にマクロを実行してください。繰り返しマクロを使用することで、データ入力時に自動的に結果が表示されます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
Do Until Cells(i, j) <> ""を Do While Cells(i, j) <> ""に vl1 = Cells(i, j)を vl1 = Cells(i, j - 2)に修正してみてください。
その他の回答 (3)
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 イベントプロシージャを利用して、データ入力都度、N列に反映させる様に しては如何でしょうか。 対象シートタブ上で右クリック→コードの表示→サンプルコードの貼り付けてお試しください。 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("E7:M30")) Is Nothing Then Exit Sub For Each a In Target wk = "" If a <> "" Then If a.Offset(0, -1).Value <> "" Then Select Case a.Offset(0, -1) Case Is = a: wk = "-" Case Is < a: wk = "↑" Case Is > a: wk = "↓" End Select End If End If Cells(a.Row, "N") = wk Next End Sub
お礼
プライベートマクロをご教授いただきありがとうございます。大変便利ですね いちいちマクロボタンを押さなくても、データ入力すれば矢印が表示されていくのでとてもわかりやすいです。 本当にありがとうございました。
- nda23
- ベストアンサー率54% (777/1416)
考え方を整理するところから始めます。 比較するのは? D~M列までの最も右側とその1列前のセル ということで、以下のようになるでしょう。 Sub サンプル() Dim シート As Worksheet Dim 行 As Long Dim 列 As Long Dim 今週, 先週 Dim 記号 As String '★必ずターゲットを明示的にする Set シート = ThisWorkbook.Worksheets("売上記録") '★7行目から30行目まで処理する For 行 = 7 To 30 '★最も右側の列を求める For 列 = 13 To 4 Step -1 If シート.Cells(行, 列) <> "" Then Exit For Next '★記号を初期化する 記号 = "" '★最も右側の列が5以上の場合のみ処理する If 列 > 4 Then '★値を求める 今週 = シート.Cells(行, 列) 先週 = シート.Cells(行, 列 - 1) '★記号を設定する If 今週 > 先週 Then 記号 = "↑" If 今週 = 先週 Then 記号 = "→" If 今週 < 先週 Then 記号 = "↓" End If '★記号をN列に記録する シート.Cells(行, 14) = 記号 Next '★オマジナイ(やらなくてもよい) Set シート = Nothing End Sub 変数やプロシージャ名は日本語の方が分かり 易い。キーが打ち難いかも知れないが、後々を 考えると、日本語を使うべきと思います。 最後のステートメントはオブジェクトを解放する ものです。このあと処理が続くような場合は 早めにメモリを解放して処理効率を向上させる 働きがあります。サンプルでは「このあと」が ないので、省略してもかまいません。
お礼
日本語でのマクロを見るのは初めてでした。驚きです。 確かに入力がやっかいですが、私のようにマクロの素人にはすごくわかりやすくてありがたいです。 何度も見直しながら勉強させていただきます。 また、マクロ自体も、私の思っているとおりに働いてくれました。 ありがとうございました。
- mar00
- ベストアンサー率36% (158/430)
ANo.1です。 For i = 4 To 30のところは 7行目から30行目までということなので For i = 7 To 30 だと思います。
お礼
ありがとうございました。思い通りに働いてくれました。 これからもご指導よろしくお願いします。
お礼
ありがとうございました。 N列の項目まで矢印に変わってしまうで、ちょっと困っていましたが、それも解決しました。 本当にありがとうございました。