アプリ版:「スタンプのみでお礼する」機能のリリースについて

初心者です。
エクセル2010を使用しています。

社内のエクセルシートで工事の依頼を物件ごとに記入していきます。(A:N)
工事完了後、(A:N)に色を付けます。
毎回パレットで選んでいます。色番は16777164
マクロで一連の動作を記憶させ、ボタン一つで出来るようには作れたのですが、元々色の付いている箇所だけはそのままの色にしたいのです。
元々色がついてる理由ですが、工事には材料が必要なのですが、仕入れて請求が来るのが月末となります。金額の入力を忘れない為に色を付けています。
そういった場合はどのようなプログラムになるのでしょうか。

ご教示お願い致します。

A 回答 (3件)

こんにちは。



普通にVBAらしく書くと、こんな感じでしょうか。

A:N のように列を丸ごと指定するのは、
処理も遅く、ファイルサイズが肥大化しますから、
(↑これはExcelの仕様の問題です)
行数を絞って指定する必要があります。

  For Each c In Range("A2:N101")
セル範囲は、仮に、A2:N101 にしていますが、
適宜指定し直してください。

行数が一定ではないシートの場合、普通は、
基準となる列(空セルが無い列)を決めておいて、
最下行を取得します。
例えば、A列には空セルが無い、という前提で、
A列の最下行を取得する場合は、
  For Each c In Range("A2:N" & Cells(Rows.Count, "A").End(xlUp).Row)
のように書換えることになります。
B列には空セルが無い、という場合なら、
"A"を"B"に書き換えるような要領で修正してください。

Sub Re8762667()
Dim c As Range
  For Each c In Range("A2:N101") ' ← 要指定 セル範囲 
    If c.MergeArea(1).Interior.ColorIndex = xlColorIndexNone Then
      c.MergeArea.Interior.Color = 16777164
    End If
  Next
End Sub

この回答への補足

説明が足らず、申し訳ございません。

A3~N3までは担当者、依頼元、物件名、号室、間取り、入居中か空室か、発注店1、発注店2、発注店3、工事金額、発注金額1、発注金額2、発注金額3、工事金額から発注金額1~3を引いた金額
となっております。
記入方法は一行につきひとつの工事となります。
工事は何件も抱えているのですが、一気に全て終わる訳ではないです。
なので、終わった工事の行を選択し、1クリックで塗りつぶすボタンを作りたいのです。

発注店と発注金額のセルは必ずしも全て埋まる訳ではないです。
この発注店のセルに卸店、発注金額が後で入る事になります。なので、忘れない為にそのセルだけ黄色く塗ってあります。
この黄色のセルだけ塗りつぶさず、他のセルを塗りつぶしたいのです。

補足日時:2014/09/21 23:14
    • good
    • 0

こんばんは!



>仕入れて請求が来るのが月末となります。金額の入力を忘れない為に色を付けています。
すなわち、請求書が来るとその列に請求額が記入されるわけですね?

条件付き書式を使ってはどうでしょうか?
表の具体的なレイアウトが判らないので、勝手にH列を「請求金額」を記入する列とした場合です。

A~N列すべてを範囲指定 → 条件付き書式 → 新しいルール → 数式を使用して・・・ → 数式欄に
=AND($A1<>"",$H1="")
として → 書式 → 塗りつぶし → カラーパレットから好みの色を選択(色がなければ「その他の色」から選択)しOK

これでA列に何らかのデータが入り、H列が未入力の場合にA~N列に色が付きます。
(H列にデータを入力した段階で色が消えます)

※ 数式内の$A1部分はA列でなくても構いません、A列に通し番号が入っている場合があると思いますので、
Aの部分は「取引先」など必ず何らかのデータを入れる列にします。
当然H列も実際の「請求金額」を入れる列とします。m(_ _)m
    • good
    • 0
この回答へのお礼

私の説明不足で少し違う回答が…
でも、回答頂きありがとうございます!
更に勉強していきたいと思います。

お礼日時:2014/09/21 23:18

> なので、終わった工事の行を選択し、1クリックで塗りつぶすボタンを作りたいのです。


選択した範囲 = Selection
選択した範囲の行 = Selection.EntireRow
選択した範囲の行 の A:N = Range("A:N (" & Selection.EntireRow.Address(0, 0) & ")")

Sub Re8762667od()
Dim c As Range
  If TypeName(Selection) <> "Range" Then Exit Sub
  For Each c In Range("A:N (" & Selection.EntireRow.Address(0, 0) & ")")
    If c.MergeArea(1).Interior.ColorIndex = xlColorIndexNone Then
      c.MergeArea.Interior.Color = 16777164
    End If
  Next
End Sub

> なので、終わった工事の行を選択し、1クリックで塗りつぶすボタンを作りたいのです。
> この黄色のセルだけ塗りつぶさず、他のセルを塗りつぶしたいのです。
黄色 = 65535 = vbYellow

Sub Re8762667od2()
Dim c As Range
  If TypeName(Selection) <> "Range" Then Exit Sub
  For Each c In Range("A:N (" & Selection.EntireRow.Address(0, 0) & ")")
    If c.MergeArea(1).Interior.Color <> vbYellow Then
      c.MergeArea.Interior.Color = 16777164
    End If
  Next
End Sub
    • good
    • 0
この回答へのお礼

回答も早く、求めていた物を作って頂きましたので、ベストアンサーとさせて頂きます!
ありがとうございます。

お礼日時:2014/09/22 09:06

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