• 締切済み

エクセルの小計(集計)を実行したデータに罫線を引く

エクセルに標準装備されている小計(データ⇒小計)機能は便利でよく使用しているのですが、集計結果行(xxx集計と表示される行)以外のデータに罫線を引きたいのですが、行数が多くて苦労する場合があります。 添付ファイルの様に集計行以外のデータ行に自動で罫線を引くマクロやVBAがあればご教示願います。 ※当然ですが、集計行以外のデータ行の行数は毎回変動します。 

みんなの回答

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

 回答No.3です。 >添付ファイルの様に集計行以外のデータ行に自動で罫線を引くマクロやVBAがあればご教示願います。 との事ですので、ついでにその様な働きをするVBAの一例も回答させて頂きます。  尚、下記のVBAでは、表の枠線が引かれている範囲がA列~H列の2行目以下のセル範囲である場合に関するもので、表の外枠を中太の実線で、内側にある線を細い点線で引きなおす様になっております。  もし表の始まる行や列の位置、それに表の右端の列の位置が異なっている場合には、VBAの構文の冒頭辺りにある Const FirstRow = 2 '表の枠線が引かれている最初の行 Const FirstColumn = "A" '表の枠線が引かれている最初の列 Const LastColumn = "H" '表の枠線が引かれている最後の列 の所で設定されている定数の値を適時修正して下さい。 Sub QNo9217396_エクセルの小計を実行したデータに罫線を引く() Const FirstRow = 2 '表の枠線が引かれている最初の行 Const FirstColumn = "A" '表の枠線が引かれている最初の列 Const LastColumn = "H" '表の枠線が引かれている最後の列 Dim LastRow As Long, c As Range LastRow = Range(FirstColumn & Rows.Count).End(xlUp).row 'データが存在している最終行の取得 If LastRow < FirstRow Then MsgBox "処理すべきデータが見当たりませんません。" & vbCrLf _ & "マクロを終了します。", vbExclamation, "データ無し" Exit Sub End If Application.ScreenUpdating = False Application.Intersect(Range(FirstColumn & FirstRow & ":" & LastColumn _ & Rows.Count), ActiveSheet.UsedRange).Borders.LineStyle = xlNone '表の罫線消去 With Range(FirstColumn & FirstRow & ":" & LastColumn & LastRow) With .Borders 'セル範囲の全ての罫線 .LineStyle = xlDot '点線(ドット) .ColorIndex = xlAutomatic '色設定[自動] .Weight = xlThin '細線 End With With .Borders(xlEdgeTop) 'セル範囲の上端の罫線 .LineStyle = xlContinuous '実線 .ColorIndex = xlAutomatic '色設定[自動] .Weight = xlMedium '中太線 End With With .Borders(xlEdgeLeft) 'セル範囲の左端の罫線 .LineStyle = xlContinuous '実線 .ColorIndex = xlAutomatic '色設定[自動] .Weight = xlMedium '中太線 End With With .Borders(xlEdgeRight) 'セル範囲の右端の罫線 .LineStyle = xlContinuous '実線 .ColorIndex = xlAutomatic '色設定[自動] .Weight = xlMedium '中太線 End With For Each c In Range(FirstColumn & FirstRow & ":" & FirstColumn & LastRow) If c.Value Like "*集計" Then 'その行の左端のセルの値が「~集計」となっている場合 With Application.Intersect(c.EntireRow, .Offset(0)) .Borders.LineStyle = xlNone 'その行の罫線消去 With .Borders(xlEdgeTop) 'その行の上端の罫線 .LineStyle = xlContinuous '実線 .ColorIndex = xlAutomatic '色設定[自動] .Weight = xlMedium '中太線 End With If c.row < LastRow Then 'その行が最終行ではない場合 With .Borders(xlEdgeBottom) 'その行の下端の罫線 .LineStyle = xlContinuous '実線 .ColorIndex = xlAutomatic '色設定[自動] .Weight = xlMedium '中太線 End With End If End With End If Next c End With Application.ScreenUpdating = True End Sub

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

>ちなみに中に引く罫線の種類を分ける事は可能でしょうか? >(例:外枠:実戦 内枠:点線)  条件が満たされた際に引き直された後の罫線が、標準の太さである細線であれば、条件付き書式でも使う事が出来ますから、(ちょっと複雑になりますが)工夫次第で外枠の線が例えば中太線の実線で、内側の縦横の線が「標準の太さである細線の点線」で表示される様にする事も出来ます。  どうするかと申しますと、はじめに内側の縦線のみが細い点線で、他の線は(内側の横線も含めて)全て中太の実線となっている様にしておいてから、2つの条件付き書式を使って「セルの上辺が表の内側になっているセルの上側の罫線」と「セルの下辺が表の内側になっているセルの下側の罫線」をそれぞれ細い点線に変え、もう1つの別の条件付き書式で「集計行」の縦線を消してしまえば良い訳です。  その場合の設定方法は以下の様なものとなります。 ※尚、下記の条件付き書式の例は、表の枠線が引かれているセル範囲の左端の隅のセルがA2セルである場合に対応するものです。(ですから、もし表がA2セル以外のセルから始まっている場合には、それに合わせて適時修正して下さい) 「表の左上の隅のセルの1の下のセル」(A3セル)~「表の右端の列で、集計行の中で最も下にある行のセル」のセル範囲を選択   ↓ Excelウインドウの左上の辺りにある[ホーム]タブをクリック   ↓ 現れた「フォント」グループの中にある[罫線]ボタンの右側の[▼]印のボタンをクリック   ↓ 現れた選択肢の中から[その他の罫線]と記されている箇所を選択してクリック   ↓ 現れた「セルの書式設定」ダイアログボックスの[罫線]タブの「スタイル」欄の中に並んでいる様々なスタイルの線の中から中太の実線を選択してクリック   ↓ 「セルの書式設定」ダイアログボックスの[罫線]タブの[外枠]ボタンと内側の横線のボタンをそれぞれクリックし、左右両端の縦線と全ての横線を中太の実線にする   ↓ 「スタイル」欄の中に並んでいる様々なスタイルの線の中から細い点線を選択してクリック   ↓ 「セルの書式設定」ダイアログボックスの[罫線]タブの内側の縦線のボタンをクリックし、内側の縦線のみを細い点線にする   ↓ 「セルの書式設定」ダイアログボックスの[OK]ボタンをクリック   ↓ Excelウィンドウの[ホーム]タブの「スタイル」グループの中にある[条件付き書式]ボタンをクリック   ↓ 現れた選択肢の中にある[ルールの管理]をクリック   ↓ 現れた「条件付き書式ルールの管理」ダイアログボックスの中にある[新規ルール]ボタンをクリック   ↓ 現れた「新しい書式ルール」ダイアログボックスの「ルールの種類を選択して下さい」欄の中にある[数式を使用して、書式設定するセルを決定]をクリック   ↓ 現れた「次の数式を満たす場合に値を書式設定」欄の中に =COUNTIFS($A3,"<>*集計",$A2,"<>*集計") と入力   ↓ 「新しい書式ルール」ダイアログボックスの[書式]ボタンをクリック   ↓ 現れた「セルの書式設定」ダイアログボックスの[罫線]タブをクリック   ↓ 現れた「セルの書式設定」ダイアログボックスの[罫線]タブの[クリア]ボタンをクリック (ボタンが灰色表示となっていて押す事が出来ない場合は、そのまま次の操作へ進んで下さい)   ↓ 現れた「セルの書式設定」ダイアログボックスの[罫線]タブの「スタイル」欄の中に並んでいる様々なスタイルの線の中から細い点線を選択してクリック   ↓ 「セルの書式設定」ダイアログボックスの[罫線]タブの上の横線のボタンをクリックし、上の横線のみを細い点線にする   ↓ 「セルの書式設定」ダイアログボックスの[OK]ボタンをクリック   ↓ 「新しい書式ルール」ダイアログボックスの[OK]ボタンをクリック   ↓ 「条件付き書式ルールの管理」ダイアログボックスの中にある[新規ルール]ボタンをクリック   ↓ 現れた「新しい書式ルール」ダイアログボックスの「ルールの種類を選択して下さい」欄の中にある[数式を使用して、書式設定するセルを決定]をクリック   ↓ 現れた「次の数式を満たす場合に値を書式設定」欄の中に =COUNTIFS($A3,"<>*集計",$A4,"<>*集計") と入力   ↓ 「新しい書式ルール」ダイアログボックスの[書式]ボタンをクリック   ↓ 現れた「セルの書式設定」ダイアログボックスの[罫線]タブをクリック   ↓ 現れた「セルの書式設定」ダイアログボックスの[罫線]タブの[クリア]ボタンをクリック (ボタンが灰色表示となっていて押す事が出来ない場合は、そのまま次の操作へ進んで下さい)   ↓ 現れた「セルの書式設定」ダイアログボックスの[罫線]タブの「スタイル」欄の中に並んでいる様々なスタイルの線の中から細い点線を選択してクリック   ↓ 「セルの書式設定」ダイアログボックスの[罫線]タブの下の横線のボタンをクリックし、下の横線のみを細い点線にする   ↓ 「セルの書式設定」ダイアログボックスの[OK]ボタンをクリック   ↓ 「新しい書式ルール」ダイアログボックスの[OK]ボタンをクリック   ↓ 「条件付き書式ルールの管理」ダイアログボックスの中にある[新規ルール]ボタンをクリック   ↓ 現れた「新しい書式ルール」ダイアログボックスの「ルールの種類を選択して下さい」欄の中にある[数式を使用して、書式設定するセルを決定]をクリック   ↓ 現れた「次の数式を満たす場合に値を書式設定」欄の中に =COUNTIF($A3,"*集計") と入力   ↓ 「新しい書式ルール」ダイアログボックスの[書式]ボタンをクリック   ↓ 現れた「セルの書式設定」ダイアログボックスの[罫線]タブをクリック   ↓ 現れた「セルの書式設定」ダイアログボックスの[罫線]タブの[クリア]ボタンをクリック (ボタンが灰色表示となっていて押す事が出来ない場合は、そのまま次の操作へ進んで下さい)   ↓ 現れた「セルの書式設定」ダイアログボックスの[罫線]タブの「スタイル」欄の中に並んでいる様々な線のスタイルの中から[なし]を選択してクリック   ↓ 「セルの書式設定」ダイアログボックスの[罫線]タブの右の縦線のボタンと左の縦線のボタンをそれぞれクリックし、左右全ての縦線を非表示にする   ↓ 「セルの書式設定」ダイアログボックスの[OK]ボタンをクリック   ↓ 「新しい書式ルール」ダイアログボックスの[OK]ボタンをクリック   ↓ 「条件付き書式ルールの管理」ダイアログボックスの中にある[新規ルール]ボタンをクリック   ↓ 現れた「新しい書式ルール」ダイアログボックスの「ルールの種類を選択して下さい」欄の中にある[数式を使用して、書式設定するセルを決定]をクリック   ↓ 現れた「次の数式を満たす場合に値を書式設定」欄の中に =AND(COUNTIF($A3,"*集計"),$A4="") と入力   ↓ 「新しい書式ルール」ダイアログボックスの[書式]ボタンをクリック   ↓ 現れた「セルの書式設定」ダイアログボックスの[罫線]タブをクリック   ↓ 現れた「セルの書式設定」ダイアログボックスの[罫線]タブの[クリア]ボタンをクリック (ボタンが灰色表示となっていて押す事が出来ない場合は、そのまま次の操作へ進んで下さい)   ↓ 現れた「セルの書式設定」ダイアログボックスの[罫線]タブの「スタイル」欄の中に並んでいる様々な線のスタイルの中から[なし]を選択してクリック   ↓ 「セルの書式設定」ダイアログボックスの[罫線]タブの下の横線のボタンをクリックし、下の横線のみを非表示にする   ↓ 「セルの書式設定」ダイアログボックスの[OK]ボタンをクリック   ↓ 「新しい書式ルール」ダイアログボックスの[OK]ボタンをクリック   ↓ 「条件付き書式ルールの管理」ダイアログボックスの「適用先」欄が4箇所とも全て「最初に選択したセル範囲と同じセル範囲」になっている事を確認 ※尚、「適用先」欄に設定されているセル範囲が間違っている場合には、「適用先」欄をクリックし、適用するセル範囲を入力しなおして下さい。(その際には、カーソルとマウスの左ボタンによる範囲選択が使えます)   ↓ 「条件付き書式ルールの管理」ダイアログボックスの[適用]ボタンをクリック   ↓ 「条件付き書式ルールの管理」ダイアログボックスの[OK]ボタンをクリック  以上です。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.2

>ちなみに中に引く罫線の種類を分ける事は可能でしょうか? 条件付き書式で設定できるのはセル単位なので中に引く罫線は定義できません。 左右上下の線の種類と線の色を個別に設定可能ですが、太さは変えられないみたいです。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.1

>添付ファイルの様に集計行以外のデータ行に自動で罫線を引くマクロやVBAがあればご教示願います。 条件付き書式で十分です。 範囲を選択して条件付き書式で「数式を使用して、書式設定するセルを決定」を選択し、下記の数式を入力します。 =FIND("集計",$A1&"集計")>LEN($A1) A列の値に"集計"という文字が含まれていない行について書式設定を升目の罫線ありにすれば良いでしょう。

gxtsf295
質問者

お礼

ありがとうございます。 教えて頂いて事でおおよその問題が解決しました。

gxtsf295
質問者

補足

ちなみに中に引く罫線の種類を分ける事は可能でしょうか? (例:外枠:実戦 内枠:点線)

関連するQ&A

  • 桐の集計(集計行設定のこと)について教えて下さい

    こんにちは。 Winで桐8を使ってます。 集計(集計行)のことを教えて下さい。 データを、小計・中計・大計と行集計をかけました。 このときの中計の集計行に、小計の行数を入れることは可能でしょうか? 例)顧客番号、顧客種別、月、金額・・・・ のように同じ顧客が月別に、複数回入金します。 (入金されたデータは月別で複数行になります。) 小計は「顧客毎」に集計。 中計は「顧客種別毎」に集計。 このときに、中計の欄に、顧客種別毎の顧客数の実数(小計の行数)を入れたいのです。 今の私の知恵では、データ行の個数が出てしまい、同一の顧客番号が複数行あると複数でカウントしてしまうのです。 上手く説明できず恐縮ですが、ご教授くださると有り難いです。 よろしくお願いします。

  • Excelの小計機能をVBAでやりたいです。

    Excelの小計機能をVBAでやりたいのですが、うまくいきません。 3列目に「取引日」があり、 10列目に「金額」があり、 「取引日」別に金額の小計を出したいのですが、 手動で、データ→小計をやると、日付が「2011/7/25 集計」とうまくいくのですが、 VBAで、Subtotalをやると、日付が「25/7/2011 集計」となってしまいます。 VBAの一部ですが、 並び替え後 Selection.Subtotal GroupBy:=3, Function:=xlSum, TotalList:=Array(10), SummaryBelowData:=True を実行させています。 取引日も全て「2011/7/25」などの形式で入力されています。 VBAで、「25/7/2011 集計」を「2011/7/25 集計」と指示するにはどうしたらよいでしょうか。

  • ExcelのSUM関数の集計範囲を可変にしたい

    ExcelのSUM関数の集計範囲を可変にしたい 1.状況、問題点 商品毎の売上、利益を管理するリスト表が あり、その表の行に対する追加、更新処理を VBAマクロで行っています。 使用環境はExcel2010 リスト表は、帳票としての見易さを考慮して、 同じカテゴリに属する複数の行に対して小計行 を設けカテゴリ別の売上、利益を集計しています カテゴリに属する行範囲に対してSUM関数を使っ ているということです (例1)この表にマクロで行を追加させる際、 あるカテゴリの小計欄で参照している集計 範囲の行の途中に行を挿入する場合は、行 を追加してもSUM関数の集計範囲は自動的に 拡大されます。   A  B    C   1 項目   売上    2  田中   100 3 小計   100   4 山田 200 ⇒ 挿入   5  佐藤 300   6  小計   600 式 = SUM(C4:C5) 3行目と4行面の間に行を挿入するとき  SUM関数の集計範囲は自動的に拡大され る  SUM(C2:C4) ⇒ SUM(C2:C5) (例2)挿入する行が集計行の直ぐ上の場合 SUM関数の集計対象範囲がずれてしまう   A   B    C   1 項目  売上   2  田中  100 3 小計  100   4 山田 200   5  佐藤 300 ⇒ 挿入    6  小計 600 ※      ※ 式 SUM(C4:C5) は   自動的にはSUMC(C4:C6)とはならない 2.実現したいこと       小計の直前にに行を挿入した場合も自動的に   集計範囲が変わるようにしたいのです。 実装方法 案1 (1)インストラクタのネタ帳  http://www.relief.jp/itnote/archives/003417.php  に、「表全体の最後の行」※に集計行がある場合として 「合計範囲を自動的に変更する」方法の紹介あり。  この方法はCOUNTA()で入力済みのセルをカウント。   私のケースでは  ・売上、利益などのセルが空白となる場合がある  ・C列は 売上 データを記載する列で   なので半角スペースや全角スペース は入らない  ・#REFやDIV/!0などは入りうる   C4:C5 のセル数は DIV/0!なども含めデータが入っているセル数  +ブランクが入っているセル数 は  COUNTA(C4:C5) + COUNTBlank(C4:C5) なので セル C5  =SUM(C2:INDEX(C4:C5, COUNTA(C4:C5)+COUNTBlank(C4:C5))   とするか?     ※「インストラクタのネタ帳」の方法は、「表全体の行数」を  もとめる場合に最後の行までを指定できて有効ですが、上の  ように小計をもとめる場合は、どうしても小計をもとめる範囲  式に書く必要があり、そこが集計範囲が変わってしまうと役に  立たないです。  代案としては、6行目の小計の行番号から3行目の小計の行番号  を引いて行数を求める方法でしょうか    この方法の場合、小計の式に 6行目行番号-3行目行番号  のように具体的に記述してはNGなので "下"の小計行から"上"  の小計行を引く というような間接的な指定の仕方が必要と  考えています。案1の検討はここまでです。 実装方法 案2  上のように表自体の集計関数を変える以外に、  マクロで対応する方法  行を追加する際に、 a)行の追加がある場合、行の挿入位置が小計   の集計範囲の”途中”なら 何もしない、  b)追加する行が集計行のすぐ上になる場合 つまり変更前の挿入位置+1   が小計行の行番号と等しい時は、追加する行数分   SUM関数の集計範囲を広げる     案1が難しそうなので案2で実装しようと思っています  Q1 案1と案2の検討結果についてお気づきの点があれあば教えて     ください  Q2 可能であれば、案2の実装方法についてヒント程度でもいいので     教えてください  以上

  • エクセルの罫線挿入について

    エクセルについてお聞きします。 1000行ほどのリストを作成しています。1行目はタイトル行、2行目から実際のデータが入力されています。 たとえばデータ行20行毎に罫線(見やすくする意味で区切りとして横線)を入れたいのですが、普通に罫線を引いていくと時間がかかり大変です。そこで行数を指定してやると指定行数毎に罫線を入れてくれる…そんな方法はあるのでしょうか。 ご存じの方は宜しくお願いします。

  • excelでのデータ集計

    エクセルで、合計を出すために、データ集計を使いました。 それを別のシートにコピーすると、集計された行だけを貼り付けたいのに、集計もとの、合計の行以外の行もコピーされてしまします。 集計した行だけを抽出し別シートにコピーしたいのですが、できますか?

  • エクセルで小計の累計

    エクセル2007で、10行毎の小計行の下に累計行、その下に10行毎の小計行、その下に累計行 というように累計をだしていきたいと思っています。 途中の数行(小計行、累計行も含んだ)を削除することが多く、そうすると、数式がエラーになって 計算できなくなってしまいます。 N行おき 小計 累計 という感じで検索して MOD関数やROW関数を使ってみましたが、途中の行を削除するとうまくできません 途中の行を削除しても数式がエラーになることなく答えがでるようには無理でしょうか... 詳しい方どうか教えてください よろしくお願いします。 B列には項目C列には計算したい数字がはいっています 3行目から12行目までデータがはいっていて、 C列の13行目:3行目から12行目までの小計 C列の14行目:累計 C列の3行目から12行目までの合計 15列目から24行目までデータがはいっていて、 C列の25行目:15行目から24行目までの小計 C列の26行目:累計 C列の14行目+C列の25行目 26行目以降も100行目くらいまでデータと小計、累計のデータがあるのですが   A、  B、   C 3 NO.1、りんご、10 4 NO.2、みかん、11 ・ ・ ・ 12 NO.10、ばなな、10 13 小計       37 14 累計       37 15 NO.1、りんご、3 16 NO.2、みかん、10 ・ ・ ・ 24 NO.10、ばなな、10 25 小計       40 26 累計       77 ・ ・ ・ 15から26行目を削除するとその次の累計の行がエラーになってしいます マクロとかそういったものを使わないと無理でしょうか... もしできたらすごく助かります。同じようなシートが何枚もあるので..

  • 罫線を引く

    Excelで表を作っているのですが、マクロで罫線を引きたいのです。しかし、マクロを実行して、データがない部分(データのない列)には罫線を引きたくないのです。range()で設定すると設定した範囲で罫線が引けるのはわかるのですが、データの量が毎回違うので、うまくいきません。 データがない列に、罫線を引かなくていいようにするには、どういう風にしたらよいのですか?VBAに詳しい方、教えて下さい。

  • EXCELの集計で悩んでいます

    EXCEL2003で、 ・商品ID ・商品名 ・支店 ・在庫数 ・在庫金額 ・販売開始日 を商品IDごとに在庫数と在庫金額の集計を行いました。 行数は約1万、集計行は約1千あります。 ここまでは問題なく出来たのですが、 集計行には、商品ID集計として、在庫数と在庫金額の合計しかなく、 集計行のみにした場合、商品名と販売開始日が表示されません。 集計行に、商品名と販売開始日を追記するマクロを書きたいのですが (関数でもかまいません)、どなたかお知恵をお借りできませんでしょうか。 よろしくお願いいたします。

  • エクセルの条件付きデータ集計について

    はじめまして。 1か月間、機器の消費電力を10分ごとに計測したデータを 日毎・1時間単位で小計計算した表を作成したいのですが、 関数の組み合わせで作業を簡略化できればと、悩んでおります。 データのイメージは以下の通りです。 ○データ 日付    時刻 データ 7月1日   0:00  0.3 7月1日   0:10  0.5 7月1日   0:20  0.4         0:30  0.2         0:40  0.3         0:50  0.2         1:00  0.3   ・     ・    ・   ・     ・    ・   ・     ・    ・   ・     ・    ・ 7月31日 23:50 0.3 ○集計イメージ 日付  時刻  小計 7月1日  0:00   1.9 7月1日  1:00   2.3   ・     ・    ・   ・     ・    ・   ・     ・    ・ 7月31日 23:00 3.0 なお、現在のやり方は (1)0時台であれば、0:00の行の右端に60分分のデータの合計を算出 (2)5行飛ばしにSUM関数で計算 (3)INDEX関数とROW関数を組合せてで5行飛ばしの小計データを抽出 という非常にアナログなやり方をしております。。。 SUMIFS等を試してみましたが、いまいちうまくいきませんでした。。。 良い手があれば、教えてください。 よろしくお願いいたします。

  • EXCEL VBA 別シートへデータ集計

    お世話になります。 EXCEL VBAを使って下記のことを実現したいです。 [やりたいこと] [データ]シートに社員情報が4人分入っています。(本当は可変です) [データ]シートに"集計"というボタンを作ってクリックするとVBAが動いて[集計]という シートにデータを集計したいのです。この[集計]シートのフォームが少し変わっていて一人に つき3行使用します。次の人はまた3行、また次の人は3行と繰り返していきたいのです。 上記やりたい事を画像にもしてみました。 上記動作を実現するVBAコードをどなたかご教授いただけませんでしょうか? 何卒よろしくお願い致します。 環境 EXCEL 2017 Win7

専門家に質問してみよう