すいません、下のコード(マクロなんですが)同じ処理を4回も繰り返しているので、(入りきらないので、2回にしました)ひとつにまとめたいです。どうすればいいでしょうか?教えて下さい。
'●業務番号チェック
'エラー時は青
If Range("H39:I39").Select <> "" Then
If .Cells(43, 5).Value = "" Then
Total_Check_Flg = True
'色付の範囲の設定
Range("A43:B43").Select
'セルの色の設定(青)
With Selection.Interior
.ColorIndex = 41
End With
Err_Kazu_4 = Err_Kazu_4 + 1
End If
End If
If Range("K39:L39").Select <> "" Then
If .Cells(44, 5).Value = "" Then
Total_Check_Flg = True
'色付の範囲の設定
Range("A44:B44").Select
'セルの色の設定(青)
With Selection.Interior
.ColorIndex = 41
End With
Err_Kazu_4 = Err_Kazu_4 + 1
End If
No.1ベストアンサー
- 回答日時:
4回繰り返すので簡単にFor文を使いました。
後はHと言う文字の数値で表した値をAsc文でとってChr文で文字に戻しています。
なお動作確認もしていないので間違ってたらすみません。
a = Asc("H")
b = 43
For i = 1 to 4
If Range(chr(a) & "39:" & chr(a+1) & "39").Select <> "" Then
If .Cells(b, 5).Value = "" Then
Total_Check_Flg = True
'色付の範囲の設定
Range("A" & CStr(b) & ":B" & CStr(B)).Select
'セルの色の設定(青)
With Selection.Interior
.ColorIndex = 41
End With
Err_Kazu_4 = Err_Kazu_4 + 1
End If
End If
a = a + 3
b = b + 1
Next
他の仕事と平行してまして、返事送れました。
ごめんなさい。昨日やったところ、結果、思った通りに動きました。
ありがとうございます。
ところで、for loop文はno.2のdandeさんがおっしゃるように、
ここでいう、変数iをloop文中の処理に使用しなくていいんでしょうか?
No.2
- 回答日時:
同じ処理を繰り返すには、幾つか方法がありますので、基本的な方法を書いておきます。
1.nがmになるまで繰り返す
For n=0 To m
処理文(ここでnを使う)
Next n
2.***の条件になるまで繰り返す
Do
処理文
Loop Until ***
例えば
If Range("B" & Selection.Row) = "" Then _
Cells(Selection.Row + 1, Selection.Column).Select
Call ReDrow
Loop Until Selection.Row > 128 Or Range("B" & Selection.Row) <> ""
のような感じです。
VBを立ち上げてヘルプを読めば他にも参考資料があります。
返事をくれました。すいません。
構文は知っているのですが、実際、ちょっと、複雑になると、
さっぱりです。慣れだといわれますが....。
No.3
- 回答日時:
なんとなく、あなたがやりたいことが判りました。
ただ、セルの指定にアルファベットが出てきてしまうので、単純にループさせる方法に戸惑っているだけですね。
ならば、一つのセルを指定し、そのセルの絶対座標を数字で取得する方法はどうでしょうか?
x = Sheets("シート名").Range("H39").Column '横座標の取得
y = Sheets("シート名").Range("H39").Row '縦座標の取得
これで、例えば「H39」と言うセルの縦と横の座標が数字で取得できます。
あとはこの絶対座標を基準として、加算減算をすればループ処理に持っていくことは容易いと思います。
No.4
- 回答日時:
しかし、これ動くんですか?
最初の
If Range("K39:L39").Select <> "" Then
は、ELSE条件が考えられません。
更に次の行では
If .Cells(43, 5).Value = "" Then
と、ドットセルズになっているため、参照方法が間違っている感じがします。
単純にループ処理にしないで、標準モジュール内に
Function 関数名(変数名 As Range) As String
…
End Function
等として、レンジの値を取得して動作が可能なユーザー定義関数を作ってしまった方がスマートかもしれませんね。
昨日の晩、回答してみましたが、今朝方気になりましたもので…
失礼しました。
すいません、返事遅れまして。
>If Range("K39:L39").Select <> "" Then
>は、ELSE条件が考えられません。
else条件はどうすればいいんですかね?
if文はelse条件をつけたほうがいいということですか?
それとも、else条件自体がこの場合ありえないということですか?
たしかに、ちょっと、不具合がありまして、
エラー(Range("H39:I39").Selectが入力済でRange("A43:B43")を空欄。)で、Range("A43:B43").Selectが色付けされたあと、
Range("H39:I39").Selectを空欄にしても、
エラーの色付けが消えないんですよ。
そこんとこの理解がたりないいんですかね。
>If .Cells(43, 5).Value = "" Then
>と、ドットセルズになっているため、参照方法が間違っている感じがします。
これに関しては、
With Worksheets("WorkReport")をコードの上で書いているんで
問題ありません。(スペース上、端折りました。)
No.5
- 回答日時:
補足ありがとうございました。
If Range("H39:I39").Select <> "" Then
この条件が必ず「真」になってしまうので「偽」であるセルのクリアができないのですね。
ちょっと美しくないですが、ばらしてみました。
If Range("H39").Value <> "" And Range("I39").Value <> "" Then
個別にセル内をチェックすることにより、H39,I39をクリアすると「偽」の答えが返ってきますので、ELSE条件で カラーインデックス=2 などで白色にすると青色はめでたく消えてくれます。
If Range("H39").Value <> "" And Range("I39").Value <> "" Then
If Cells(43, 5).Value = "" Then
Total_Check_Flg = True
Range("A43:B43").Select '色付の範囲の設定
With Selection.Interior 'セルの色の設定(青)
.ColorIndex = 41
End With
Err_Kazu_4 = Err_Kazu_4 + 1
End If
Else
With Selection.Interior 'セルの色の設定(白)
.ColorIndex = 2
End With
End If
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) VBAで教えて頂きたいのですが? 1 2022/04/29 02:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
【Excel VBA】一番右端セルまで...
-
入力規則のリスト選択
-
EXCEL VBA 文中の書式ごと複写...
-
Excel UserForm の表示位置
-
VBA 複数条件の分岐処理の上手...
-
Excelで空白セル直前のセルデー...
-
Excel VBA IF文がうまく動作し...
-
DataGridViewのフォーカス遷移...
-
特定の色のついたセルを削除
-
ListBoxを選択したデータ編集② ...
-
エクセルの合計を自動で表示さ...
-
DataGridViewで指定したセルの...
-
【VBA】【ユーザーフォーム_Lis...
-
オーバーフローを回避する方法?
-
VBA deleteをクリックすると型...
-
Excelのセルから日付情報を取得...
-
Excel VBA 同じ処理を複数回行...
-
マクロの実行時エラー'1004'が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
VBA 複数条件の分岐処理の上手...
-
Excelで空白セル直前のセルデー...
-
Excel UserForm の表示位置
-
EXCEL VBA 文中の書式ごと複写...
-
特定の色のついたセルを削除
-
VBA にて、条件付き書式で背景...
-
VBAでユーザーフォームにセル値...
-
【VBA】写真の貼り付けコードが...
-
【Excel VBA】一番右端セルまで...
-
Excel VBAでCheckboxの名前を変...
-
エクセルの合計を自動で表示さ...
-
【VBA】【ユーザーフォーム_Lis...
-
VBA:日付を配列に入れ別セルに...
-
Excel VBA IF文がうまく動作し...
-
下記のマクロの説明(意味)を...
-
入力規則のリスト選択
-
C# DataGridViewで複数選択した...
-
関数の引数でrangeを指定したとき
おすすめ情報