• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAにて 型が違うとエラーが出てしまう)

VBAにて型が違うとエラーが出てしまう

このQ&Aのポイント
  • VBAでのコーディング中に、型が異なるとエラーが発生してしまう問題が発生しています。
  • 特に、文字色を変える部分で型の不一致エラーが発生します。
  • この問題を解決するためには、正しい型に変換する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • kybo
  • ベストアンサー率53% (349/647)
回答No.2

.Color = iro(3, 2)では、"RGB(255,0,0)"という文字列を代入しようとしているということ になります。 RGBはVBA関数なので、Color に代入すべきなのは、RGBのVBA関数で計算した結果の数値です。"RGB(255,0,0)"という文字列を代入しても計算結果をColor に代入できません。 以下参考まで。 Sub macro() Dim iro1, iro(3, 4) iro1 = "赤、3、255、0、0" iro(3, 0) = Split(iro1, "、")(0) iro(3, 1) = Split(iro1, "、")(1) iro(3, 2) = Split(iro1, "、")(2) iro(3, 3) = Split(iro1, "、")(3) iro(3, 4) = Split(iro1, "、")(4) '文字の色を変える With Selection.Font .Color = RGB(iro(3, 2), iro(3, 3), iro(3, 4)) '←型が違うとエラーが出る '.Color = RGB(255, 0, 0)←これなら問題ない .TintAndShade = 0 End With End Sub

VitaminBB
質問者

お礼

回答ありがとうございます。 出来ました。

その他の回答 (3)

回答No.4

ふたたび訂正。 RGB = R * 65536 + G * 256 + B じゃなくて RGB = R + G * 256 + B * 65536 でした。 なお、各引数に、0~255以外の値を与えると、本家のRGBと違う値になるので注意。

VitaminBB
質問者

お礼

何度も回答ありがとうございます。

回答No.3

訂正。 >a = EVALUATE("1") ' 文字列を式として評価してくれて1が返って来る これは失敗します。EVALUATEは「"1"そのもの」を評価して、ダブルクォートがあるのでエラーになります。 dim a as Integer dim s as String s = "1" a = Evaluate(s) の場合は成功します。 あと、RGBは「Evaluateが認識してくれない特殊関数」なので、別途 Function RGB(R as Integer, G as Integer, B as Integer) As Long RGB = R * 65536 + G * 256 + B End Function って感じで関数を作ってやらないと、EVALUATEは「RGB(255, 0, 0)」を理解できません。

回答No.1

iro(3, 2)の中身は「文字列」だから、当然「型が違う」って言います。 dim a as Integer a = "1" ' 型が違うとエラーが出る a = 1 ' これは問題ない 貴方がやってるのは上記と同じ事。エラーになるのが当たり前。 文字列を「数式として評価して、数値にしたい場合」には「EVALUATE関数」を使います。 dim a as Integer a = EVALUATE("1") ' 文字列を式として評価してくれて1が返って来る a = 1 ' これも問題ない なので .Color = EVALUATE(iro(3, 2)) とやれば「成功する可能性がほんの少しだけ」あります。 何故なら「EVALUATE関数が、文字列の中のRGB関数を関数として認識しない可能性が非常に高い」からです。 「やってみて成功したらラッキー」と思いましょう。 因みに、RGB関数は「3つの値を、常に同じ式で演算して1つの値を返すだけ」なので、同じ演算を記述してあげればRGB関数は不要です。

VitaminBB
質問者

お礼

回答ありがとうございます。 やってみました。 アンラッキーでした。

関連するQ&A