- ベストアンサー
VBAでセルの色を一括取得する方法
- VBAを使用してエクセルの特定の範囲内のセルの色を一括で取得する方法を教えてください。
- セルの色を使用して車の配車管理表を作成していますが、時間帯ごとに使用していた車の情報を把握したいです。
- 質問者は特定の行のセルの色を変更する必要があり、A車は2時間で2列、B車は3時間で3列の色を変更したいとのことです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんなカンジでいかがでしょうか。 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
その他の回答 (3)
- tsubu-yuki
- ベストアンサー率46% (179/386)
ご質問の内容としてツッコミどころは少し多めですが・・ 多分もっとも重要な条件として。 > 何時から誰が使用していたか つまり、「人毎に色分け」したいという事でしょうか。 それとも、あくまでも > A、B、Cそれぞれセルの色を変えたい。 =「車(行)毎の色分け」をお望みでしょうか。 それによって、コードも構造も全く変わってしまいます。 というか、現状の「表」はどのような構造でしょうか。 当然ながら、コレもコードの書き方(というか処理の考え方)に 大きくかかわってきます。 まぁとりあえず、 > A車は2hなので2列、B車は3hなので3列 この「列」をフレキシブルに設定する方法として、 Resize というものがあります。 起点.Resize(行数, 列数) という使い方をします。 行数・列数には「変更後の行列数」を指定します。 つまり、A1セルを起点に「1行2列」の色を変えるには Range("A2").Resize(1, 2).Interior.Color = 255 ' 赤 などといった具合。 「2h」を何かで判断できるなら、それを渡せばOKです。
お礼
コードの表記ありがとうございました。 これを元にアレンジしてみます。
- imogasi
- ベストアンサー率27% (4737/17069)
(私は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 はエラー
お礼
コード表記ありがとうございました。 こちらを元にアレンジしてみます。
- mt2015
- ベストアンサー率49% (258/524)
こんな感じで色を付ける事は出来ます。 Range("A1:B1").Interior.Color = RGB(255, 0, 0) でも、これは条件付き書式で十分に対応できそうな内容じゃないかなと思います(実際のシートをイメージできないため具体的な話は出来ませんが……)。 VBAでやるなら、変更時にその色を消すような処理も必要ですよ。
お礼
コードの表記ありがとうございました。 これを元になんとかアレンジしてみます。
お礼
ちょっと質問の内容が漠然としていたようで無用の混乱が生じてしまいました。 丁寧なコードの表記ありがとうございました。