OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

マクロのコーディング

  • すぐに回答を!
  • 質問No.129707
  • 閲覧数70
  • ありがとう数4
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 82% (38/46)

すいません、下のコード(マクロなんですが)同じ処理を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
通報する
  • 回答数5
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル12

ベストアンサー率 45% (207/457)

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
お礼コメント
jiri

お礼率 82% (38/46)

他の仕事と平行してまして、返事送れました。
ごめんなさい。昨日やったところ、結果、思った通りに動きました。
ありがとうございます。

ところで、for loop文はno.2のdandeさんがおっしゃるように、
ここでいう、変数iをloop文中の処理に使用しなくていいんでしょうか?
投稿日時 - 2001-09-05 11:53:05
-PR-
-PR-

その他の回答 (全4件)

  • 回答No.2
レベル7

ベストアンサー率 28% (4/14)

同じ処理を繰り返すには、幾つか方法がありますので、基本的な方法を書いておきます。 1.nがmになるまで繰り返す   For n=0 To m    処理文(ここでnを使う)   Next n 2.***の条件になるまで繰り返す   Do   処理文   Loop Until ***      例えば   If Range("B" & Selecti ...続きを読む
同じ処理を繰り返すには、幾つか方法がありますので、基本的な方法を書いておきます。

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を立ち上げてヘルプを読めば他にも参考資料があります。
お礼コメント
jiri

お礼率 82% (38/46)

返事をくれました。すいません。
構文は知っているのですが、実際、ちょっと、複雑になると、
さっぱりです。慣れだといわれますが....。
投稿日時 - 2001-09-05 11:58:25
  • 回答No.3
レベル9

ベストアンサー率 38% (38/99)

 なんとなく、あなたがやりたいことが判りました。  ただ、セルの指定にアルファベットが出てきてしまうので、単純にループさせる方法に戸惑っているだけですね。  ならば、一つのセルを指定し、そのセルの絶対座標を数字で取得する方法はどうでしょうか?   x = Sheets("シート名").Range("H39").Column  '横座標の取得 ...続きを読む
 なんとなく、あなたがやりたいことが判りました。
 ただ、セルの指定にアルファベットが出てきてしまうので、単純にループさせる方法に戸惑っているだけですね。

 ならば、一つのセルを指定し、そのセルの絶対座標を数字で取得する方法はどうでしょうか?

  x = Sheets("シート名").Range("H39").Column  '横座標の取得
  y = Sheets("シート名").Range("H39").Row    '縦座標の取得

 これで、例えば「H39」と言うセルの縦と横の座標が数字で取得できます。
 あとはこの絶対座標を基準として、加算減算をすればループ処理に持っていくことは容易いと思います。
  • 回答No.4
レベル9

ベストアンサー率 38% (38/99)

 しかし、これ動くんですか? 最初の If Range("K39:L39").Select <> "" Then は、ELSE条件が考えられません。 更に次の行では If .Cells(43, 5).Value = "" Then と、ドットセルズになっているため、参照方法が間違っている感じがします。 ...続きを読む
 しかし、これ動くんですか?

最初の
If Range("K39:L39").Select <> "" Then
は、ELSE条件が考えられません。

更に次の行では
If .Cells(43, 5).Value = "" Then
と、ドットセルズになっているため、参照方法が間違っている感じがします。


単純にループ処理にしないで、標準モジュール内に
Function 関数名(変数名 As Range) As String

End Function
等として、レンジの値を取得して動作が可能なユーザー定義関数を作ってしまった方がスマートかもしれませんね。

昨日の晩、回答してみましたが、今朝方気になりましたもので…
失礼しました。
お礼コメント
jiri

お礼率 82% (38/46)

すいません、返事遅れまして。

>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")をコードの上で書いているんで
問題ありません。(スペース上、端折りました。)
投稿日時 - 2001-09-05 12:14:09
  • 回答No.5
レベル9

ベストアンサー率 38% (38/99)

補足ありがとうございました。 If Range("H39:I39").Select <> "" Then この条件が必ず「真」になってしまうので「偽」であるセルのクリアができないのですね。 ちょっと美しくないですが、ばらしてみました。 If Range("H39").Value <> "&quo ...続きを読む
補足ありがとうございました。

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で解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ