Excelで困っています(>_<)
今、ファイルが二つあります。

一つめのファイルは『野菜&果物ファイル.xls』、二つ目のファイルは『果物ファイル.xls』とファイル名を付けています。
一つめのファイルには、

セロリ
マンゴー
バナナ
トマト
リンゴ
白菜
ホウレンソウ
イチゴ




と、野菜と果物の名前がA1からずら~っと縦に並んでいます。
二つ目のファイル『果物ファイル.xls』には、

バナナ
リンゴ
イチゴ




と、A1から果物の名前だけがずら~っと並んでいます。

ここで、『果物ファイル.xls』にある全果物のデータを参照し、『野菜&果物ファイル.xls』の中で、一致するデータ(果物)があれば、その該当データに「/(罫線)」を引きたいのです。
そして、野菜のデータと果物のデータの区別を、視覚的にわかりやすくしたいのです。

「色をつける」「網をかける」のでも大丈夫なのですが、モノクロでプリントアウトした際も一目でわかるのはやはり、「/(斜線)」だと思いまして。

関数やマクロを使って、何とか解決できないでしょうか?

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

A 回答 (7件)

No3-4 merlionXXです。


No4の再質問の書き込みを見ました。
罫線は並べ替えても移動してくれませんからね。
それなら並べ替えてから罫線をひくことになります。
こんなんでどうでしょ?

Sub test03()
Dim myRng1 As Range, myRng2 As Range, c As Range, cc As Range
With Workbooks("野菜&果物ファイル.xls").Sheets("Sheet1")
Set myRng1 = .Range(.Range("A1"), .Range("A1").End(xlDown))
myRng1.Borders(xlDiagonalUp).LineStyle = xlNone
.Columns("B:B").Insert Shift:=xlToRight
End With
With Workbooks("果物ファイル.xls").Sheets("Sheet1")
Set myRng2 = .Range(.Range("A1"), .Range("A1").End(xlDown))
End With
For Each c In myRng1
For Each cc In myRng2
If c.Value = cc.Value Then
c.Offset(0, 1).Value = 1
End If
Next cc
Next c
With Workbooks("野菜&果物ファイル.xls").Sheets("Sheet1")
.Range(myRng1, myRng1.End(xlToRight)).Sort Key1:=Range("B1"), Order1:=xlDescending, Header:=xlNo, Orientation:=xlTopToBottom
With .Range(.Range("B1"), .Range("B1").End(xlDown)).Offset(0, -1).Borders(xlDiagonalUp)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
.Columns("B:B").Delete Shift:=xlToLeft
End With
End Sub
    • good
    • 0
この回答へのお礼

再度ご回答いただき本当にありがとうございます!
merlionXXさんのマクロを実行してみたのですが、

実行時エラー ' 1004 '
Border クラスの LineStyle プロパティを設定できません。

というエラーメッセージと共に、

myRng1.Borders(xlDiagonalUp).LineStyle = xlNone

の箇所が、黄色くマーカーされてしまいました(ToT)
マイクロソフトのサポートページ↓
http://support.microsoft.com/kb/157556/ja

にも、同じようなエラーの例が記載されていたのですが、私が使っているのはExcel2007なので、あまり関係ないような気がしました・・・
どこを修正すべきでしょうか?
本当にすいません、お暇な時に、もう一度ご回答いただければ幸いです。
よろしくお願いします。

お礼日時:2009/06/02 21:52

myRng1.Borders(xlDiagonalUp).LineStyle = xlNone は斜めの罫線を削除しています。


ひょっとして、シート保護してませんか?
保護してると手動でも罫線の削除はできませんのでマクロでもエラーになります。
    • good
    • 0
この回答へのお礼

何度も親身に教えていただきありがとうございます!
原因がわかりました。
マクロを『野菜&果物ファイル.xls』上ではなく、『果物ファイル.xls』上で実行していたのが問題でした。
『野菜&果物ファイル.xls』のブック上でマクロを実行すると、うまく斜線が引かれました(^_^;)

ただ、merlionXXさんが書いてくださったマクロは、B列に何かデータが入っていると、うまくできませんでした(ToT)
エラー表示されることはないのですが、変なところに罫線が引かれたり、「1」という数字がB列のデータに上書きされるといった事態が生じたのです。

実は、オリジナルのデータは、B列、C列にも、たくさんのデータが入っておりまして・・・
他力本願で本当に申し訳ないのですが、ここ↓
http://okwave.jp/qa5015030.html
に、新たな質問をさせていただきました。
B列が埋まってしまっている状態で、A列の特定のデータに、罫線を引いて並べかえたいのです。

merlionXXさんぐらい詳しい方でないと、誰も回答してくれない気がします。
お暇な時で構いませんので、再度お力をお借しいただければ幸いです(>_<)

今回は本当に助かりました、どうもありがとうございます!

お礼日時:2009/06/04 00:06

merlionXXです。


No5で回答した Sub test03 を、エクセル2000、2003、2007の3バージョンで実行してみましたが、そのようなエラーは再現できませんでした。
    • good
    • 0

No3 merlionXXです。


先ほどのでも大丈夫とは思いますが、念のため修正します。

Sub test02()
Dim myRng1 As Range, myRng2 As Range, c As Range, cc As Range
With Workbooks("野菜&果物ファイル.xls").Sheets("Sheet1")
Set myRng1 = .Range(.Range("A1"), .Range("A1").End(xlDown))
myRng1.Borders(xlDiagonalUp).LineStyle = xlNone
End With
With Workbooks("果物ファイル.xls").Sheets("Sheet1")
Set myRng2 = .Range(.Range("A1"), .Range("A1").End(xlDown))
End With
For Each c In myRng1
For Each cc In myRng2
If c.Value = cc.Value Then
With c.Borders(xlDiagonalUp)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End If
Next cc
Next c
End Sub
    • good
    • 0
この回答へのお礼

二度も回答していただいたのに、返信が遅くなってすいません!
merlionXXさんのやり方すごいですね、教えていただいたマクロを実行すると、うまくいきました!該当するデータに斜線が引かれました!!
ほんと驚きです。

誠に図々しいのですが、もう1度ご指導いただきたい疑問が湧きまして(>_<)
データにうまく斜線が引かれ、

セロリ
マンゴー
バナナ(斜線あり)
トマト
リンゴ(斜線あり)
白菜
ホウレンソウ
イチゴ(斜線あり)

のようになったのですが、斜線が引かれたデータと、斜線が引かれてないデータが、まばらに分散していることに頭を抱えています。
この状態から、なんとか

バナナ(斜線あり)
リンゴ(斜線あり)
イチゴ(斜線あり)
セロリ
マンゴー
トマト
白菜
ホウレンソウ

と、斜線のあるデータと斜線のないデータを、それぞれ近くにかためて表示することは、可能なのでしょうか?
「並べ替え」とか「フィルタ」とかいじってみたのですが、どうしてもうまくいきません。
マクロを書き換えなければならないのでしょうか・・・もしよろしければ、再度ご指導いただきたいです。
よろしくお願いします(>_<)

お礼日時:2009/06/01 01:05

マクロでも良いとのことなので一例です。


BOOK名はありましたがSheet名がないので2つのBOOKともSheet1だとします。
データは両方ともA1セルから下へ縦に一列にあるものとします。
データは途中に空白はないものとします。
両方のBOOKを開いた状態で以下のマクロを実行してください。

Sub test01()
Set bk1 = Workbooks("野菜&果物ファイル.xls")
Set bk2 = Workbooks("果物ファイル.xls")
With bk1
Set myRng1 = .Sheets("Sheet1").Range(.Sheets("Sheet1").Range("A1"), .Sheets("Sheet1").Range("A1").End(xlDown))
End With
With bk2
Set myRng2 = .Sheets("Sheet1").Range(.Sheets("Sheet1").Range("A1"), .Sheets("Sheet1").Range("A1").End(xlDown))
End With

For Each c In myRng1
For Each cc In myRng2
If c.Value = cc.Value Then
With c.Borders(xlDiagonalUp)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End If
Next cc
Next c
End Sub
    • good
    • 0

VBAでやらないと出来ないでしょう。


それも変更即時反応型は難しい。
ーーー
近い機能は条件付き書式なのです。
A.そしてその条件で「数式が」を選ぶことで、VLOOKUPのような(検索)関数も使えるでしょうし、
B.条件に合ったものに罫線も引けます
ーー
しかし問題は、相手側に「一致するデータ(果物)があれば」ですが
複数有るときは、第2番目以降を捉えることが関数では難しい(普通で不可能)なのです。
その重複出現あるかどうかのことを質問に書いてないのは、コンピュタ利用経験が少ない証拠です。これをデータの寄せ集まりでは、いつも意識すること。処理に大きく影響します。
ただ相手の検索する表に本件のように、有るかないかを調べるだけなら、2番目以降の重複出現は関係ない(1つめが見つかればとにかくあると言える)ですが。
ーー
では
ISERRORとVLOOKUPの組み合わせで出来そうか考えます。
普通に式を書くと、参照する検索表が他シートだとエラーになる。他ブックならましてダメ。
Sheet1とSheet2の例ですと
例データ
Sheet1
A1:A5
aaa
bbb
cc
ddd
ee
これに範囲に名前をつける(ここでは、検索という名前とする)
Sheet2に
A1:A5に
aa
bb
cc
dd
ee
と有るとする。
ーー
Sheet2のA1:A5(データ全て)を範囲指定する。そして
書式ー条件付き書式ー数式が
数式に =NOT(ISERROR(VLOOKUP(A1,検索,1,FALSE)))
書式に セルのパターン色でライトブルーを指定ーOK
ーー
結果
cc、eeに色がつきました。
ーー
書式をパターン色にしたのは、私のバージョンの場合、罫線で斜線が出てこないからです。質問者の場合、出てくればそれでやってください。
ーー
他ブックの場合ですが、同じくセル範囲に名前をつけるほか無いと思うが、質問者でやってみてください。うまく行くとは思いますが、ブックがちがうと、エクセルでは他世界で、何かと難しくなったり、不可能に有る場合はあります。
セル範囲に名前をつける問題で、シートレベル、ブックレベルなどあり、特別に勉強が必要だと思う、分野だと思います。
    • good
    • 0
この回答へのお礼

うまくできました!
ありがとうございます<m(__)m>
やはりブックレベルだとややこしくなるのですね。
ただ、2つのファイルがどちらもデータがいっぱい入力されていて重いので、1つのファイルにまとめると相当重くなってしまう状況なのです(>_<)
ブックレベルも勉強しなければならないと痛感しました(^_^;)

お礼日時:2009/06/01 00:49

スマートではないですが、関数でできそうです。



(1)野菜&果物ファイル.xlsのB列に以下の式を入力します。
=ISERROR(MATCH(A1,[果物ファイル.xls]Sheet1!$A$1:$A$3,0))

(2)野菜&果物ファイル.xlsのA列の値が入力されているセルを全て
 選択し、書式⇒条件付書式を選択し、『数式が』『=$B1=FALSE』
 と入力し、書式を設定する。

※残念ながら斜線は引きないみたいですが、濃い目の色をつければ、
 白黒印刷でも区別できると思います。
「Excelで、条件に該当するデータに「/」の回答画像1
    • good
    • 0
この回答へのお礼

返信遅くなってすいません(>_<)
082さんのやり方でもうまくいきました!
ありがとうございます<m(__)m>

お礼日時:2009/06/01 00:51

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

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


人気Q&Aランキング