エクセルで、以下のような表があったとします

商品コード  商品名  商品の特徴
0001   商品1   商品1の特徴1
               商品1の特徴2
0002   商品2   商品2の特徴1
               商品2の特徴2
               商品2の特徴3
      ・
      ・
      ・

この場合に、一つの商品の情報を実線で囲み、その中を
1行づつ横に点線を引くという作業がしたいのです。

ただ、その時によって商品の数が変わるため、
(1)一つの商品の範囲を認識して罫線を引く
(2)その時によって数が変わる商品それぞれに(1)の操作をする
この2点をクリアしたマクロが作りたいのです

皆様のお知恵を貸してください。

ちなみにexcel2003です。

「excelで罫線を引くマクロを教えてくだ」の質問画像

このQ&Aに関連する最新のQ&A

A 回答 (8件)

商品コードの列で、コード入力セル以外は、間違いなく空白セルである


ということなら、turuzouさんのコードで希望通りの動作をします。
商品コード列の最上行セルで、Ctrl+↓ とキー操作してみてください。
最終行までカーソルが移動するなら、空白セルはないので、すべて破線になります。

数値かどうか判定すればどうでしょうか。
試しに組んでみました。
Sub test1()
  Dim rng As Range
  Dim r As Range
  
  Set rng = Range("A1", "A" & Cells(Rows.Count, "C").End(xlUp).Row)
  rng.Resize(, 3).BorderAround LineStyle:=xlContinuous, Weight:=xlThin
  Set rng = rng.Offset(1).Resize(rng.Count - 1)
  For Each r In rng
    With r.Resize(, 3).Borders(xlEdgeTop)
      If IsNumeric(r.Value) Then
        .LineStyle = xlContinuous
        .Weight = xlThin
      Else
        .LineStyle = xlDash
        .Weight = xlThin
      End If
    End With
  Next
End Sub

>No3の方も仰る通り、色々調べてやってはみたのですが、なぜか
>実線が引かれず、うまくいかない原因を見つけられません。
抽象的なことでなく、ご自分でやったこと、書いたコードを提示し、
間違いを指摘してもらうようにすればどうでしょうか。
希望通りの動作をするコードの提供を待っているより、確実に実力UPになると思います。
    • good
    • 0

No6 の追記です。


A列の空白セルを空白にさせるには、色々ありますが、
(数式などを削除しても、Ctrl+↑で、コード番号を選択できない場合)
A列を選択 → データ → 区切り位置 → 完了 で、空白セルになると思います。

又は、A1を選択 → フィルタ → オートフィルタ → フィルタの 空白セル を抽出 → 表示されたA列のセルを選択 → Delete で、空白セルになると思います。

ご自分で作成(修正)された、マクロを提示してみて、A列等の表示が直接入力なのか、数式等で、表示させているのかも、お教え下さい。
    • good
    • 0

お疲れ様です。


多分A列は空白に見えていて、数式で空を表示していたり、スペースがあったりしていませんか(本当の空白セルではない)?

提示したマクロは、サンプル画像での、A11 がアクティブセルの時、Ctrl+↑ 押下で、A10(0003)がアクティブにならないと、実線が引かれませんので、確認して下さい。
例えばA列の最下行のセルを選択して、Ctrl+↑ 押下で A1 セルが選択されると、現在のマクロでは正しく動作しません。

A列に数式があり、数式を削除してよいならば、A列の範囲を選択してコピー→形式を選択して貼り付け の 値 で、数式を削除してみてください。

A列の最下行から、Ctrl+↑を繰り返し押下して、コード番号を順々に選択できるようになれば、現在のマクロで実線が引かれます。

又は、
>空白になり得るのは 特徴の分類/特徴の内容以外の5列
上記の列で、本当の空白セルがある列があるのならば、その列を対象に商品コード別の範囲の上限を捜すことも出来ます。(補助列を作っても良いと思います)

Sheetの変更が出来ないのならば、No.3さんでも書かれているように、1行ずつ、A列を基準に、罫線種を選択しながら、上罫線を引くマクロになると思います。
    • good
    • 0

こんにちは。


ちょっと式が複雑になりますが、条件付き書式で希望の動きになるかと思います。

A1:商品コード
B1:商品名
C1:商品情報
として、2行目からデータを入力すると仮定します。

A列とB列の2行目には
(1)下部実線書式:数式が
=OR((AND(C2<>"",A3="",C3="")),(AND(C2<>"",A2="",C3<>"",A3<>"")),(AND(C2<>"",A2<>"",C3<>"",A3<>"")))
(2)下部点線書式:
=AND(C2<>"",A3="",C3<>"")
C列2行目には
(1)下部実線書式/右部実線書式:数式が
=OR((AND(C2<>"",A3="",C3="")),(AND(C2<>"",A2="",C3<>"",A3<>"")),(AND(C2<>"",A2<>"",C3<>"",A3<>"")))
(2)下部点線書式/右部実線書式:数式が
=AND(C2<>"",A3="",C3<>"")
と入れて、下の行へ書式の複写をして下さい。
するとほぼ同様の動きになると思います。後は、数式・書式の調整を行ってください。

私も、3行ごとに罫線を引いて入力するなどで使っています。
※添付画像が削除されました。
    • good
    • 0

No.1です。


>サンプルです、修正は、ご自分で、お願いします。

>・・・に変えるだけで大丈夫でしょうか?
最初から実際の範囲を提示するべきですし、確認してから質問してください。

>・・・横線がすべて点線に
A列に例題の様にコード番号が入力されていれば、こちらでは実線が引かれています。

追記
Dim x, y の下へ
Application.ScreenUpdating = False 

If x <= 2 Then Exit Sub を削除して
Next x の下へ
Application.ScreenUpdating = True
としてみても
    • good
    • 0
この回答へのお礼

>最初から実際の範囲を提示するべきですし・・・
申し訳ございません。

実際は、
商品コード/発注部署/発注日/納品日/商品名/特徴の分類/特徴の内容
となっており、商品コードが0001ではなく、5桁で51237とか
85068みたいな数字なんです。

空白になり得るのは
特徴の分類/特徴の内容以外の5列です。

No3の方も仰る通り、色々調べてやってはみたのですが、なぜか
実線が引かれず、うまくいかない原因を見つけられません。

お力をお貸し頂ければ幸いです。

お礼日時:2009/05/26 23:10

こんなの簡単で、丸投げすることも無いでしょう。


(1)まづマクロの記録を取り(罫線を引く位置は置いといて)
罫線、点線を引くなどのコードがどうなるか知る。
上罫線だけを引く場合はどういうコードになるか。
それと多数列に罫線の引き方のコード。
(2)実線を引く場所の特徴を考える。これは質問者が一番良く事情を知っているはず。
例 各行で商品名の列が空白でなかったら、上罫線を実線で引く
(3)点線を引くべき行の特徴を考える。
例 商品列が空白なら、上罫線を点線で引く。
===
以上ぐらい考えて、何か疑問があれば質問するようにしないと。
頼りすぎ。 Googleででも罫線を引く、点線を引く VBAで照会したら。
内容も難しい点はないと思う。
    • good
    • 0

No.1です、訂正です。


If x - 1 <= 2 Then Exit Sub

If x <= 2 Then Exit Sub
失礼しました。
    • good
    • 0

サンプルです、修正は、ご自分で、お願いします。



Sub keisen()
 Dim x, y
 For x = Cells(65536, 3).End(xlUp).Row To 2 Step -1
  y = IIf(Cells(x, 1).Value = "", Cells(x, 1).End(xlUp).Row, x)
  With Range(Cells(y, 1), Cells(x, 3))
   .Borders(xlEdgeLeft).LineStyle = xlContinuous
   .Borders(xlEdgeTop).LineStyle = xlContinuous
   .Borders(xlEdgeBottom).LineStyle = xlContinuous
   .Borders(xlEdgeRight).LineStyle = xlContinuous
   If x <> y Then .Borders(xlInsideHorizontal).LineStyle = xlDot
  End With
  x = y
  If x - 1 <= 2 Then Exit Sub
 Next x
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます!!

列が、例では3列までですが、7列まである場合は、

1) For x = Cells(65536, 7).End(xlUp).Row To 2 Step -1
2) With Range(Cells(y, 1), Cells(x, 7))

に変えるだけで大丈夫でしょうか?

これだけでも充分効率化は図れるのですが、作っていただいた
ものですと、横線がすべて点線になっており、商品が変わる毎に
実線で区切りたい場合は、どうすればよろしいのでしょうか?

重ねてお願いいたします。

お礼日時:2009/05/26 11:22

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qワードの罫線について

ワードの罫線についての質問です。
ワードの罫線で表を作ったりした場合、文章を書いたらそれに従って罫線が広がったりしますよね・・? そうではなく、文章を入力したりしても、動かない罫線を作りたいのですが、なにか方法はありますか・・?

Aベストアンサー

はじめまして

47歳,男性,会社員です。

以下の方法ではどうでしょう?

 表を選択した上で,メニューから
 「罫線(A)」→「表のプロパティ(R)」→「行」→「高さを指定する(S)」にチェック

 高さを入力・指定したあとに,
 
  →「高さ(I)」の設定を <最小値> ではなく<固定値>にする。

 この方法だと改行しても,罫線にもぐりこむようになりますが......


意図しているのと違っていたらゴメンナサイ。

QExcel B列の名前を見てA列に番号をふりたいです。1-1 1-2 2-1 2-2

質問させて頂きます。
日々の仕事の作業の中でExcelであるB列に前もって名前が入っています。
現状手打ちでB列の名前を見ながら1-1 1-2 名前が変わったら2-1 2-2 というように番号をふっています。時間短縮で何かいい方法はないでしょうか?(マクロなど)
ご回答お願い致します。
例を下に入れております。

A列   B列
1-1 山田太郎
1-2 山田太郎
2-1 佐藤和也
2-2 佐藤和也
3-1 吉田五郎
3-2 吉田五郎
3-3 吉田五郎
4-1 伊藤忠文
5-1 田口達也
6-1 東京世田谷区分譲
6-2 東京世田谷区分譲
6-3 東京世田谷区分譲

宜しくお願い致します。

Aベストアンサー

No.1です。

>時間短縮で何かいい方法はないでしょうか?(マクロなど)・・・
というコトですので、VBAでもやってみました。もちろん作業列は不要です。
シートモジュールにしてください。

Sub Sample1()
Dim i As Long, lastRow As Long, c As Range
Application.ScreenUpdating = False
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
Range(Cells(2, "A"), Cells(lastRow, "A")).ClearContents
End If
Range("C:C").Insert
Range("B:B").AdvancedFilter Action:=xlFilterCopy, copytorange:=Range("C1"), unique:=True
For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row
Set c = Range("C:C").Find(what:=Cells(i, "B"), LookIn:=xlValues, lookat:=xlWhole)
With Cells(i, "A")
.NumberFormatLocal = "@"
.Value = c.Row - 1 & "-" & WorksheetFunction.CountIf(Range(Cells(2, "B"), Cells(i, "B")), Cells(i, "B"))
End With
Next i
Range("C:C").Delete
Application.ScreenUpdating = True
End Sub


※ データがバラバラでも出現順に「1-○」のような結果になります。
こんな感じではどうでしょうか?m(_ _)m

No.1です。

>時間短縮で何かいい方法はないでしょうか?(マクロなど)・・・
というコトですので、VBAでもやってみました。もちろん作業列は不要です。
シートモジュールにしてください。

Sub Sample1()
Dim i As Long, lastRow As Long, c As Range
Application.ScreenUpdating = False
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
Range(Cells(2, "A"), Cells(lastRow, "A")).ClearContents
End If
Range("C:C").Insert
Range("B:B...続きを読む

Qエクセルの表、罫線はワードで編集したい

お願いします。Office2003です。
メンバーの仕事内容を控えるための名簿をエクセルで作成しました。
しかし表の大きさと罫線の実線と点線の太さのバランスがとれないので、罫線はワードで編集したいと思います。

エクセルからどのような形式でワードに貼り付ければ、うまく罫線の編集ができるのでしょうか。

Aベストアンサー

テキストとして貼り付けて、

罫線-変換-文字列を表に

こちらでいかがですか。

Q=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $

いつもお世話になってます。
以下の関数式について、お時間がありましたらどうぞご教示ください。

=IF(ISNA(VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)),"",VLOOKUP($A1,sheet2!$A$1:$B $12,2,FALSE))

「シート2の範囲指定した表にA1セルの値と同じ値の右隣になる値を返せ。ただし該当なき場合は空白とせよ。」

純粋になんでこのような構文になるのかが解りません。

1.ISNAってそもそもなんでしょう?
2.同じ式を繰り返すのはなぜ?
(模範式で、このように同じ式を繰り返す構文があまり無いように思えたのです。)

・参考となる他所のページがあれば教えて下さい。
・素人です。お手柔らかにお願いします。

(エクセル2003)

Aベストアンサー

1.ISNAってそもそもなんでしょう?
ISで始まる情報関数の一つで、#N/A!エラーのみを判定する関数
結果はTRUE(真),FALSE(偽)のいずれかになります。
エラー判定のIS関数には他に
ISERR:#N/A!を除くすべてのエラーを判定する関数
ISERROR:すべてのエラーを判定する関数
があります。

2.同じ式を繰り返すのはなぜ?
ISNAの判定する値がセルでなく数式の結果だからです。
A2=VLOOKUP($A1,sheet2!$A$1:$B$12,2,FALSE)
なら
A3=IF(ISNA(A2),"",A2)
ということになります。A2のように計算の為のセルを省略する為に
=IF(ISNA(数式),"",数式)のように同じ数式を2回繰り返しになってます。

Qワード2003,2007で罫線を使いこなしたいです。

ワード2003,2007で罫線を使いこなしたいです。

ワードの表や罫線を数多く使いこなし、作っている様式や書類をよくみます。
それらを真似て、作成しているのですが、表や罫線が上手くつかいこなせません。。

例えば、文書全体を罫線(or 表?)での囲み方は?
横の表に縦の線の挿入の仕方は?
初歩的すぎですが。。。

普通に簡単な表は作成できますが、罫線や表が用紙いっぱいのものになると
時間をかけてもかけても、うまくできません。

ご教示どうぞ宜しくお願いします。

Aベストアンサー

> 文書全体を罫線(or 表?)での囲み方は?
 
「ページ罫線」をお試し下さい。
 
「ページ罫線の設定」
http://kokoro.kir.jp/word/pagek2.html
「Word2007(ワード2007)基本講座:ページ罫線」
http://www.eurus.dti.ne.jp/~yoneyama/Word2007/word2007-pagekei.html
 
 
> 横の表に縦の線の挿入の仕方は?
 
表のセルを縦線で区切る意味であれば、
1) 「罫線を引く」ボタンを使って枠内でドラッグします。
  「表の作り方」
  http://hamachan.info/word/hyo.html#enpitu
  「罫線ツールバーの使い方」
  http://hamachan.info/word/h-kei.html
  「Word 2007でマウスを利用して罫線を引く方法」
  http://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=011210
2) セルを分割すれば、結果的に縦に線が引けます。
  「セルを分割する / ワードの裏技」
  http://word-waza.seesaa.net/article/142095324.html
  「Wordで表のセルを分割する方法」
  http://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=006767

> 文書全体を罫線(or 表?)での囲み方は?
 
「ページ罫線」をお試し下さい。
 
「ページ罫線の設定」
http://kokoro.kir.jp/word/pagek2.html
「Word2007(ワード2007)基本講座:ページ罫線」
http://www.eurus.dti.ne.jp/~yoneyama/Word2007/word2007-pagekei.html
 
 
> 横の表に縦の線の挿入の仕方は?
 
表のセルを縦線で区切る意味であれば、
1) 「罫線を引く」ボタンを使って枠内でドラッグします。
  「表の作り方」
  http://hamachan.info/word/hyo.html#enpitu
  「罫線ツールバーの使い方...続きを読む

Qエクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1という

エクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1,3,1というような順番で数字が並んでいます。

その数字の中で、1→3と3→1になるものがいくつあるか求めたいのですが、出す関数・マクロがわかりません。
教えていただけないでしょうか?

よろしくお願いします。

Aベストアンサー

こんばんは!

>A列の中に
とは行方向に数値が入っている!というコトでしょうか?

そうであれば
表示したいセルに
=COUNTIFS(A1:A1000,1,A2:A1001,3)+COUNTIFS(A1:A1000,3,A2:A1001,1)
としてみてください。

「1」の次の行が「3」の場合と
「3」の次の行が「1」の場合をプラスしています。m(_ _)m

Qワードの表でセルの「枠なし」を選択したが、透明な罫線が引けない。

ワード2003で表を作り、いくつかのセルを罫線ツールバーの「枠なし」にしたのですが、透明な罫線が出ないで全く罫線が消えているのですが、文字を入力するのに便利なので透明な罫線にしたいのですが、どうしたらよいのでしょうか。

Aベストアンサー

透明な罫線という表現だと違うかもしれませんが、[表のグリッド線]の
ことでしょうか?
それなら、メニューから[罫線]→[表のグリッド線の表示]を選択すれば
薄いグレーになった印刷されない表専用のグリッド線が表示されます。

QA1に数字の1を入力するとB1の値がA1に表示、A2に数字の2を入力するとB2の値がA2に表示

エクセル初心者です

セルのA1に数字の1を入力するとB1の値がA1に表示、A2に数字の2を入力するとB2の値がA2に表示されるようなものを作りたいのですが・・・
どなたかご教授お願いします

例えば、A1に1を入れるとB1の値"北海道"がA1に表示され、A2に2を入れるとB2の値"青森"がA2に表示といった感じでです

宜しくお願いいたします

Aベストアンサー

No3,5,6です。
補足要求をしましたが時間がないので、No6での以下の理解、

B4がROOT,C4が♭9,D4が9,E4がm3,F4がM3~M4がM7
置き換え対象はB6:W11の範囲

ということでいいのなら以下で出来ます。

1.シートのタブを右クリックし、コードの表示を選択
2.出てきたVBエディター(白い画面)に下記をコピペ

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x
If Intersect(Target, Range("B6:W11")) Is Nothing Then Exit Sub
x = Target.Value
Application.EnableEvents = False
Target.Value = Range("A4").Offset(0, x)
Application.EnableEvents = True
End Sub

3.AltキーとF11キーを一緒に押してワークシートへもどります。

Qワードです。罫線の枠でが次のページにいきます

ワードで文書を作ります。途中で罫線の枠を囲みました。

1ページの終わりぐらいに、罫線で枠を囲みました。
すると、罫線の枠が1ページに入らないと、自然に、次の2ページめにいきます。1ページの下が、あきます。

一太郎の場合は、罫線の枠が、1ページから2ページ目にかけて、あります。

ワードは、罫線の枠を、1ページ目から2ページにかけて、ひくことはできないのでしょうか。

教えてください。よろしくお願いします。

Aベストアンサー

段落罫線を使ってみてはいかが。

枠を設定したい範囲を選択します。
[線種とページ罫線と網掛けの設定]で[設定対象]が[段落]に
なっていることを確認して[囲む]を選択します。
http://www4.synapse.ne.jp/yone/word2010/word2010_danrakukeisen.html
段落がページをまたがっても、境の罫線がない自然な囲んでる
罫線になります。

Word2003以前の場合ならば、メニューの[罫線]の項目から
[線種とページ罫線と網掛けの設定]で設定できます。

Qエクセルで特定の条件に一致した文字を抜き出す方法 シート1 4/1 シート2 1行目 4/1 4/2

エクセルで特定の条件に一致した文字を抜き出す方法

シート1
4/1

シート2
1行目 4/1 4/2 4/3
2行目 A B C

シート1の4/1と入力されているセルを指定するとシート2のAをシート1の4/1の下に表示するには関数をどう使えば良いですか?

Aベストアンサー

シート2の行と列を入れ替えることはできませんか?
↓こんな感じ

4/1 A
4/2 B
4/3 C

これであればvlookupを使ってシンプルにできます。


人気Q&Aランキング