ExcelのVBAで16進数から背景色への変換がうまく行かない原因を教えてください

このQ&Aのポイント
  • ExcelのVBAを使用して、各セルの16進数の数値を背景色に変換するプログラムを作成しました。しかし、変換がうまく行かず、白く虫食いのような表示になってしまいます。また、数値を変更すると、別の部分の変換が行われない場合もあります。Vista Home PremiumでExcel2007を使用しています。
  • ExcelのVBAを使って、各セルの16進数の数値を背景色に変換する方法がわかりません。プログラムを作成しましたが、色の変換がうまく行かず、白く虫食いのような表示になってしまいます。また、数値を変更すると、別の部分の変換が行われない場合もあります。Vista Home PremiumでExcel2007を使用しています。
  • ExcelのVBAを使用して、各セルの16進数の数値を背景色に変換する方法がわかりません。プログラムを作成しましたが、色がうまく変換されず、白く虫食いのような表示になってしまいます。また、数値を変更すると、別の部分の変換が行われない場合もあります。Vista Home PremiumでExcel2007を使用しています。
回答を見る
  • ベストアンサー

ExcelのVBAにつて(16進数から背景色への変換)

VBAを使って各セルの16進数の数値を背景色に変換したいのですがうまくいきません。 プログラムは以下のように書きました。 Sub graphic() With Cells .ColumnWidth = 1.0 .RowHeight = ActiveCell.Width .Interior.Color = &HFFFFFF .Font.Color = &HFFFFFF   End With   N = 1   For j = 0 To N - 1     For i = 0 To N - 1       For y = 1 To 200 Step N         For x = 1 To 200 Step N         With Cells(y + j, x + i)         v = .Value         r = Mid(v, 2, 2)         g = Mid(v, 4, 2)         b = Mid(v, 6, 2)         c = Val("&H" + b + g + r)         .Interior.Color = c         .Font.Color = c         End With       Next     Next   Next Next End Sub Vista Home PremiumでExcel2007を使っています。 ここでセル内の数値は「#FFFFFF」このような形式です。 変換動作自体は行われるのですが、色の変換が行われず、白く虫食いのようになる部分があります。 数値を変更すると、別の部分の変換が行われなかったりします。 原因のわかる方がおられましたら教えていただきたいと思います。

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

  • ベストアンサー
回答No.1

以下の点について、補足欄に記入してください。  >各セルの16進数の数値 >セル内の数値は「#FFFFFF」このような形式です。 >r = Mid(v, 2, 2)  g = Mid(v, 4, 2)  b = Mid(v, 6, 2)   c = Val("&H" + b + g + r) これらから推測すると、あらかじめ、何らかの方法でセルに値が入っているはずですね。 どんな方法でどんな値を各セルに入れたのですか? >変換動作自体は行われるのですが >色の変換が行われず、白く虫食いのようになる部分があります 白色または白色に近い色に変換されたのではないでしょうか? 値を勝手に入れて試してみたのですが、一部不明な点がありますが一応動いているようです。 各セルの背景色だけでなく、文字の色も背景色と同じにしているということは、各セルの色を変えたいだけではないのですか? 各セルに文字列を入れる、または入っている理由は何ですか? >N = 1 >For j = 0 To N - 1  For i = 0 To N - 1 >For y = 1 To 200 Step N N が 2 以上に変えることがあるのなら(市松模様にするとか)、良いのですが、N が 1 の場合、Step N は、通常書きません(省略します)し、 For j  For i  も不要です。 最終的にどんな風になることを望んでいるのですか?

xeno-ta
質問者

お礼

回答ありがとうございます。 N、i、jは以前作ったものをそのまま用いたもので、消し忘れでした。 N、i、jと.Font.Color を消したら正常に動作しました。 どの部分が原因か分からなかったのですが、実行後「#FFFFFF」が「FFFFFF#」に書き換えられていました。 無事解決することができました。 丁寧なご回答ありがとうございました。

関連するQ&A

  • EXCEL VBA のFor~Next文で質問です。

    お世話になります。VBA初心者です。 環境はWIN2000,EXCEL2000です。 下記のようなマクロを組んだらNextに対するForがありませんと、エラーが出てしまいました。 申し訳ありませんが、手直しお願いします。 やりたいことは、D97へコピーが終わったら、次はM7からコピーをし、M97へのコピーが終わったらV7からコピーを始めたいのです。 With sheetGR For ii = 7 To 97 Step 10(行の指定) For iii = 4 To 31 Step 9(列の指定) If .Cells(ii, iii) = "" Then .Range(.Cells(ii, iii), .Cells(ii + 4, iii + 2)).Value _ = Sheets("Result").Range("G20:I24").Value End If Exit For If Cells(97, iii) <> "" Then Next iii End If Next ii End With

  • ExcelのVBAがオーバーフローに!?

    読んで頂きありがとうございます。 以前に質問しました時に回答を頂き凄く助かっていたのですが、何故か「オーバーフロー」と表示されてしまいます。 ひょっとしたら桁なのかも知れません。 下記のVBAを教えて頂きしようしていました。 Option Explicit Sub Test() Dim c(), p(), q(), i, j, l, r, k As Long r = Range("B2").End(xlDown).Row l = Range("D2").End(xlDown).Row ReDim c(r - 2), p(r - 2), q(r - 2) For i = 1 To r - 2 c(i) = Cells(i + 2, 2).Value p(i) = Cells(i + 2, 3).Value q(i) = i + 2 Next i For i = 1 To r - 3 For j = i + 1 To r - 2 If c(i) > c(j) Then k = c(i) c(i) = c(j) c(j) = k k = p(i) p(i) = p(j) p(j) = k k = q(i) q(i) = q(j) q(j) = k End If Next j Next i For i = 1 To r - 2 Cells(i + 2, 7).Value = c(i) For j = 3 To r If Cells(j, 4).Value = c(i) Then Cells(i + 2, 8).Value = p(i) - Cells(j, 5).Value If p(i) - Cells(j, 5).Value <> 0 Then Range("B" & q(i)).Interior.ColorIndex = 6 Range("D" & j).Interior.ColorIndex = 6 End If Exit For End If Next j Next i For i = 3 To r k = 0 For j = 3 To l If Cells(i, 2).Value = Cells(j, 4).Value Then k = 1 Exit For End If Next j If k = 0 Then Range("B" & i).Interior.ColorIndex = 35 End If Next i For i = 3 To l k = 0 For j = 3 To r If Cells(i, 4).Value = Cells(j, 2).Value Then k = 1 Exit For End If Next j If k = 0 Then Range("D" & i).Interior.ColorIndex = 35 End If Next i End Sub デパックのClickすると15行目辺りの「k = c(i)」が黄色くなります。 正直言ってマクロとか全く解りませんが、コピーして使っていました。 どこをどう変更すれば良いのか教えて頂ければ助かります。 よろしくお願いします。

  • EXCEL VBA2010 MsgBox

    Sub 重複() Dim i As Long, j As Long For i = 6 To 500 For j = 3 To 3 If WorksheetFunction.CountIf(Range("C6:C500"), Cells(i, j)) > 1 Then Cells(i, j).Interior.ColorIndex = 6 End If Next j Next i End Sub このVBAに重複が何件ありますよというメッセージを出したいです。 MsgBoxの入れ方を教えてください。

  • 文字変換マクロについて

    数値を文字列に変換するマクロで、行数や列数が増えても対応できるようにしたいです。 (並びは…数値 スペース 文字列)どなたか教えてください。 よろしくお願いします。 Sub 文字() Dim i As Long For i = 1 To Range("A1").End(xlDown).Row Cells(i, "C") = Cells(i, "A") With Cells(i, "C") .NumberFormatLocal = "@" .Value = StrConv(Cells(i, "C").Value, vbNarrow) .Value = Format(Cells(i, "C").Value, "'00") End With Next i End Sub

  • このVBAソースのどこが間違ってるか教えてください

    Dim csp As Integer 'ストップ Dim css As Integer 'ストップorスタート Sub Quest2() If css = 0 Then css = 1 Quest2a Else cstp = 1 css = 0 End If End Sub Sub Quest2a() Sheets("Sheet1").Select Range("B1:J10").Select Selection.Interior.ColorIndex = x1None Range("a1").Select cstp = 0 Do r = 1: c = 5 For i = 0 To 15 If i < 9 Then Cells(r, c).Interior.ColorIndex = x1None r = r + 1 If i < 5 Then c = c + 1 Else c = c - 1 End If Cells(r, c).Interior.ColorIndex = 3 Else Cells(r, c).Interior.ColorIndex = x1None r = r - 1 If i < 13 Then c = c - 1 Else c = c + 1 End If Cells().Interior.ColorIndex = 3 End If 'タイミング For tm1 = 1 To 1000: For tm2 = 1 To 100: Next If cstp = 1 Then Exit For End If Next DoEvents If cstp = 1 Then Exit For End If If r = 3 And c = 5 Then Cells(r, c).Interior.ColorIndex = x1None End If Next DoEvents If cstp = 1 Then Exit Do End If Loop Cells(10, 9) = Cells(r, c) Cells(10, 9).Interior.ColorIndex = 8 End Sub

  • VBA 時間の抜き出しが上手く処理できない

    時間の抜き出しをするのに下記のコードを候補に挙げましたが、 「'コロンが2個の場合 (時:分:秒)」の場合は上手く処理できますが 「'コロンが1個の場合 (分:秒)」の数値が上手く処理できません。 ’----------------------------------------------------------------------- Option Explicit Sub コロンの数を数える() Dim i As Long, cnt As Long, n As Variant For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row cnt = 0 '←cntをリセット Do n = InStr(n + 1, Cells(i, "A"), ":") If n = 0 Then Exit Do Else cnt = cnt + 1 End If Loop If cnt < 1 Then MsgBox "[:]がありません。" '←cntが1未満のときにメッセージを発出します。 End Else Cells(i, "B").Value = cnt End If Next End Sub Sub 時間抜き出し() Dim i As Long, cnt As Long Dim n As Single For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row n = InStr(n + 1, Cells(i, "A"), ":") 'コロン「:」の位置を特定する If Cells(i, "B") = 1 Then 'コロンが1個の場合 (分:秒) Cells(i, "C").NumberFormatLocal = "h:mm:ss" If Mid(Cells(i, "A"), n - 2, 1) = " " Or Mid(Cells(i, "A"), n - 2, 1) = "(" Then '10分以下の場合 Cells(i, "C") = Mid(Cells(i, "A"), n - 1, 4) Cells(i, "C") = "0:" & Cells(i, "C") Else '10分以上 Cells(i, "C") = Mid(Cells(i, "A"), n - 2, 5) Cells(i, "C") = "0:" & Cells(i, "C") End If Else 'コロンが2個の場合 (時:分:秒) Cells(i, "C").NumberFormatLocal = "h:mm:ss" Cells(i, "c") = Mid(Cells(i, "A"), n - 1, 7) End If n = 0 Next End Sub

  • エクセルVBAラベルの変数?

    エクセル2000VBAにて下記のように作成しました。 With ActiveSheet For i = 4 To 200 If Label1.Caption = .Cells(i, 1) Then For h = 4 To 34 If Label25.Caption = .Cells(2, h) Then For idx = i To 200 If .Cells(idx, 3) = Label21.Caption Then Label6.Caption = .Cells(idx, h) Label7.Caption = .Cells(idx + 2, h) GoTo ラベル2 End If Next idx End If Next h End If Next i ラベル2: For i = 4 To 200 If Label2.Caption = .Cells(i, 1) Then For h = 4 To 34 If Label25.Caption = .Cells(2, h) Then For idx = i To 200 If .Cells(idx, 3) = Label21.Caption Then Label8.Caption = .Cells(idx, h) Label9.Caption = .Cells(idx + 2, h) GoTo ラベル3 End If Next idx End If Next h End If Next i ラベル3: ・・・ End With Label1~5まで同じ処理を行うため 1~5まで変数を使用して簡単にしたいのですが Label(変数)の書き込み方がわかりません? 検索を使用しましたが検索項目が悪いのか なかなか解決しません。 何方か教えていただけないでしょうか?

  • 簡単なVBA

    エクセルで特定の列データを削除したいのですが シンプルな形を教えてください ちなみに今は以下のようなVBAを使っています。 Sub 特定の列を削除する() For i = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1 If Cells(1, i) = "りんご" Then Columns(i).Delete End If Next i For i = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1 If Cells(1, i) = "みかん" Then Columns(i).Delete End If Next i For i = Cells(1, Columns.Count).End(xlToLeft).Column To 1 Step -1 If Cells(1, i) = "ばなな" Then Columns(i).Delete End If Next i End Sub

  • エクセル VBAが作動しない

    セルの色を変換するVBAとして、標準モジュールに以下のマクロを書き込んでいます。 Sub グレイに() Dim c As Range For Each c In Selection With c.Interior If .Color = RGB(162, 187, 220) Then .Color = RGB(190, 190, 190) End With Next End Sub エクセルに戻って、ctrl+F8で、マクロ名を選んで、実行すれば、実行されるはずなのですが、なぜかきちんと変換されません。 詳しく書くと、何度も何度も「実行」ボタンを押していると、セルの色が指定どおりグレイになるときもあるのですが、特に作動するときと作動しないときに操作の差はありません。 当然ですが、「必ず」実行して欲しいのですが、どこに問題があるのでしょうか? 教えてください。

  • Excellマクロで数値0と空白部分の認識?

    以下はピボットテーブルをマッピングするマクロです。 数値0を色付けしたいのですが、空白部分も色付けしてしまいます。 よろしくお願いします。 For i = 表上端行 + 式行位置1 To 表下端行 - 式行位置3 For j = 表左端列 + 式行位置2 To 表右端列 - 式行位置4 V = Cells(i, j).Value If V >= 300 Then Cells(i, j).Interior.Color = RGB(255, 0, 0) ElseIf V > 0 Then Cells(i, j).Interior.Color = RGB(255, 0, 255) ElseIf V <= -300 Then Cells(i, j).Interior.Color = RGB(0, 0, 255) ElseIf V < 0 Then Cells(i, j).Interior.Color = RGB(0, 255, 255) Else Cells(i, j).Interior.Color = RGB(255, 0, 255) End If Next Next