• ベストアンサー

VBAで範囲選択して合計して罫線を引く方法

過去の投稿を見て、似たような物を見つけても どうしても応用ができません。 重複してしまっているかもしれませんが 宜しくお願い致します。 集計表の一番下にその月が20〆だったら 20 と入力します(例:A37に20と) すると、21日であるB24から月末のB34の合計が B37に計算され(来月送りの合計) 20日であるB23のセルの下線又は 21日であるB24のセルの上線が1ptの赤線になる という自動処理ができるようにしたいのです。 曜日によって18日〆になったり 25日〆になったり いろいろなので 自動でできると楽になると思いました。 (月末は毎月31日のB34で構いません) どうぞよろしくお願い致します。

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

  • ベストアンサー
noname#123709
noname#123709
回答No.6

#1です。 >シート単位の処理で構わないのですが 下記で現在選択されているシートに限った処理となります。 先ほどの記述内に「.Range("A1").Value = .Range("A1").Value + 1」と あったのですが、不要でした。すみません。ただエラーとは無関係だと思い ます。こちらではエラーの再現ができません。型云々なので変数だと思うの ですが・・・。申し訳ないです。 Sub test() Dim i As Integer Application.ScreenUpdating = False With ActiveSheet i = .Range("A37").Value If i >= 1 And i <= 31 Then .Range("A4:B35").Borders(xlInsideHorizontal).LineStyle = xlNone .Range(Cells(i + 3, 1), Cells(i + 3, 2)).Select With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = 3 End With If i = 31 Then .Range("B37").Value = 0 Else .Range("B37").Value = "=SUM(B" & i + 4 & ":B34) " End If End If End With Application.ScreenUpdating = True End Sub

vi_vi
質問者

お礼

素早いお返事ありがとうございました! そして、今回はエラーも出ず きれいに処理されました! すごく嬉しい瞬間でした☆ミ(*^▽^*)ノ彡☆ こちらの不手際で嫌な思いをさせてしまい すみませんでした。 ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

noname#123709
noname#123709
回答No.5

>ひとりの人の発言で、全ての人の書いたことを否定はしないでくださいね。 >こちらの書いていることが無意味になってしまいますから 逆に否定された#1です。私の理解力がなかったのでしょう。 質問者様に補足して頂いた内容で作成してみましたが下記はBOOKの中のシート 全体に実行します。 2回以上使用される場合もあるかもしれませんので一度罫線を消してから条件に あった罫線を引きます。 Sub test() Dim Sh As Worksheet Dim i As Integer Application.ScreenUpdating = False For Each Sh In Worksheets With Sh .Select i = .Range("A37").Value If i >= 1 And i <= 31 Then .Range("A4:B35").Borders(xlInsideHorizontal).LineStyle = xlNone .Range("A1").Value = .Range("A1").Value + 1 .Range(Cells(i + 3, 1), Cells(i + 3, 2)).Select With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = 3 End With If i = 31 Then .Range("B37").Value = 0 Else .Range("B37").Value = "=SUM(B" & i + 4 & ":B34) " End If End If End With Next Application.ScreenUpdating = True End Sub

vi_vi
質問者

補足

再度のお返事ありがとうございます! 実行すると ”型が一致しません”とメッセージが出て OK で閉じると右隣のシートが表示され (最後ではなく一つ隣です。右にはまだシートがあります) 元のシートに戻ると 希望通りの処理がなされていました!(ありがとうございます!) エラーメッセージの理由は どのようなことが考えられますか? (自分で、エクセルシート内の不具合に通じることを検証したいのですが) 実際に見ていただかないと無理そうでしたら、 シート単位の処理で構わないのですが その為にはどこの部分を削除したら いいのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 私の想像していたレイアウトと、ほとんど狂いはありませんね。ひとりの人の発言で、全ての人の書いたことを否定はしないでくださいね。こちらの書いていることが無意味になってしまいますから。 もし、冷静に私のコードをお読みになっていれば、既に、加工・変更が可能なのでしょうけれども、どうやら、読んではいらっしゃらないようです。今、ブックに加工しなければならない複数のシートがあるようですから、もう少し、手を加えないといけないようですね。 どの程度分るかによって回答も違ってくるように思っています。今のところ、ワークシートメニューの中の、フォーム・ツールバーのコマンドボタンで、各シートにつけていただくのが一番簡単でよいかと思っています。

vi_vi
質問者

お礼

今回こちらの不手際で 嫌な思いをさせてしまい 申し訳ありませんでした ありがとうございました!!

vi_vi
質問者

補足

お返事ありがとうございます! こちらの稚拙な理解力のせいで 失礼してしまい申し訳ありませんでしたm(_ _)m 実行すると ”どこか間違っていませんか?” と出てしまいます。 しかし、思い通りの処理はされています!ありがとうございます! このメッセージは何が原因で出るのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 以下は、シートの下のほうのシート・タブを右クリックしてコードの表示で、以下を貼り付けます。貼り付けて、以下の場所に間違いないようでしたら、Alt + Q で画面を閉じたら出来上がりです。 罫線には、ポイントを表す単位はありませんが、「1ptの赤線」は、xlThinに相当します。 A37 に数字を入れさえすれば、罫線が引かれます。 '----------------------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range)   Dim myDates() As Double     '日付入力はどこでしますか?   Const INPUTCELL As String = "A37"   'B列から何列罫線を引きますか?   Const COLUMNCOUNT As Integer = 5     If Target.Address(0, 0) <> INPUTCELL Then Exit Sub     '日付セルの範囲   Set Rng = Range("B4:B34")     Application.EnableEvents = False     ReDim myDates(Rng.Count)     '罫線消去   For k = 5 To 12        Rng.Resize(, COLUMNCOUNT).Borders(k).LineStyle = xlNone   Next k     '日付の検索   For Each c In Rng    If IsDate(c.Value) Then      myDates(i) = Day(c.Value)      Else      myDates(i) = c.Value    End If    i = i + 1   Next   On Error Resume Next   j = 0   j = WorksheetFunction.Match(Range(INPUTCELL).Value, myDates(), 0)   On Error GoTo 0   If j = 0 Then MsgBox "どこか間違っていませんか?", vbInformation: GoTo PrcQuit   With Rng.Cells(j, 1).Resize(, COLUMNCOUNT).Borders(9)    .LineStyle = xlContinuous    .Weight = xlThin    .ColorIndex = 3   End With   Set Rng = Nothing   Beep PrcQuit:   Application.EnableEvents = True End Sub

vi_vi
質問者

補足

お返事ありがとうございます。 SuperMildさんのご指摘のとおり 説明不足でした。 失礼致しました。

全文を見る
すると、全ての回答が全文表示されます。
noname#74310
noname#74310
回答No.2

Sub test() Dim i, j, k As Integer k = Cells(37, 1) For i = k To 31 j = j + Cells(i + 4, 2) Next i Cells(37, 2) = j Worksheets("Sheet1").Cells(k + 3, 2).Borders(xlEdgeBottom).LineStyle = xlContinuous Worksheets("Sheet1").Cells(k + 3, 2).Borders(xlEdgeBottom).Weight = xlThin Worksheets("Sheet1").Cells(k + 3, 2).Borders(xlEdgeBottom).ColorIndex = 3 End Sub

vi_vi
質問者

補足

お返事ありがとうございます。 SuperMildさんのご指摘のとおり 説明不足でした。 失礼致しました。

全文を見る
すると、全ての回答が全文表示されます。
noname#123709
noname#123709
回答No.1

もっと具体的にわかりやすく書けませんか? >21日であるB24 他の人にはわかりません。 どんな表になっているのでしょうか?

vi_vi
質問者

補足

お返事ありがとうございます! ひとりよがりの書き方で失礼しました。 月別の人数集計表です。 日付の1日はA4セルから始まっています。    A (日付)  B(人数) 4  1     1 5  2     0 6  3     2 7  4     5 ・  ・    ・ ・  ・    ・ ・  ・    ・ 23 20     3 24 21     2 ・  ・    ・ ・  ・    ・ ・  ・    ・ 34 31     1 ------------------------ 35      (人数の合計←sum(B4:B34)) 36 37 □     ■(←今まではsum(B24:B34)と手動で入力)   ↑   ここ(A37)にこの月の〆日が20日だったとしたら20と入力すると ■(B37)に21日から31日までの 人数の合計が計算され表示されて(次月送りの合計となります。) 20日のセルの下線が赤線になる・・・というのは、 20日で締めた とわかりやすいようにしたいのです。 (最初の質問ではヒトツのセルだけでしたが こうして見ると(A23:B23)のセルの下線を 赤にしたいです) 今までは毎月手動でB37に入れてあるsumの 範囲を変えて罫線の設定をして・・・ とやっているのですが ブック内のシート全てが同じ締め日だったら まだいいのですが、 取引先ごとにまちまちなので シートの複数選択ではできない為 自動でできたらと思い試行錯誤して 全然できなかった次第です。 月ごとの合計も必要 かつ 各取引先の締め日と次月送りもわかりやすく という意図です。 上の書き方では、どうでしょうか? 宜しくお願いします

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • sumifのように条件に見合う合計を「数値」ではなく「データ(セル)」の合計を集計したいのですが

    SUMIFを使って合計範囲の数値の合計を求めるように、合計範囲の「データが入力されているセル」の合計を求めたいのですが、何かいい関数はありませんでしょうか? 言い換えると、COUNTAを使ってセルの個数を求める場合に検索条件をSUMIFのように特定の検索条件を指定できる関数です。 いろいろ探しましたがうまい方法が見当たりません。 使用方法としては、各曜日ごとのメニュー別の売上金額の合計と人数の合計を求めようとしています。 ワークシートに入力されてるデータは ・各曜日 ・顧客名 ・メニューと支払われた金額 です。 SUMIFを使って、検索条件に各曜日をあてはめ、曜日ごとのメニュー別売上は集計できました。 金額が入力されているセルを合計すれば各メニューごとの人数まで集計できるはずなのですが、SUMIFが「数値」しか集計できない為にそれに代わる関数を探しています。 どうぞよろしくお願い致します。

  • エクセル 異なる範囲の集計(合計)

    誰かアドバイスをお願いします。 エクセルで下記の様な異なる行数(範囲)を自動集計させたい場合はどうすればよろしいでしょうか?       A      B      C     D        E      日付    注文NO  金額   注文金額計  日別注文金額合計 1   5月1日     1     50     150       250 2                  50       3                  50                4             2    50     100 5                  50                    6   5月2日     3     50     50        150 7             4     50    100 8                   50                                            やりたい事は、D列へ注文金額計に注文NO別の合計金額を集計させる事(注文NOごとの一番上の行のみです。)  と E列へ日別の注文金額合計を集計させる事です。(日別の一番上の行のみに表示)   sumif関数を使えばうまく行きそうなのですが、問題が2つあります。 (1)集計条件の日付や注文NOは、重複している場合は、一行のみ表示の仕様です。(他ファイルからデータを貼りける為、その様な仕様になり、極力入力する事は避けたいです。) (2)合計範囲の行数が一定ではないので出来ればEやD列の全てのセルに関数なりを設置し、一番最上行のみに結果を表字したい。例えばsumif関数をE,D列全ての行に設定してしまうと同じ集計結果が何行にも渡って表示されてしまうのは避けたい。(上の例でいえばE列に150が何行も表示されてしまう。 かといって重複行の最上行のみに関数を設定するのは、一行ずつの作業になってしまう為、避けたい。 何かいい方法がないでしょうか?   個人的には、関数の方がやりやすいのでいいのですが、マクロやVBEでもあれば教えて頂けますでしょうか?

  • Excelでの集計表の作り方

    Excelで1ヶ月の集計表を作っていますがどうしてもわからない事があります。まず縦に1ヶ月分の日付を入れて横に純売上(B列)と消費税(C列)と総売上(D列)の表を作りました。日付は月を入力すると自動で変わる様にして月末も30日までの月は最後のセルも空白になる様に、土日祝は曜日の文字の色も変わります。その後が問題なんですが、曜日毎の集計を自動計算するだけならSUMIF関数ですぐに出来るんですが日祝の合計を1つのセルに集計させたいんです。月によって祝日の曜日も変わりますしどうしてもその方法がわかりません。説明が下手で申し訳ありませんがわかる方がいればお願いします。

  • エクセル 合計値の表示方法

    エクセルで作りたい数式があるのですがうまくできません。 集計の応用?とは思っているのですが 知識不足の為、どうしてよいのかわかりません。 *説明も変かもしれませんが多少多めにみてくださいっ。   A   B   C   D    種類 内容   金額  合計 1 果物 りんご  500   ☆ 2 果物 りんご  500 3 動物 うさぎ  900   ☆ 4 動物 ぱんだ  700   ☆ この表において集計で合計を出すとAの列(種類)を基準に 合計を2Cと3Cの間に(挿入で??)表示することができます。 その表示場所を2Cと3Cの間ではなく、☆のあるセルへ表示させたいのですが そのようなことは可能でしょうか??? もし出来るなら教えてください。 よろしくおねがいいたします。

  • Excelで選択範囲の合計をマクロで

    Excel2003を使用しています。 ステータスバーに、選択範囲の合計、平均、データの個数などが 表示されますが、同じ機能をマクロを使って、 固定のセルに表示できないでしょうか? 例えば、任意のセルを選択すると、 A1に選択範囲の合計、A2に選択範囲の平均が自動で表示される というような機能です。 Excel2007では、同様の機能がステータスバーにあるようなのですが。 よろしくお願い申し上げます。

  • 土曜・日曜・祝日に罫線を引く VBA

    条件付き書式を使い、土曜・日曜・祝日に自動的にB列~N列までセルに色がつくように設定してあります。 (例:セルの色は省略) B行(日付) C行(曜日)・・・・・・・・・・N行   1         日   2         月   3         火   4         水   5         木   6         金   7         土   8         日   ・          ・   ・          ・   ・          ・   31         火 色がついたセル(土・日・祝)のB列~N列に、セルの真ん中を通るような赤い線をマクロを使って引きたいと思っています。そういったことは可能でしょうか? よろしくお願いいたします。

  • VBA Pivot複数セルを合計から平均へ

    Windows7とExcel 2010です。 Pivotテーブルで作成されている表に対して、合計で集計されている複数のセルを選択して、一括して、平均へ変更するVBAを教えていただけないでしょうか。 異なるPIVOTテーブルでも使いたいので、Pivotテーブルの名称やフィールドの名称はマウスで選択した際に自動で取得したいです。 例: 下記の集計があります。(一時間毎の発電量を集計) 元      合計 / 電力  合計 / 日射量 4月2日  1000     3000 4月3日   500     2000 操作 1) 「合計 / 電力」「合計 / 日射量」をマウスで選択 2) マクロを実行すると  「平均 / 電力」「平均 / 日射量」となる。 よろしくお願いします。

  • セルに数字が入っていて、それを選択すると合計が下にでるようにするには?

    こんにちは、みなさん!! 【質問】セルA1とB1に、それぞれ数字がA1→100B1→100と 入力されている。A1とB1を選択すると、自動的に下に合計=200 と表示される。 この機能がいつしか使えなくなってしまいました。 選択しても、合計が表示されないのです。また、合計が表示される ようにするにはどうすれば良いでしょうか? ご存知の方いらっしゃいましたらよろしくお願いします。

  • エクセルの選択範囲の同期について

    エクセルでの質問です。 A1のセルでC列を合計し、「=SUM(C1:C5)」 B1のセルでいくつカウントしたのかを知りたい場合、どう書けばいいでしょうか。(この場合B1のセルには「5」とあらわれてほしいです) 「=count(C1:C5)」と書ければ楽なのですが、A1のセルに数値が入っていなかったり、範囲の書き換えなどがよくあるのでB1には自動でカウントしてほしいのです。 よろしくお願いします

  • Excel VBA

    Excel VBAについて シート1にはデータが入ってます。 G列に日付、L列に商品名、N列に件数。 シート2には集計結果を入力したいです。 セルB2に、日付が10月1日から15日までで、商品名がAの件数の合計。 セルB3は、日付が10月16日から末日まで、セルB4は、日付が11月1日から15日までと半月毎に集計を半年後の末日まで繰返し、B2の数行下には、商品名Bの集計行を作り、その数行下には商品名Cの集計行を作りたいです。 これまでは関数SUMIFSで集計していましたが、複数店舗分のシートの更新・メンテナンスが大変なので、VBAでの集計を考えいろいろ調べてるのですが、方法が思い付かないので、ご教授ください。

このQ&Aのポイント
  • G3310プリンターを使って数年間印刷していますが、最近印字結果が良くありません。特にモノクロで印刷すると、2枚目以降はグリーンになってしまいます。クリーニングなどの対策を試しましたが、一時的に改善されても問題は解決しません。さらに、インクの消費量も少ないため、原因がわかりません。この問題を解決する方法はありますか?
  • G3310プリンター購入から約3年が経ちましたが、最近の印字結果に問題があります。特にモノクロ印刷時に2枚目以降がグリーンになってしまい、正しい印刷ができません。試しにクリーニングを行ったり、インクを交換してみましたが、一時的な改善しかありませんでした。使っているインクの残量もまだ半分程度です。この問題を解決する方法はないでしょうか?
  • G3310プリンターを使用して約3年が経過しましたが、最近の印字結果が悪いです。特にモノクロ印刷時に2枚目以降がグリーンになってしまいます。クリーニング作業やインクの交換を行いましたが、一時的に改善されても問題は解消されませんでした。また、まだインクの半分程度しか使っていないため、インクの問題であるとも考えにくいです。この問題を解決する方法はありますか?
回答を見る

専門家に質問してみよう