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

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

ただいまの
回答率

90.51%

  • VBA

    1808questions

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

  • Excel

    1543questions

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

  • マクロ

    227questions

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

VBAでエラーが出る。。。

受付中

回答 1

投稿

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

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

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    エクセルVBAの質問です

    VBA初心者です。よろしくお願いします。 以下のコードを記述しています。  Dim Rng1 As Range  Dim Rng2 As Range  Dim c As

  • 解決済

    VBAでアンケート結果を振り分けたい

    前提・実現したいこと excelにてアンケート集計表を作成しています。 入力シートの各行の回答群を違うシートにコピーするVBAを書いていますがうまくいきません。 全シート

  • 解決済

    VAB 結合セルとループ

    前提・実現したいこと | 2013 | 1 | 山田 |      | 2 | 田中 |      | 3 | 佐藤 | 2014 | 1 | 山田 | 2015 | 1

  • 解決済

    VBA 文字検索 セルに入力した文字を含むセル行だけを表示したい(オートフィルタのように)

    実現したいこと セルに入力した文字を含むセルがあった場合 ①該当するセルの背景色を変えたい ②当てはまるセルがあった場合 →その検索文字を含む行だけを表示したい(オートフィ

  • 解決済

    VBAの配列の質問

    VBAの配列で教えてほしい事があります。 同一ブック内に2つのsheetがあります。 ”集計結果”と”一時保管”です。 ”一時保管”はA~D列にデータが入っています。

  • 解決済

    VBA高速化について

    20個のエクセルファイルを読み込み、特定のシートにあるテーブルから特定の値を探し出し、その右横にあるセルの値を取り出します。 集計用のエクセルのテーブルでも、同じ特定の値をテーブル

  • 解決済

    For ~ Next 繰返し処理の最後で意図しない値を得てしまいます。

    Dim p As Integer Dim yearF As Integer p = 3 Worksheets("list").Select For

  • 解決済

    VBA 条件分岐 while文?

     VBAで背景色をつけたい。エクセルの範囲を指定せずに、複数の条件分岐を実現したい ここに質問の内容を詳しく書いてください。 かなり長文になると思いますが、色々試した結果、手詰まり

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

  • VBA

    1808questions

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

  • Excel

    1543questions

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

  • マクロ

    227questions

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