Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1760 / 13645 ツリー ←次へ | 前へ→

【72045】特定の文字があるときのみ処理を行うには。 さおり 12/5/22(火) 10:25 質問[未読]
【72074】Re:特定の文字があるときのみ処理を行うに... hint 12/5/26(土) 9:28 回答[未読]
【72107】ありがとうございます!!! さおり 12/5/30(水) 1:45 お礼[未読]

【72045】特定の文字があるときのみ処理を行うには...
質問  さおり  - 12/5/22(火) 10:25 -

引用なし
パスワード
   簡単な質問と思うのですが、時間をかけていろいろやってみてもまったく解決できません。よろしくお願いいたします。

 D    E    F   G   H 
【品名】 【数量】【単価】空の列【金額】
うどん   3   1000     3000
飲み物   2    500     1000
 *
 *
サービス  2    500     1000
小 計               5000
消費税               250
合 計               5250

列ABCはGと同様、空の列です。
インターネットで検索しながら、下記マクロを作成しました。
自らデータ入力をするセルは、Aのさまざまな品名とサービス、Bの数量です。
他(計算式・文字入力など)はマクロで入力できるようにしました。
問題は、サービスが入るときと入らないときがあり、入るときはE数量の数字の色を白にして印刷に出ないようにしたいです。(サービスの行は不定です)
その設定をマクロに入れ込みたいのですが、どのように設定すればいいのかわかりません。
また、自作マクロは無駄が多く効率も悪いと思います。ご助言いただけると勉強になります。よろしくお願い致します。

Sub 計算()

  Range("F7:F20") = "=VLOOKUP(RC[-2],金額,2,0)"  '種目から単価参照

  Range("H7") = "=RC[-2]*RC[-3]"         '数量×単価
  Range("H7").Select
  Selection.AutoFill Destination:=Range("H7:H20"), Type:=xlFillDefault
                          '20行分コピー
  Range("D65536").End(xlUp).Select
  Selection.Offset(1, 2).Select
  ActiveCell.Resize(15, 3).Select         'エラー分を選択、消去
  Selection.ClearContents
                      
 
  Range("D65536").End(xlUp).Select
  Selection.Offset(1, 0).Select
  ActiveCell.FormulaR1C1 = "小 計"        '小計 文字を入力
  Selection.Offset(0, 4).Select          '小計計算セルへ移動
  ActiveCell.FormulaR1C1 = WorksheetFunction.Sum(Range("H7:H" & Rows.Count))                 '小計を計算する数式を設定
   
  Selection.Offset(1, -4).Select
  ActiveCell.FormulaR1C1 = "消費税(5%)"  '消費税 文字を入力
  Selection.Offset(0, 4).Select
  ActiveCell = "=R[-1]C*0.05"         '消費税を計算
  
  Selection.Offset(1, -4).Select
  ActiveCell.FormulaR1C1 = "合 計"      '合計 文字を入力
  Selection.Offset(0, 4).Select
  ActiveCell = "=R[-1]C+R[-2]C"        '合計を計算
  Range("M7").Select

End Sub

【72074】Re:特定の文字があるときのみ処理を行う...
回答  hint  - 12/5/26(土) 9:28 -

引用なし
パスワード
   > 問題は、サービスが入るときと入らないときがあり、
> 入るときはE数量の数字の色を白にして印刷に出ないようにしたいです。
>(サービスの行は不定です)

対応が難しい点はどこでしょうか?
1)D列のセルに"サービス"という文字列が入っているかどうかの判定ですか?
2)文字列の色を白にする方法ですか?

まず、2)については、色を白にする作業をマクロ記録すればコードが得られますよ。
1)については、
For k = 1 to 100  ' 1,100は例示です。
  If Cells(k,"D").Value = "サービス" Then
   '' ここに色を変える処理を書きます
  End If
Next
のような書き方ですね。

なお、提示されたマクロは、マクロ記録をそのままのようですので、
逐一、右に何歩、下に何歩みたいなことが残っていてわかりにくいです。
普通、こういうところは手を入れて直しますね。

例えば、こんな風に書いた方が、それぞれのセルの位置関係も分かり
易いでしょう。(内容は見ていません)

Sub 計算2()
  Dim lastR As Range
  Range("F7:F20").FormulaR1C1 = "=VLOOKUP(RC[-2],金額,2,0)"  '種目から単価参照

  Range("H7").FormulaR1C1 = "=RC[-2]*RC[-3]"         '数量×単価
  Range("H7").AutoFill Destination:=Range("H7:H20"), Type:=xlFillDefault
                          '20行分コピー
  Set lastR = Range("D65536").End(xlUp)
  
  lastR.Offset(1, 2).Resize(15, 3).ClearContents 'エラー分を選択、消去

  lastR.Offset(1, 0).Value = "小 計"
  lastR.Offset(1, 4).FormulaR1C1 _
    = WorksheetFunction.Sum(Range("H7:H" & Rows.Count)) '小計
                          
  lastR.Offset(2, 0).Value = "消費税(5%)"
  lastR.Offset(2, 4).FormulaR1C1 = "=R[-1]C*0.05" '消費税
 
  lastR.Offset(3, 0).Value = "合 計"
  lastR.Offset(3, 4).FormulaR1C1 = "=R[-1]C+R[-2]C" '合計
End Sub

なお、
'小計 文字を入力
のようなコメントは書かない方がいいです。
無くてもわかる内容であって、
返って本当に必要なコメントの邪魔になります。
コメント一つにも神経を使ったほうがいいです。

(上のコードでも、With lastR ..... End Withなどの使用で、
さらに改善することもできるでしょう。あくまで例示です。)

【72107】ありがとうございます!!!
お礼  さおり  - 12/5/30(水) 1:45 -

引用なし
パスワード
   丁寧な解説と改善マクロをありがとうございます。
ひとつひとつ見ていただいて、感謝しています。
とても勉強になりましたし、ぐちゃぐちゃなマクロがスッキリして分かりやすく、大満足です。
他にも似たような表を作成しているので、今回のマクロを参考にして作成してみます。
本当にありがとうございました。

1760 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free