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

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

ただいまの
回答率

90.33%

  • VBA

    1906questions

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

  • Excel

    1638questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • マクロ

    238questions

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

VBAでエラーが出る。。。

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 228

zuzu1984

score 4

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

【やりたいこと】
1) 範囲はI8:T17
2) 上記の範囲の中で、セルに色がついている場合は無視
3) セルに色がついておらず、尚且つ文字(データ)が入っているセルを赤くする
4) ただし、3)の条件でもセル[00][56]と並んでいるデータに関してはセルを赤くしない
テーブル内には色のついていないセルで[00]単体のものもあるが、単体の場合はセルを赤くする
5) 1)の範囲に1つでも赤いセルがあればU5に×、赤いセルがない場合は〇と記載する

イメージ説明

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

Dim i As Integer, j As Integer
Dim C_row As Integer, C_Clm As Integer
Dim Star As Range
Dim Luz As Range
Cielo As Range
Dim Flag As Boolean

Sub AAA()

'[go 05]をチェックする
i = 8
j = 9

For C_Row = 7 To 28 Step 1
     For C_Clm = 13 To 22 Step 1

          Set Star = Sells(C_Row, C_Clm)

          For Each Star In Luz
               Flg = False
               Select Case True
                    Case Not Star.Interior.Color = xlNone
                    Case Star.Value = "FF"
                    Case Star.Value = "00" and Star.Offset',1).Value = "56"
                    Case Len(Star.Value) = 0
                    Case Else: Flg = True
               End Select

               If Flag Then
                    If Cielo = Star
               Else
                    Set Star = Union(Cielo, Star)
               End If

         If Star.Interior.ColorIndex = xlNone Then
                     Tange(Cielo).Interior.Color = 22
               End If
          Next
     Next
Next
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • imihito

    2018/06/28 22:19

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

    キャンセル

  • sysjojo

    2018/06/28 22:21

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

    キャンセル

  • zuzu1984

    2018/06/28 23:20

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

    キャンセル

回答 1

0

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

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

Sub test()

    '検索範囲の取得
    Dim rngFind As Range
    With Range("B7").CurrentRegion
        'Range("B7").CurrentRegion・.Cells
        'B7を選択してCtrl+Aを押したときに選択される範囲
        '→B7:T17の範囲(下にもデータがあるならそこまで範囲)

        '.Offset(1)
        '上記の範囲を下に1行ずらした範囲

        '.Offset(, 7)
        '上記の範囲を右に7列ずらした範囲

        'Excel.Intersect
        '上記範囲の重なったところ、つまり8行目以下、I列含めてそこから右の範囲
        '→I8:T17の範囲(下にもデータがあるならそこまで範囲)
        Set rngFind = Excel.Intersect(.Cells, .Offset(1), .Offset(, 7))
    End With

    '赤くするセル
    Dim rngTarget As Range

    '取得した検索範囲全体に対してループ(Zの字を描く順番、1行目を右に行って、終わったら2行目…)
    Dim r As Range
    For Each r In rngFind
        'セルに色を付けるかどうかのフラグ
        Dim flg As Boolean
        flg = False

        Select Case True
            Case r.Interior.Pattern <> xlNone
                'セルに色がついている場合は無視
                'セルの、背景の、塗りつぶし方法が、無し ではない
                '→ 何かしら塗りつぶしが設定されていれば
                '何もしない

            Case r.Text = "00" And r.Offset(, 1).Text = "56"
                '[00][56]の判定
                '今のセルが[00]で、1列右のセルが[56] なら
                '何もしない

            Case r.Text = "56" And r.Text(, -1).Value = "00"
                '[00][56]の判定
                '今のセルが[56]で、1列左のセルが[00] なら
                '何もしない

            Case r.Text = ""
                'セルの、文字が、空 なら
                '何もしない

            Case Else
                'それ以外なら、赤色(のフラグ)にする
                flg = True
        End Select

        If flg Then

            'rngTargetに赤色にするセル範囲をくっつける
            If rngTarget Is Nothing Then
                '1個目の場合
                Set rngTarget = r
            Else
                '2個目以降の場合
                Set rngTarget = Excel.Union(rngTarget, r)
            End If

        End If
    Next

    If Not rngTarget Is Nothing Then
        rngTarget.Interior.Color = vbRed
    End If
End Sub

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • VBA

    1906questions

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

  • Excel

    1638questions

    Excelは、マイクロソフト社が開発しているデータ集計や分析を行う表計算ソフトの一つです。文書作成や表計算、資料作成などの多彩な機能を備えており、統合パッケージであるMicrosoft Officeに含まれています。

  • マクロ

    238questions

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