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

・loop終了後のセルの一個右から同様のloopのプログラムを組むのが目的です。
・データはA列にランダムに数字が入っているものとします。
・条件式としては基準値より小さな数字が一個下のセルにあったら↓を表示して、さらに下に行くという風にして、基準よりも多くなったところでloopがストップする設定です。
・困っているところをうまく表現できてないかも知れませんが、よろしくお願いします。
---------------------------

Sub 比較()
Dim i As Integer
Dim j As Integer
Cells(1, 2).Select
ActiveCell.FormulaR1C1 = "=IF(RC1>R1C1,""→"",""↓"")"
i = 1
Do While Cells(i, 2).Value <> ""
If Cells(i, 2).Value = "↓" Then
Cells(1 + i, 2).Select
ActiveCell.FormulaR1C1 = "=IF(RC1>R1C1,""→"",""↓"")"
End If
i = i + 1
Loop
Cells(i - 1, 3).Select
ActiveCell.FormulaR1C1 = "=IF(RC1>R" & i - 1 & "C1,""→"",""↓"")"
j = 1
Do While Cells(i - 2 + j, 3).Value <> ""
If Cells(i - 2 + j, 3).Value = "↓" Then
Cells(i - 1 + j, 3).Select
ActiveCell.FormulaR1C1 = "=IF(RC1>R" & i - 1 & "C1,""→"",""↓"")"
End If
j = j + 1
Loop
End Sub

A 回答 (3件)

'こんな感じでどうでやんすか


Sub 比較改()
Dim i As Integer
Dim j As Integer
Dim k As Integer

i = 2
j = 2
k = 1
Cells(k, j).FormulaR1C1 = "=IF(RC1>R" & k & "C1,""→"",""↓"")"
Do While Cells(i, 1).Value <> ""
If Cells(i, 1).Value > Cells(k, 1) Then
Cells(i, j).FormulaR1C1 = "=IF(RC1>R" & k & "C1,""→"",""↓"")"
k = i
j = j + 1
End If
Cells(i, j).FormulaR1C1 = "=IF(RC1>R" & k & "C1,""→"",""↓"")"
i = i + 1
Loop
End Sub
    • good
    • 0
この回答へのお礼

期待通りのプログラムです。どうもありがとうございました。内容まで理解できるように、じっくり見させてもらいます。

お礼日時:2006/06/07 06:54

マクロの記録から、VBAの勉強に入ったのでしょうが


select
active
は無駄です。Cells(i,j)で済むはず。マクロの改良点として、本にも良く書いてある点です。
文字(値、↓)をセットするのに関数式をセットするのはなぜ。
B列セルに関数式を作って複写でよいのでは。
このVBAは即反応型ではないですが、関数の方が即反応型のように思うが。

この回答への補足

おっしゃるとおりマクロの記録からVBAに入りました。
select、activeが不要なのは参考にさせていただきます。

本プログラムでやりたいことは

(1)前提:A列に数字がランダムに入っているとして
(2)cell(1,1)よりも大きい数字がある行でB列の条件式のコピーがストップして"→"マークを表示して
(3)ストップした行を基準に列をひとつ右にずれて同様に基準の行の値より大きな値が出るまで条件式をコピーする
(4)同様の作業を複数続ける

以上のような流れのプログラムにしたいと考えています。また条件式については質問する上で簡略化して書いています。

説明べたですいませんが、ご協力ください。
よろしくお願いします。

補足日時:2006/06/06 22:02
    • good
    • 0

一応動いているような感じですけど、


困っているところは、大きい値が無いときに止まらないということですか?
それとも、2回でなく、A列のデータのある限り右側へ処理を続けたいということですか?
後、矢印を入れるのが目的なら、式を入力する必要は無いように思いますが・

この回答への補足

>2回でなく、A列のデータのある限り右側へ処理を続けたいということですか?

その通りです。

>後、矢印を入れるのが目的なら、式を入力する必要は無いように思いますが・

質問のために矢印に簡略化していますが
実際はそこに計算式を含んだ条件式を
入れます。

どうぞよろしくお願いします。

補足日時:2006/06/06 22:19
    • good
    • 0

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