• ベストアンサー

VBAと線の作成

VBAの初心者です。 今下の画像のような、エクセルのシートを 練習用に作りました。 列が4列あり、C列の店舗の 値が切り替わるごとに 下に太い罫線を引きたいのです。 手で作成できますが、参考に VBAで自動に入力できるコード等は あるのでしょうか。 列数は不変で4列とします。 よろしくお願いします。

この投稿のマルチメディアは削除されているためご覧いただけません。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

No.4です! 補足の >一行目の項目名があるところまで 線を引く条件処理はできるのでしょうか。 に関してですが・・・ 実は余計なお世話だと思いつつ、 前回のコードそのものが補足内容に対応できるコードにしていました。 ためしに1行目の項目列数を増やして前回のマクロを実行してみてください。 たぶん希望通りになると思いますよ。m(__)m

その他の回答 (4)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんばんは! すでに回答は出ていますので、参考程度で・・・ 一例です。 Sub test() Dim i, j As Long For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row j = Cells(1, Columns.Count).End(xlToLeft).Column '(質問ではj=4と決まっているので必要ないかも・・・) If Cells(i, 3) <> Cells(i + 1, 3) Then With Range(Cells(i, 1), Cells(i, j)).Borders(xlEdgeBottom) '(変数jの設定をしない場合は Cells(i,j) を Cells(i,4) に変更してもOK) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With End If Next i End Sub この場合最終行もアンダーラインが表示されますので、もしご希望でなければ セルの選択と Borders(xlEdgeBottom) の部分を Borders(xlEdgeTop) で考えたり、最終行の調整で可能になると思います。 どうも失礼しました。m(__)m

aidorumary
質問者

補足

いつもありがとうございます。 完ぺきでした。 追加で補足ですが、一応 表の列数は、A列からM列まで で固定されています。 また、今後右に列が増えてくるかもれない ですが、一行目の項目名があるところまで 線を引く条件処理はできるのでしょうか。 いつもすいません。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

指定した行の上(下)部に罫線をひくのは、その操作をシート上でして、マクロの記録を取り、そのセルの行番号がコードの何処で効いて居るか勉強のこと。 ーーー >「切り替わるごとに」とは東京から大阪のように、C列の値が変化したときか? それならうえの行から1行ずつ処理していくが、直前の行の「店舗」列の値を、次(現在)に変数で送って(使えるように変数に記録して、次行で使って) 現在行で前行と比べ両者を比較して等しいときは、罫線を引くことはぜず、変わった場合のみセルの上辺に罫線を引けば仕舞い。 コントロールブレークのロジックと言い、同じ間は計数(件数)を足しこめば、店別合計が出せるロジックでも在る。 当然最初に店舗列でソートして作業することが前提。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

sub sample1()  dim i as long  on error resume next  range("A:D").borders.linestyle = xlnone  for i = 2 to range("C65536").end(xlup).offset(-1, 0).row   if cells(i, "C").value <> cells(i + 1, "C").value then    with cells(i, 1).resize(1, 4).borders(xledgebottom)     .linestyle = xlcontinuous     .weight = xlthin     .colorindex = xlautomatic    end with   end if  next i end sub ご相談に要件として書かれていない,たとえば ○最下端は「福岡」から「空白」に変わるのに線を引かない ○最上端は「タイトル行」から「最初のデータに変わる」のに線を引かない といった部分を具体的にどうしたいのかによって,マクロの細工が少しずつ変わります。 寄せられた回答マクロをネタに,いろいろ勉強してみてください。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

こういうことでしょうか? Sub ボタン1_Click() For i = 2 To Range("C65536").End(xlUp).Row If Range("C" & i).Value <> Range("C" & i + 1).Value Then Range("A" & i & ":D" & i).Borders(xlEdgeBottom).LineStyle = xlContinuous End If Next End Sub 短いコードなので意味を理解して使ってください。

関連するQ&A

  • エクセルで列と行数を入力すると罫線が自動的に引かれるようにしたいです。

    エクセルで列と行数を入力すると罫線が自動的に引かれるようにしたいです。 エクセルの質問なのですが、下の画像のように、行数と列数を入力すると、 自動的に3×3セルを1マスとした罫線(格子)が引かれるようにしたいです。 関数ではなく、VBAではないだろうかとは思ったのですが、 自力ではどうしてもわからなかったため質問させていただきました。 どのようにすれば可能でしょうか。どうかよろしくお願いします! ちなみにエクセルのバージョンは2007です。

  • エクセルのVBAでプログラムを作成中です。

    エクセルのVBAでプログラムを作成中です。 下二桁が1の項目のある列があれば、その列を別ワークシートの1番目の列に引用、 下二桁が2の項目のある列があれば、その列を別ワークシートの2番目の列に引用。。というように、 別ワークシートへ引用することができればな、と思います。 ポイントは、 下二桁を認識し、その値を列数と認識するにはどうすればよいか? ex) 101023がA1セルにあり。⇒ 下二桁が23なので、別ワークシートでは23列目。 application.worksheetfunction value vlookup 。。色々コードは思いつくのですが、そもそも見当違いなのかもしれません。 ご教示ください。

  • エクセル VBA

    最終行から順番に下へ同列で入力するVBAを教えて下さい。 EXCELのVBAで教えて下さい。 シート1のA列にはB列が入力されると自動入力されるNo.があり、C~G列もB列が入力されると自動入力されます。 B列には日付が、H列には3~4桁の数字が入力したいのですが、 入力行は必ず最下行のセルB、Gな為、VBAでフォームを作成し、 入力実行ボタンを押すことにより、最下行のセルB、Gに反映されるように したいです。 又、上記入力後に、シート2のH~N列をコピーして、シート3のA~G列に値のみの貼り付けを行い保存した後、シート3のA~G列をコピーして csvファイルを作成して保存したいです。 一連の流れを、フォームの入力実行ボタンを押すことで実行したいのですができるのでしょうか? 宜しく御願い致します。

  • エクセルVBA:繰り返し処理について

    エクセルVBA初心者です。どうかご指導お願いします。 シート1に入力されたデータベースがあります。 B列には氏名が入力されています。 B2の値で絞りこんで、シート2に貼り付け、 B3の値で絞りこんで、シート3に貼り付け、 B4の値で絞り込んでシート4に貼り付けてB列の値が""(空白)になるまで繰り返すコードの書き方を教えてください。 さらに、B列には、当然同じ氏名が何回も入力されているので、前に一度出た人はパスするというようにしたいのです。 下記コードは、「B2の値で絞りこんで、シート2に貼り付け」だけをしたものですが、このコードを応用して作りたいのです。ご指導お願いします。 Sub test01()  With sheets("sheet1")Range("A1")   .AutoFilter field:=2, Criteria1:=Range("B2")   .CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1")   .AutoFilter  End With End Sub

  • VBAでスケジュール表を作成しています

    業務短縮化のために、VBAを使って社内のスケジュール管理ファイルを制作しています。 つくろうとしているのは、こんな感じです。 1、まず、罫線だけのマスター用紙があります。 2、別シートに設置した「スケジュール作成」ボタンをクリックすると、マスター用紙がコピーされ、新しいシートが作成されます。 この新しいシートの「A」列に、自動的にカレンダーが入力されます。 この2の部分をVBAで自動化したいと考えています。 すでにボタン押下→シートをコピーするところはできました。 カレンダーを作るには、月の最終日の日にちと曜日をとればいいのかな?とか予想はしているのですが。。。 手掛かりなどありましたらお願いします

  • vbaプログラム

    excelの列に文字列があり、その文字列をvbaを使って他のシートに貼り付けます。 空白になるまでの文字列をコピーして貼り付けます。for文を使って、null-1までコピーします。 配列を使って、そのnull-1までの添え字の値を取得したいのですが、どのようなプログラムを作ればいいのでしょうか? sheet1のA5以降をコピーして(空白になるまで),それをsheet2のA5以降にコピーして、その列数を反映させたくて。。。 for文と配列を使いたいのですが、よろしくお願い致します。

  • ExcelのVBAについて。

    ExcelのVBAについて。 画像のようなコードを利用してセルに入力時の日付時間を自動的に付加させたいのですが、、 VBA初心者な為に上手くいきません。 コード自体はサイトのを切り貼りして使えるのですが、これ以上の応用例に行き着けません。目的としては、データベース的に、あと入力数値から特定文字を抜き出して変数を当て嵌め文字列の語呂を当てます。様式はまだ作成中ですが、ある種の図表化してプリントアウトまでしたいと思っています。 何が上手くいかないか、まず自動的に付加させる所は何となく出来ているので、これをシート1とした場合に、シート2に図表化した転記内容を構成し、、シート1入力、シート2表示、またシート1A3セルに戻るというコードにしたいです。 この記述は不味いとかこうこうああした方が良いというアドバイスや指摘をお願いします。 よろしくお願いします。

  • vbaでvlookup

    エクセルのVBAについて。 指定した範囲の中から検索条件に一致したデータを検索し、取り出してくれる関数vlookup をVBAで実現したいのですが、 目標として、エクセルのセル(列)に、値を入力されているとします。 VBAを実行するボタンをクリックすると、、、 その値に対応する文字列(事前に用意)をその値の右のセルに自動で入力させたいです。 このVBAを作ることが目標です。 vbaでvlookupを実現でなくても、それよりも簡単な方法があれば教えていただきたいです。 お手数ですが、よろしくお願いします。

  • 【VBA】シート1の入力表をシート2に並び替えて表示させたい【VBA】

    はじめて質問させて頂きます。 駄文で伝わりづらいかと思いますが、大変困っておりますので、ご教授下さい。宜しくお願いします。 【シート1】       商品コード 店舗コード 001  002 003 0000A  ¥1   ¥2  ¥3 0000B  ¥4   ¥5  ¥6 0000C  ¥7   ¥8  ¥9 【シート2】 店舗コード 商品コード 金額 0000A  001   ¥1 0000A  002   ¥2 0000A  003   ¥3 0000B  001   ¥4 0000B  002   ¥5 0000B  003   ¥6 0000C  001   ¥7 0000C  002   ¥8 0000C  003   ¥9 ★実現したいこと VBAを用いて、シート1にて入力した内容を、シート2のように並べ替えて表示したい。 ★条件 店舗コード→可変(A列で上から拾いNULLまでループ) 商品コード→固定(上記例だと001~003の3つ) 金額→可変 以上です。当方VBA初心者ですが宜しくお願いします。

  • vba 作成

    博学の方ご教授願います。 office2007のVBAで下記の様なものを作りたいのでお願いします。 SHEET1 A列に管理番号 C列にお客様名 D列に通し番号 H列に入庫日 が入ったシート があり在庫に一つづつ入庫シートを張り付けています。 今は一枚ずつ手で書いてますがそれを自動で出せるようにしたいのです。 SHEET2にその入庫シートを作りA列C列D列H列を1から順番にSHEET2の入庫シート に入れた上プリントアウト出来るものを作成したいです。 希望はSHEET2のC1にSHEET1のH列の入庫日を SHEET2のE2にSHEET1のD列の通し番号 SHEET2のE3にSHEET1のC列のお客様名 SHEET2のL1にSHEET1のA列の管理番号 を 1から順番に自動入力した上プリントアウト出来ればありがたいです。

専門家に質問してみよう