質問: excel 文字色の扱い お世話になります。 此方に上げられている質問 http://oshiete.coneco.net/qa8046829.html をみて 添付図1面のようにデータがある時に 各セルの1文字づつの文字色を拾うにはどうしたら良いか... と、想い 試しに添付 2面のように組んでみたのですが、 フォントカラーの取り出しにはobject型が要るとのこと vbaにお叱りを受けました。 これて駄目なのですか? 違うやり方では1文字づつのフォントカラーを見ることが出来るのですか? ご教示をお願い致します。
回答: こんにちは。 > フォントカラーの取り出しにはobject型が要るとのこと > vbaにお叱りを受けました。 問題点は、 dim col(5, 3) as object この部分と ... = mid(r2, counter, 1).font.colorindex この部分です。 object型の変数に戻り値long型の値を代入しようとしていますが、 既定のプロパティを持たないobject型の変数への代入では、 set obj = ...setステートメントを省略している時点で実行時エラーです。 一文字ずつ(charactersオブジェクト)のcolorindexを 配列に格納するなら、colorindexはvariant型ですから dim col(5, 3) もしくは dim col(5, 3) as long でも差支えないでしょう。 mid(r2, counter, 1)は、mid関数ですね。 r2.value(rangeオブジェクトのプロパティ省略形からの既定のプロパティはvalue) 戻り値の文字列をmid関数で抜きだしているだけですから、これは文字列値ですね。 文字列値が.fontや.colorindexを持つはずありませんから、 ここでもエラーになります。 ... = r2.characters(counter, 1).font.colorindex 直接的な回答としては、以上の二点となります。 気になるポイントとして > dim col(5, 3) このディメンションですが、 col(0, any) col(any, 0) などに特別な使い方があるのでなければ、 dim col(1 to 5, 1 to 3) または dim col(3 to 7, 1 to 3) ですね。 それから、 やっぱりオブジェクト型の配列変数に格納したい、という話だと 以下のような扱い方はあるかな?と思います。 ただし、charactersオブジェクトはコレクションを持たない 珍しいオブジェクトのひとつですので、念の為。 option explicit dim mobjchr() as characters sub setchr() redim mobjchr(3 to 7, 1 to 3) dim r as range dim stemp as string dim dnlength as long dim i as long for each r in sheets("sheet1").range("b3:b72") stemp = r.value dnlength = len(stemp) if dnlength > ubound(mobjchr, 2) then redim preserve mobjchr(3 to 7, 1 to dnlength) end if for i = 1 to dnlength set mobjchr(r.row, i) = r.characters(i, 1) next i next end sub sub intchr() erase mobjchr end sub sub playchr() dim ochr for each ochr in mobjchr ochr.font.colorindex = int(55 * rnd()) + 1 next end sub オブジェクト型の配列変数ではなくてcollectionオブジェクトに格納したい という発想もあるかも知れませんが、 その場合、2次元の座標をどのように一次元的に表現するか、 目的に応じて対処は変わると思います。 実践がイメージできたら試してみても面白そうですね。 以上です。