「みんな教えて! 選手権!!」開催のお知らせ

If aryWs2(cnt, 23) = d1 And Not aryWs2(cnt, 1) = (ColorIndex = xlNone) Or aryWs2(cnt, 14) = 1 And aryWs2(cnt, 11) < d2 Then
でWs2の1列目の色付けされたセルを除外したいのですが色づけセルも選んでしまいます。
色づけられたセルを除外する方法を教えてください。

質問者からの補足コメント

  • 説明が不十分のようなので補足します。
    元表のWs2はA列からAB列まであり、1050行あります。
    そのすべてを配列に格納して処理しています。
    その中からIF文での抽出部分です。X列の日付をd1として抽出しますが、そのうちのA列に色づけされた行を除外したいのです。色付けのセルを他の列に文字情報として置き換えれば正確に抽出されるのですが、直接A列の色情報だけで抽出できないかと考えています。
    よろしくお願いいたします。

      補足日時:2023/01/29 14:46

A 回答 (5件)

>そのすべてを配列に格納して処理しています。



であるのなら、

>aryWs2(cnt, 1)

にはセルの値は格納されていても、セルの背景色等は格納されていないと感じますけど?
⇒ As Range で宣言し Set ステートメントで代入してなければです。

例:

Dim v As Range

Set v = Range("A1:B2")

Debug.Print v(1, 1).Interior.ColorIndex = xlNone '背景色の場合

なので多分、

> Not aryWs2(cnt, 1) = (ColorIndex = xlNone)



aryWs2(cnt, 1).Interior.ColorIndex <> xlNone

で宜しいのではないかなと。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
配列を使わないで .Interior.ColorIndex = xlNoneとすることで、色なしを抽出することはできたのですが、配列で上記のコードを実行すると「オブジェクトが必要です」とエラーになります。宣言の場所に問題があるのでしょうか?

お礼日時:2023/02/01 09:14

>この文が間違いでしょうか?



間違ってはいないでしょうけど、エラーがここで出ている訳じゃないのですよね?
それとも出ています?
コードを小出しに出されても判断が困難になってしまいます。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。お礼の投稿が何回かエラーになってしまい、遅れてしまいました。
コードの小出し、誠に申し訳ありません。質問の準備不足でした。反省です。
この問題については改めて準備して後の機会にしたいと思います、ありがとうございました。

お礼日時:2023/02/03 08:31

回答者: めぐみん_ です。



>配列を使わないで .Interior.ColorIndex = xlNoneとすることで、色なし
>を抽出することはできたのですが、配列で上記のコードを実行すると「オ
>ブジェクトが必要です」とエラーになります。

私が書いたのも配列です。
ただRange型としているものですけど。
そもそも配列は1次元~多次元の箱のような物で、その箱をRangeであるかString・Long等『変数の型』を何にするのかって事です。
質問文にはその情報がありません。

仮にValiantで宣言した物であれば、上記の『 .Interior.ColorIndex』に対するオブジェクト(Range型)は存在せず、多分他のもの(セルの値による)に自動変換していると思われます。
従って宣言場所の問題ではなく、宣言の型を使用可能なRange型で宣言する必要があると思いますよ。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
宣言文は Dim v As Range
Set v=Range("A1:AB1051")
と宣言してありますが、この文が間違いでしょうか?

お礼日時:2023/02/01 11:46

No1です。



>変数ColorIndexの定義はどうすればいいのでしょうか?
なんだか意味が通じていないようですね。
その部分の評価式の形式は
 A = (B = C)
になっているよ、ということを書いたつもりなのですが・・・

ColorIndex「属性」を用いたいのならこちらかな?
https://learn.microsoft.com/ja-jp/office/vba/api …
(上記は、MSのVBAに関するリファレンスサイトですので、ほとんどのことはここで情報を得ることができます。)
余談ながら、正式に対応する列挙値を使用するなら、xlColorIndexNone になるはず。
(実質は同じなので、それを理解した上での記述なら問題ありませんが)


>A And B Or Not C And Dの形式については順番については理解しているつもりです。
前出の式の形式を理解なさっていないようなので、更に複雑になっているこちらでは、本当に大丈夫なのかと思ってしまいますけれど・・・
Cが色の判定部分だとして、仮にその部分がFalseでも式全体ではTrueになり得る式ですが、それは意図通りってことなのですね?
もしそうなら、そもそもが、単純な
>色づけセルも選んでしまいます。
というような内容のご質問文にはならなさそうな気もするのですが・・
    • good
    • 0
この回答へのお礼

(ColorIndex = xlNone) の部分をxlColorIndexNoneに変えれば、ということでしょうか?結果は同じになり、色付けは除外されませんでした。

お礼日時:2023/01/29 10:58

こんばんは



ほとんど説明が無いので意味不明ですけれど、勝手に想像・・・

VBA:「セル」と書いてあるので、エクセルVBAと想定。
aryWs2:セル範囲を示すRange型の変数と推測。
ColorIndex:変数定義されているのかどうか不明ですが、勘違いと推測。

>色づけセルも選んでしまいます。
色には背景色と表示色があるけれど、どちらなのかわからないし、どこにもそれらしき記述が見当たりません。
雰囲気からすると・・
>aryWs2(cnt, 1) = (ColorIndex = xlNone)
の部分がそのつもりなのかも知れない。

上記の右辺を評価すると、変数ColorIndexが未定義か、定義されていてもxlNoneとは異なる可能性が高そうなので、ほぼFalse値になる。
左辺のaryWs2(cnt, 1)はデフォルトでaryWs2(cnt, 1).Valueの意味になるので、
 aryWs2(cnt, 1).Value = False
で判定している可能性が高く、多分、結果はFalseになっているだろうと推測される。
いずれにしろ、「セルの色」とは無関係の記述になっている。


色を取得(設定)する場合は、Color又はColorIndex属性を利用するけれど、
・背景色なら、セルのInterior オブジェクトの属性として
・文字色なら、セルの文字のFontオブジェクトの属性として
取得する必要があります。
https://learn.microsoft.com/ja-jp/office/vba/api …
Colorの場合はRGBカラー、ColorIndexの場合はテーマカラーのインデックス値になります。


なお、ご質問には直接関係ありませんけれど・・
判定式が A And B Or Not C And D という形式になっているけれど、どのような順で評価されるかをきちんと把握しているのでしょうか?
評価順が違うと、(勝手に)期待している内容とは異なる評価になる可能性があります。
きちんと()等で明示しておく方が賢いのではと思いますが・・
    • good
    • 1
この回答へのお礼

回答ありがとうございます。エクセルvbaでの記述です。
X列の日付から抽出したものの内A列にRGBで色付けされた行は除きたいのです。
変数ColorIndexの定義はしていません。
変数ColorIndexの定義はどうすればいいのでしょうか?
なお、A And B Or Not C And Dの形式については順番については理解しているつもりです。

お礼日時:2023/01/29 09:01

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報