
VBAのif構文について,エラーが出てしまい何故かわからなかったので,
下式のどこが原因か,どなたか教えていただけないでしょうか。
---------------------------------------------------------------------------------
amin = 1000
For q = 1 To 1000 Step 1
a = Abs(Sheets("CALCULATE").Cells(q , 1) - 1)
If a < amin Then amin = a
Else
Sheets("CALCULATE").Cells(1, 2) = q-1
End If
Next q
---------------------------------------------------------------------------------
ある列の数値が,最も1に近い値となるセル番号を出力する。
となるようにしたつもりのマクロです。
MATCH,INDEX関数を用いれば良いだけのことらしいですが,
後学のためにも,エラー原因を教えていただけないでしょうか。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
ちょっと口を挟んでしまいます。
全体的には間違っている部分はあっても、考え方は分かります。
単に、これは、インデントを直せば、ご自身ですぐに分かります。
ツールで、フリーのスマート・インデンターというものがありますから、それをお使いになれば、エラーの原因は炙り出せます。他のインデンターは、エラーかあると実行してくれませんが、これはしてくれるので、構文のミスが検出できます。
http://www.oaltd.co.uk/Indenter/Default.htm
(私自身、もう一つ別のものを使っていますが、そのツールは、お値段が高いのでお勧めしません)
とろこでね一体、このコードは誰が考えたものなのでしょうか。
ご質問者さんが、このコードを書けるなら、このような初歩的なミスをするとは思えないのですが。
この検索は、目的の数値に一番近いものを検索するツールですね。だから、MATCH関数と互換性はあるのかもしれません。(INDEX関数単独では、そのような機能はないはずです。)
'//標準モジュール(シート名は省略)
Sub Test1()
Dim q As Long, k As Long
Dim a As Double
Dim aMin As Double
Dim Lastrow As Long
Const target As Long = 1 '目的の値
Lastrow = Cells(Rows.Count, 1).End(xlUp).Row '最終行を見つける
aMin = 10 ^ 15 '最大値を入れるなら景気よく
For q = 1 To Lastrow
If Cells(q, 1).Value <> "" Then
a = Cells(q, 1).Value
If Abs(a - target) < aMin Then
aMin = Abs(a - target)
k = q
End If
End If
Next q
Cells(1, 2).Value = "値": Cells(2, 2).Value = Cells(k, 1).Value
Cells(1, 3).Value = "行": Cells(2, 3).Value = k
End Sub
'//
もし、旧VB系のアルゴリズムを解こうとするなら、これが逐時選択の最初の入門だと思います。上記のコードには、見つかったら、離脱があるとよいのですが。
No.2
- 回答日時:
No.1さんの指摘通りかと。
なお、コーディングとしてはIF分のはじまりと終わりが分かるようTABを上手に使うことが大切です。そうすると記述ミスが減ります。
以下のような感じに。(この掲示板でのTABの扱いがわからないのでこの場は全角の空白文字を使いますが)
If a < amin Then
amin = a
Else
Sheets("CALCULATE").Cells(1, 2) = q-1
End If
参考まで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) R列の1111/11/11以外、且つQ列の×の条件で該当行のAからAE列までオレンジに塗りつぶす 2 2022/07/02 10:18
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Excel(エクセル) エクセルVBAでオブジェクトが必要です 2 2022/09/10 16:37
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) excel VBA if文について 3 2022/03/27 17:42
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) VBAで実行時エラー'424' オブジェクトが必要ですと出る 2 2022/10/07 09:25
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
首吊りどこ締めるの
-
彼女のことが好きすぎて彼女の...
-
尿検査前日に自慰行為した時の...
-
検便についてです。 便は取れた...
-
EXCELで条件付き書式で空白セル...
-
精子に血が・・・
-
【Excelで「正弦波」のグラフを...
-
尿検査の前日は自慰控えたほう...
-
EXCELで式からグラフを描くには?
-
イタリアから帰国する際、肉製...
-
至急!尿検査前日にオナニーし...
-
値が入っているときだけ計算結...
-
風俗店へ行く前のご飯
-
VLOOKUP関数を使用時、検索する...
-
精液の落とし方を教えてください
-
Excel 数値の前の「 ' 」を一括...
-
勃起する時って痛いんですか? ...
-
小数点以下を繰り上げたものを...
-
一番多く表示のある値(文字列...
-
excelでsin二乗のやり方を教え...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
首吊りどこ締めるの
-
尿検査前日に自慰行為した時の...
-
至急!尿検査前日にオナニーし...
-
検便についてです。 便は取れた...
-
彼女のことが好きすぎて彼女の...
-
値が入っているときだけ計算結...
-
リンク先のファイルを開かなく...
-
EXCELで条件付き書式で空白セル...
-
2つの数値のうち、数値が小さい...
-
VLOOKUP関数を使用時、検索する...
-
尿検査の前日は自慰控えたほう...
-
MIN関数で空白セルを無視したい...
-
小数点以下を繰り上げたものを...
-
風俗店へ行く前のご飯
-
エクセルで空白セルを含む列の...
-
Excel 数値の前の「 ' 」を一括...
-
【Excelで「正弦波」のグラフを...
-
納豆食べた後の尿の納豆臭は何故?
-
EXCELで式からグラフを描くには?
-
ある範囲のセルから任意の値を...
おすすめ情報