プロが教えるわが家の防犯対策術!

Excelで下のようになっているシートが12あり、【小計】となっているセルをブック全体で検索してその行の1列目から5列目までを黄色で色付けし、次の行の1列目から5列目までを青色で色付けしたいのですが、マクロでやることはできるのでしょうか?マクロ初心者で自力でやってみようと試みたんですが、全くできる見込みがありませんでした・・・。

|○○ |    |    |    | 100|
|○○ |    |    |    | 110|
|○○ |    |    |    | 200|
|○○ |    |    |    | 120|
|   |    |    |    |    |
|   |    |    |    |    |
|小計 |    |    |    | 530|
|   |    |    |    |  42|

A 回答 (3件)

可能です。


しかし、コードのタタキ台も何にも載せずに、誰かの書いたコードをそのまま使っても
アレンジが効かないと思いますよ。

1. シートを1枚目から12枚目までループ
2. 「小計」と書いてある行を検索
3.  その行の1-5列目までを黄色に
4. その次の行も同様に青に

とすればよいでしょう。

イメージ的には

For i=1 To 12
k=Rows.Count
Do Until Cells(k,1).Value="小計"
k=k-1
Loop
Range(Cells(k,1),Cells(k,5)).Interior.ColorIndex=6
Range(Cells(k+1,1),Cells(k+1,5)).Interior.ColorIndex=8
next i

みたいな感じではないでしょうか。適宜アレンジください。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
タタキ台なしですみませんでした。
確かに自分である程度作らないと応用がきかなく発展させることもできませんね。
いただいた回答を参考にして、まずは内容を理解することから始めたいと思います。
勉強不足であることがよくわかりました。

お礼日時:2017/01/09 20:11

マクロでなければいけないのですか?


条件付き書式使えば同様の事ができるとおもいますが
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
条件付き書式でもできるとはわかりませんでした。
一括で処理するにはマクロしかできないと勘違いしていました。
マクロを勉強したいというのもあって質問した次第です。
条件付き書式でもできないか模索してみたいと思います。

お礼日時:2017/01/09 20:22

こんにちは。



最初に、この人何言っているんだと思われるかもしれませんが、コツを教えます。
>マクロ初心者で自力でやってみようと試みたんですが、

経験から導き出した技術か、原則を覚えてその問題に立ち向かうか、学校の勉強でも、社会生活でも同じですね。

あえて、これを「帰納法」と「演繹法」と呼ばせていただくと、帰納法は経験によるもの、演繹法は経験によらないで、法則から解決を導き出すもの。どなたも、「演繹法」としての原則・方程式・構文を求めるのが楽です。しかし、VBAはだいたいは失敗します。なぜかというと、ExcelVBAは、中身が雑然として統一されていないからです。それでも、やはり経験を積めないから、逆引き大全500の極意(秀和システム)とかいう本を眺めていると、なんとなく目に浮かんでくるものがあります。これは、あれに使える、それは、これに使えると……。PCは必ずしも必要ありません。そうしたら、自分が成功したり納得した完成形を、コードとメモをテキストファイルに入れて、今度は自分の作ったコードを参考にしていくわけです。それは、ネットでも掲示板でもよいでしょう。参考にしたURLも記録して置きます。今、私は、純粋なExcel VBAだけでも、重複がありますが18万行を越えています。これをOneDriveにでも入れて置けば、どこでも、参考に出来ます。

実は、私は、以下のFindメソッドを使った構文も、色のColorIndexも、暗記はしたのに、すぐに忘れてしまうので、VBA用のテンプレートにしています。

これは一例です。 worksheet は、12あるとおっしゃっていますが、あえて、なしにしました。
色は、パステルカラーにしました。
'//
Sub FindSearchColor()
 Dim sh As Worksheet
 Dim arg As String
 Dim c As Range
 arg = "小計"
 
 For Each sh In Worksheets
  With sh
   Set c = .Cells.Find( _
   What:=arg & "*", _
   After:=.Cells(1, 1), _
   LookIn:=xlValues, _
   LookAt:=xlWhole, _
   SearchOrder:=xlByRows, _
   SearchDirection:=xlNext, _
   MatchCase:=False, _
   MatchByte:=False _
   )
   If Not c Is Nothing Then
    If c.Row > 5 Then
     c.Resize(, 5).Interior.ColorIndex = 36 'パステル黄色
     c.Offset(1).Resize(, 5).Interior.ColorIndex = 34 'パステル青
    End If
   End If
  End With
 Next sh
 MsgBox "終了", vbInformation
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
自分のレベルが低すぎることがよくわかりました。
いただいた回答の内容をほとんど理解することができないため、まずは一つ一つ中身を理解することから始めたいと思っています。
これからもう少し内容を理解できるレベルになってから質問するようにしたいと思います。

お礼日時:2017/01/09 20:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!