
・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
No.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
No.2
- 回答日時:
マクロの記録から、VBAの勉強に入ったのでしょうが
select
active
は無駄です。Cells(i,j)で済むはず。マクロの改良点として、本にも良く書いてある点です。
文字(値、↓)をセットするのに関数式をセットするのはなぜ。
B列セルに関数式を作って複写でよいのでは。
このVBAは即反応型ではないですが、関数の方が即反応型のように思うが。
この回答への補足
おっしゃるとおりマクロの記録からVBAに入りました。
select、activeが不要なのは参考にさせていただきます。
本プログラムでやりたいことは
(1)前提:A列に数字がランダムに入っているとして
(2)cell(1,1)よりも大きい数字がある行でB列の条件式のコピーがストップして"→"マークを表示して
(3)ストップした行を基準に列をひとつ右にずれて同様に基準の行の値より大きな値が出るまで条件式をコピーする
(4)同様の作業を複数続ける
以上のような流れのプログラムにしたいと考えています。また条件式については質問する上で簡略化して書いています。
説明べたですいませんが、ご協力ください。
よろしくお願いします。
No.1
- 回答日時:
一応動いているような感じですけど、
困っているところは、大きい値が無いときに止まらないということですか?
それとも、2回でなく、A列のデータのある限り右側へ処理を続けたいということですか?
後、矢印を入れるのが目的なら、式を入力する必要は無いように思いますが・
この回答への補足
>2回でなく、A列のデータのある限り右側へ処理を続けたいということですか?
その通りです。
>後、矢印を入れるのが目的なら、式を入力する必要は無いように思いますが・
質問のために矢印に簡略化していますが
実際はそこに計算式を含んだ条件式を
入れます。
どうぞよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) ExcelVBAでDo Until loopのネスト、IF文を使って一致する物と一致しない物としたい 11 2022/12/24 17:46
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
- Visual Basic(VBA) フォルダの場所を可変にしたいです(マクロ) 4 2023/05/11 10:00
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ExcelVBAを使って、値...
-
特定のセルが空白だったら、そ...
-
エクセルvbaで、別シートの最下...
-
【Excel】指定したセルの名前で...
-
エクセルVBAで結合セルの真ん中...
-
Excel vbaについて知恵もしくは...
-
Excelで指定した日付から過去の...
-
VBAでセルをクリックする回...
-
指定した条件で行セルを非表示...
-
VBA実行後に元のセルに戻りたい
-
任意フォルダから画像をすべて...
-
VBからEXCELのセルの値を取得す...
-
Application.Matchで特定行の検索
-
VBAでセル同士を比較して色付け
-
vb.netによるEXCEL値取得
-
連続する複数のセル値がすべて0...
-
DataGridViewの各セル幅を自由...
-
VBA ユーザーフォーム ボタンク...
-
Excel VBAで比較して数値があっ...
-
セルの選択、変色
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelVBAを使って、値...
-
i=cells(Rows.Count, 1)とi=cel...
-
Excelで指定した日付から過去の...
-
エクセルvbaで、別シートの最下...
-
特定のセルが空白だったら、そ...
-
VBA実行後に元のセルに戻りたい
-
【Excel VBA】指定行以降をクリ...
-
任意フォルダから画像をすべて...
-
【Excel】指定したセルの名前で...
-
VBAでセルをクリックする回...
-
【VBA】シート上の複数のチェッ...
-
EXCELのVBA-フィルタ抽出後の...
-
Excelのプルダウンで2列分の情...
-
Excel vbaで特定の文字以外が入...
-
TODAY()で設定したセルの日付...
-
”戻り値”が変化したときに、マ...
-
ExcelのVBAで数字と文字列をマ...
-
VBA ユーザーフォーム ボタンク...
-
Excel VBA マクロ ある列の最終...
-
Excel VBA、 別ブックの最終行...
おすすめ情報