VBAでセルの色を一括取得する方法

このQ&Aのポイント
  • VBAを使用してエクセルの特定の範囲内のセルの色を一括で取得する方法を教えてください。
  • セルの色を使用して車の配車管理表を作成していますが、時間帯ごとに使用していた車の情報を把握したいです。
  • 質問者は特定の行のセルの色を変更する必要があり、A車は2時間で2列、B車は3時間で3列の色を変更したいとのことです。
回答を見る
  • ベストアンサー

VBA セル色取得

現在車の配車用のエクセルを作っているのですが、A車、B車、C車が何時から誰が使用していたかを管理したくて、セルの色も一緒に表の中でかえたら見やすいかなと思っております。 そこで質問ですが以下の関数は難しいと思いますので、以下の形式で色を一気に取得できるコードを教えてください。 1.行は決まっておりますがどの時間帯になるかは不明 2.A車は2hなので2列、B車は3hなので3列の色を変更 3.A、B、Cそれぞれセルの色を変えたい。 書いていてつかみどころがなくなってしまいましたが、if~を使って任意のセルからrangeで色が指定できるコードを教えてくださればあとは何とかします。 よろしくお願いいたします。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/691)
回答No.1

こんなカンジでいかがでしょうか。 Sub MyTest()  Dim wkRange As Range  With ThisWorkbook.Sheets(1)      Set wkRange = Range(.Cells(2, 3), .Cells(5, 6))   SetColor wkRange      Set wkRange = Range("B22:D28")   SetColor wkRange     End With End Sub Sub SetColor(TargetRange As Range) '指定範囲に背景色をセット  Dim wkRange As Range  For Each wkRange In TargetRange   'wkRange.Interior.Color = 65535  '<==染める色   wkRange.Interior.Color = vbYellow  Next wkRange End Sub

y-bankrupt
質問者

お礼

ちょっと質問の内容が漠然としていたようで無用の混乱が生じてしまいました。 丁寧なコードの表記ありがとうございました。

その他の回答 (3)

回答No.4

ご質問の内容としてツッコミどころは少し多めですが・・ 多分もっとも重要な条件として。 > 何時から誰が使用していたか つまり、「人毎に色分け」したいという事でしょうか。 それとも、あくまでも > A、B、Cそれぞれセルの色を変えたい。 =「車(行)毎の色分け」をお望みでしょうか。 それによって、コードも構造も全く変わってしまいます。 というか、現状の「表」はどのような構造でしょうか。 当然ながら、コレもコードの書き方(というか処理の考え方)に 大きくかかわってきます。 まぁとりあえず、 > A車は2hなので2列、B車は3hなので3列 この「列」をフレキシブルに設定する方法として、 Resize というものがあります。   起点.Resize(行数, 列数) という使い方をします。 行数・列数には「変更後の行列数」を指定します。 つまり、A1セルを起点に「1行2列」の色を変えるには   Range("A2").Resize(1, 2).Interior.Color = 255  ' 赤 などといった具合。 「2h」を何かで判断できるなら、それを渡せばOKです。

y-bankrupt
質問者

お礼

コードの表記ありがとうございました。 これを元にアレンジしてみます。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

(私はVBAお勧め派ですが)VBAも良いが、エクセルの「条件付き書式」でできないか質問しなおしたらどうか。 また、質問文にその為には、少数セル(行)のシートのデータ例を挙げるべきだ。それがないと回答コードもそのまま使えないだろう。手直しは初心者には望めないだろうし。 VBAの学習は、人によっては、生易しいものではないと思う。 質問者は「エクセル VBA セル色付け」といったWEB照会も、してないようだ。 http://officetanaka.net/excel/vba/cell/cell05.htm の「背景色の設定」など。 また質問文にその為には、少数セル(行)のシートのデータ例を挙げるべきだ。 挙げてないということは、現在はVBAをやる段階ではないと思う。 コードは、データに左右されることを重視してないように思う。 ーー ちょっとVBAをかじった人なら Sub test01() ActiveSheet.Range("b2:E2").Interior.ColorIndex = 12 End Sub のようなものを参考に、拡張して作れるだろうが、 ・色の設定の書き方(RGBやColorIndexや色定数vbRedなど) ・WEB記事では、テーマカラー例.Interior.ThemeColor = 10といったものもありややこしい。 ・条件(運転手名?+何か?不明)をかます(絞る)コード。これが初心者にはむつかしい。 など結構熟練が必要なような気がする。 取得は Sub test03() ActiveSheet.Range("b2:E2").Interior.ColorIndex = 12 MsgBox ActiveSheet.Range("b2").Interior.ColorIndex End Sub のようなコードですが、設定されているセル範囲を適当に指定しないと エラーになるようだ。設定されているか(同じコードの範囲でか)どうか、まず判別が必要なようだ。 Sub test01() ActiveSheet.Range("b2:E2").Interior.ColorIndex = 12 MsgBox ActiveSheet.Range("b2:F2").Interior.ColorIndex End Sub はエラー

y-bankrupt
質問者

お礼

コード表記ありがとうございました。 こちらを元にアレンジしてみます。

  • mt2015
  • ベストアンサー率49% (258/524)
回答No.2

こんな感じで色を付ける事は出来ます。 Range("A1:B1").Interior.Color = RGB(255, 0, 0) でも、これは条件付き書式で十分に対応できそうな内容じゃないかなと思います(実際のシートをイメージできないため具体的な話は出来ませんが……)。 VBAでやるなら、変更時にその色を消すような処理も必要ですよ。

y-bankrupt
質問者

お礼

コードの表記ありがとうございました。 これを元になんとかアレンジしてみます。

関連するQ&A

  • セルが何行なのかをVBAで取得したい

    セルが何行なのかをVBAで取得したいのですが どういうコードにすればいいですか? 例えば、A1セルに a b c と入ってる場合、3行ですが それをVBAで取得するにはどうすればいいですか? Sub test() Dim r As Range Set r = Cells(1, 1) If r.Value Like "*" & Chr(10) & "*" Then MsgBox "改行があります" End If End Sub というコードで改行が有ることは取得できたのですが 何行かまでは取得する方法がわかりません。

  • EXCEL・VBAについておしえてください

    Excel VBAで以下のようなことをしたいです。 C列に作業日が入っています。 date(today)を条件に C列で該当するセルが あればフォントの色を変えて強調させようと考えています。 それ以外は黒字フォントのままで固定です。 単独のセルだけを対象にするとうまくいので おそらく、行全体の値を取得しなければならないと 思うのですが forをつかってuboundを使っても うまくいきません。どなたかご意見をください 以下 うまくいかないコードですが のせています。  *********************** range("A1") = date set 選択範囲 = columns(C) if 選択範囲 = range("A1") then end if

  • VBA 結合されているセルのオートフィル

    先程同じような質問をしてしまい すいませんが 結合されているセルのオートフィルのやり方が今一つわかりません でしたので質問させていただきます。 やりたいこと A列・・・A1セル『1』A2セル『2』・・・A10セル『10』と 数字が入っています。 BとC列・・・結合されており B1C1セル『1000』B2C2セル『1100』と数字が入っています。 F1セル・・・1~10までの数字が入っています。 処理内容 F1セルに『5』と数字が入っている場合 B5C5セルを選択後、数字が入っているB2C2セルまで移動します。 そのあと、B5C5セルではなく B4C4セルまで『1100』とオートフィルしたいのですが 可能でしょうか。 それともこのような処理をしたい場合オートフィルをするのは 間違っているのでしょうか? すいませんがコード記載していますので 回答宜しくお願い致します。 コード Sub Macro1() Dim a As Variant Dim i As Variant Dim RSta As Long Set a = Range("F1") '検索値'例えば5と入力したら For i = 1 To 10 If a.Value = Cells(i, 1).Value Then 'F1セルに5と入力されA5セルの数字が5なら If Cells(i, 2) = "" Then 'B5セルの値が何もなければ RSta = Cells(i, 2).End(xlUp).Row 'ここでBとCセルの結合されているセルの数字が入っている 一番上のセルを選択し Range("B" & RSta, "C" & RSta).AutoFill Destination:=Range("B" & RSta, "C"), Type:=xlFillCopy 'このコードが間違っているらしくうまくできません。ここでBとCの結合されているセル2行目から4行目までをオートフィル(数字のコピーのみを実施したい) End If End If Next i End Sub

  • 変化するセルが変更されたら実行、というVBAを組みたい

    たとえば、このセルが変更されたら実行、というのは Private Sub WorkSheet_change (Byval Target As Range) If(Target.Address = "$D$3") Then call *** End If End Sub のようにしますよね? この場合、指定したセルは「D3」ですが、たとえば、 A列、B列、C列、D列のアクティブの行のセルが変更されたらコード実行、 というようにするにはどうしたらいいのでしょうか?

  • VBAで、セル(Range)のオブジェクトが取得できない

    セルの情報を取得したいのですが、何故か以下のように書くと上手い具合に取得できません(A、B、Cは数値の変数)。 ------ Dim Rng As Range 'セル範囲を格納 Set Rng = Worksheets(1).Range(Cells(A, B), Cells(A, C)) ------ 以下のようにしてやると、何とか取得できます。 Worksheets(lngASNo + 1).Select Set Rng = Range(Cells(A, B), Cells(A, C)) どこが悪いのでしょうか? もし、判る方がいらっしゃいましたら、よろしくお願いいたします。

  • Excel VBA に関する質問

    ExcelのVBA初心者です。 同じ列にランダムに配置された黄色のセルの「数」をカウントするために以下のようなコードを見つけました。確かにこれで列内の黄色のセルをカウントできるのですが、カウントした後でその列内の黄色のセルの数を変える(黄色であったセルを違う色にしたり、新たに黄色のセルにしたり)と、その結果が反映されません。どのようにコードを書きなおせば、随時列内の黄色のセルの個数が変わるたびにちゃんとカウントできるのでしょうか? Function color6(a As Range) Dim c As Range, cu As Long Application.Volatile For Each c In a If c.Interior.ColorIndex = 6 Then cu = cu + 1 Next color6 = cu End Function でやっています。

  • VBA 選択された離れたセルの値の取得について

    EXCELのVBAでどうしても前に進めず困っております。 目的としているコードは、離れたセル(複数)をあらかじめCtrlキーで選択状態にしておき、選択されたセルの値のみをVBAが別のセルに並べていくというものです。 以下が私の作ったコードなのですが、思ったとおりの動作をしてくれません。 VBA初心者なもので、おかしな記述がたくさんあると思うのですが、どなたかアドバイスお願いします。 Public Sub xx() Dim SelectArea As String Dim TargetCell As Range Dim a As Integer Dim Row As Integer Dim Column As Integer Dim CNT1 As Integer a = 0 Row = 0 Column = 0 For CNT1 = 1 To 10 Row = Row + 1 SelectArea = Selection.Address Set TargetCell = Range("B3").Cells(Row - 1, Column) If Intersect(Range(SelectArea), TargetCell) Is Nothing Then Else Range("A30").Cells(a, 0) = Range("B3").Cells(Row - 1, Column).Value a = a + 1 End If Next End Sub

  • [VBA] セル内の文字を取得してファイルOPEN

    EXCEL VBAにてご質問があります。 セル A  1 C:\001.PDF  2 C:\002.PDF     ・     ・     ・ セル:A1~に入っている文字列を実行する(PDFを開く)にはどうすればよろしいでしょうか。 A1だけであれば、 Sub TEST() Dim aTE As String aTE = Range("A1").Value If Dir(aTE) <> "" Then With CreateObject("WScript.Shell") .Run """" & aTE & """" End With End If End Sub 上記で、いけると思いますが、複数(任意)になるとわかりません。 VBAは、始めたばかりで、まだ、右も左も分からない超初心者ですが、 どなたか、教えて頂けないでしょうか。 よろしくお願いいたします。

  • VBAで別々の2列のセルに色付け

    WINDOWS XP EXCELL 2003です。 いつもお世話になります。 参照図で A~D と E~H に分けています。 A2 数式が  =IF(B2="","",TEXT(B2,"mm")) E2 数式が  =IF(F2="","",TEXT(F2,"mm")) それぞれには 1(月)から12(月)です。 ※ 数値のみで 月 は含まれません。                      ユーザー定義 mm/dd です。   御指導を仰ぎたいのは A列 と E列 のセルの色づけのマクロを教えていただけませんか。 色コードは後で私が追加します。

  • VBAでセル記入禁止

    たとえば、"A1"に1を記入した場合、B1を記入不可にできるような、VBAのコードがあれば教えて欲しいです。 sub 記入不可() if range("A1").value = "A1" then B1のセルが記入できないコード end if end sub です。 よろしくお願い致します。

専門家に質問してみよう