質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

1回答

374閲覧

VBAでエラーが出る。。。

zuzu1984

総合スコア31

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2018/06/28 11:57

以前質問した内容を自分で組んでみたのですが、エラーやらで上手くいきません。。。
自分の技量と、やらなければいけない事の差がありすぎて困っています。
アドバイスをお願い致します。

【やりたいこと】

  1. 範囲はI8:T17
  2. 上記の範囲の中で、セルに色がついている場合は無視
  3. セルに色がついておらず、尚且つ文字(データ)が入っているセルを赤くする
  4. ただし、3)の条件でもセル[00][56]と並んでいるデータに関してはセルを赤くしない

テーブル内には色のついていないセルで[00]単体のものもあるが、単体の場合はセルを赤くする
5) 1)の範囲に1つでも赤いセルがあればU5に×、赤いセルがない場合は〇と記載する

イメージ説明

問題のコードです↓
※5)にはまだ至っていません。

VBA

1Dim i As Integer, j As Integer 2Dim C_row As Integer, C_Clm As Integer 3Dim Star As Range 4Dim Luz As Range 5Cielo As Range 6Dim Flag As Boolean 7 8Sub AAA() 9 10'[go 05]をチェックする 11i = 8 12j = 9 13 14For C_Row = 7 To 28 Step 1 15 For C_Clm = 13 To 22 Step 1 16 17 Set Star = Sells(C_Row, C_Clm) 18 19 For Each Star In Luz 20 Flg = False 21 Select Case True 22 Case Not Star.Interior.Color = xlNone 23 Case Star.Value = "FF" 24 Case Star.Value = "00" and Star.Offset',1).Value = "56" 25 Case Len(Star.Value) = 0 26 Case Else: Flg = True 27 End Select 28 29 If Flag Then 30 If Cielo = Star 31 Else 32 Set Star = Union(Cielo, Star) 33 End If 34 35         If Star.Interior.ColorIndex = xlNone Then 36 Tange(Cielo).Interior.Color = 22 37 End If 38 Next 39 Next 40Next 41

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

imihito

2018/06/28 13:19

色々問題があるのでまずは最低限ののことについて ①モジュールの先頭に「Option Explicit」を追加する ②「デバッグ」内の「○○のコンパイル」を実行する ③コンパイルを行うと「コンパイルエラー~」と表示される。「○○が定義されていません」はスペルミスなので修正、それ以外はメッセージに応じて修正。「Ctrl + Space」で使えるものの一覧が出てくるので「○○が定義~」系はそちらも参考に。
sysjojo

2018/06/28 13:21

とりあえず先頭に「Option Explicit」を書きましょうか。Sellsとか書いてるうちはまともにデバッグなんてできないでしょうから、まずは文法的におかしなところを潰して、潰したいエラー内容を付け加えて質問内容を更新されるとよいかと。
zuzu1984

2018/06/28 14:20

訳あって、実際のコードをコピペできないので、スペルミスしてしまいました。実際はCellsと書いています。
guest

回答1

0

前回の質問の、mattuwanさんの回答で概ね問題無さそうだと思いましたが、あちらのコードは試されたのでしょうか?

やっている内容について自分なりの解釈でコメント入れてみたので、良ければこちらも参考にしてください
(若干好みで変えてますが、流れ・内容はほぼ同じです)。

vba

1Sub test() 2 3 '検索範囲の取得 4 Dim rngFind As Range 5 With Range("B7").CurrentRegion 6 'Range("B7").CurrentRegion・.Cells 7 'B7を選択してCtrl+Aを押したときに選択される範囲 8 '→B7:T17の範囲(下にもデータがあるならそこまで範囲) 9 10 '.Offset(1) 11 '上記の範囲を下に1行ずらした範囲 12 13 '.Offset(, 7) 14 '上記の範囲を右に7列ずらした範囲 15 16 'Excel.Intersect 17 '上記範囲の重なったところ、つまり8行目以下、I列含めてそこから右の範囲 18 '→I8:T17の範囲(下にもデータがあるならそこまで範囲) 19 Set rngFind = Excel.Intersect(.Cells, .Offset(1), .Offset(, 7)) 20 End With 21 22 '赤くするセル 23 Dim rngTarget As Range 24 25 '取得した検索範囲全体に対してループ(Zの字を描く順番、1行目を右に行って、終わったら2行目…) 26 Dim r As Range 27 For Each r In rngFind 28 'セルに色を付けるかどうかのフラグ 29 Dim flg As Boolean 30 flg = False 31 32 Select Case True 33 Case r.Interior.Pattern <> xlNone 34 'セルに色がついている場合は無視 35 'セルの、背景の、塗りつぶし方法が、無し ではない 36 '→ 何かしら塗りつぶしが設定されていれば 37 '何もしない 38 39 Case r.Text = "00" And r.Offset(, 1).Text = "56" 40 '[00][56]の判定 41 '今のセルが[00]で、1列右のセルが[56] なら 42 '何もしない 43 44 Case r.Text = "56" And r.Text(, -1).Value = "00" 45 '[00][56]の判定 46 '今のセルが[56]で、1列左のセルが[00] なら 47 '何もしない 48 49 Case r.Text = "" 50 'セルの、文字が、空 なら 51 '何もしない 52 53 Case Else 54 'それ以外なら、赤色(のフラグ)にする 55 flg = True 56 End Select 57 58 If flg Then 59 60 'rngTargetに赤色にするセル範囲をくっつける 61 If rngTarget Is Nothing Then 62 '1個目の場合 63 Set rngTarget = r 64 Else 65 '2個目以降の場合 66 Set rngTarget = Excel.Union(rngTarget, r) 67 End If 68 69 End If 70 Next 71 72 If Not rngTarget Is Nothing Then 73 rngTarget.Interior.Color = vbRed 74 End If 75End Sub

投稿2018/06/28 15:04

imihito

総合スコア2166

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問