• ベストアンサー

Excelで該当するデータに斜線を引き、それらを並び替えて一カ所にかためたい

Excelに関する質問です(>_<) 今、Excelのブックファイルが2つありまして、1つめのファイルは『温泉地&寺と神社ファイル.xls』、2つ目のファイルは『温泉地ファイル.xls』と、ファイル名を指定しています。 そして、1つめのファイルのA列には、 東福寺 飯豊温泉 神護寺 檜枝岐温泉 怒塚山温泉 湯桧曽温泉 花園神社 四季の湯 内船温泉 南禅寺 小砂温泉 廻栖野温泉 梅照院 ・ ・ ・ と、温泉地と寺・神社の名前が、縦に並んでいます。 そしてB列には、 かのやばら園 岡山ブライダルストリート 一の宮公園 サンセットブリッジ内灘 ルチニャーノ 白鳥山森林公園 日比谷 松本楼 ・ ・ ・ と、「恋人の聖地」と呼ばれる観光地が並んでおりまして、C列には「日本の灯台」、D列には「日本の渓谷」と、それぞれ観光地の情報が記載されています。 L列からは何もデータが入っていませんが、K列までは、データがびっしり埋まっています。 そして、二つ目のファイル『温泉地ファイル.xls』には、 飯豊温泉 檜枝岐温泉 怒塚山温泉 湯桧曽温泉 四季の湯 内船温泉 小砂温泉 廻栖野温泉 ・ ・ ・ と、A1から温泉地の名前だけが、縦に並んでいます。 ここで、『温泉地&寺と神社ファイル.xls』のA列のデータと、『温泉地ファイル.xls』のA列のデータを比較し、一致するデータ(温泉地)があれば、『温泉地&寺と神社ファイル.xls』の方のA列の該当データに「/(罫線)」を引きたいのです。 さらに、罫線が引かれた温泉地のデータを、A列の一番上(A1)から縦に、連続した状態になるように並べ替えたいのです。 温泉地のデータと、寺と神社のデータが混在している現状をなんとかしたいです。 よろしくお願いします(>_<)

  • dj-s
  • お礼率81% (228/280)

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

  • ベストアンサー
  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.4

[回答番号:No.1・3] の DOUGLAS_ です。  要らぬお節介ですが、もし並べ替えるのが『温泉地&寺と神社ファイル.xls』の「A列のみ」ということであれば、前回答の「甲の L1 」という考え方ではなくて、 ・A列の前に列を挿入 ・A列に式を挿入 ・A・B列のみを並べ替え ・A列を削除 という段取りでできます。  ちなみに、[新しいマクロの記録] でその作業をして、コーディング を整理すると、ざっと下記のようなことになりますが、基本的に「考え方」をご理解いただければ幸いです。 Sub A列のみ並べ替え()  'A列の前に列を挿入   Range("A1").EntireColumn.Insert  '挿入したA列に計算式を挿入   Range("A1:A" & Range("B1").End(xlDown).Row).FormulaR1C1 _    = "=MATCH(RC[1],[温泉地ファイル.xls]Sheet1!C1,FALSE)"  'A・B列で並べ替え   Columns("A:B").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlNo, _    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _    SortMethod:=xlStroke, DataOption1:=xlSortNormal  'A列内の「#N/A」を検索   Columns(1).Find(What:="#N/A", LookIn:=xlValues, LookAt:=xlPart, _    SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, _    MatchByte:=False, SearchFormat:=False).Offset(-1, 1).Select  'B列の1行目から「#N/A」の前の行の値に罫線を引く   With Range(Range("B1"), Selection).Borders(xlDiagonalUp)    .LineStyle = xlContinuous    .Weight = xlThin    .ColorIndex = xlAutomatic   End With  '挿入したA列の削除   Columns(1).Delete   Range("A1").Select End Sub

dj-s
質問者

お礼

すごいです、DOUGLAS_さんのコード貼り付けて実行したら一発で出来ました! マクロってすごいですね、ありがとうございます(>_<)

その他の回答 (3)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.3

[回答番号:No.1] の DOUGLAS_ です。  失礼いたしました。 >一致するデータ(温泉地)があれば、 >『温泉地&寺と神社ファイル.xls』の方のA列の該当データに「/(罫線)」を引きたい でしたね。逆に考えておりました。  そういうことでしたら、[回答番号:No.1] の 甲と乙を入れ替えて操作していただければお望みのことができるはずです。  ただし、(2)の「B1」は「L1」に読み替えてください。  つまり、 1)エクセルで、甲・乙、2つのブックを並べて表示します。 2)甲の L1 をクリックし、[F2] キーを押下し、「=MATCH(A1,」を入力します。 3)乙の A列 の列見出しをクリックします。 4)「,FALSE)」を入力して、[Enter] を押下します。 5)以上で、甲の L1 に =MATCH(A1,[温泉地ファイル.xls]Sheet1!$A:$A,FALSE) という式が入力され、甲A列のデータが乙A列に存在するときには、その「行番号」が、存在しないときには「#N/A」が返ります。 6)甲 L1 の式を下方向に必要分コピーします。 7)甲L列をキーにして並べ替えます。 8)甲L列に数字が表示されている分について、甲A列の各セルに斜線を引きます。  以上のように操作していただくと、添付画像のようになります(判りやすくするために罫線とL列の式の結果を赤色にしております)。  ポイントは、「罫線を引いてから並べ替える」のではなくて、「並べ替えてから、一気に線を引く」ということです。

dj-s
質問者

お礼

いつも返信が遅くてすいません(>_<) そうですよね、並び替えればいいんですよね! 気づきませんでした・・・ありがとうございます(^_^;)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

> L列からは何もデータが入っていませんが、K列までは、データがびっしり埋まっています。 この通りであれば、以下でどうでしょう? Sheet名は両方ともSheet1としています。 Sub test04() Dim myRng1 As Range, myRng2 As Range, c As Range, cc As Range With Workbooks("温泉地&寺と神社ファイル.xls") .Activate .Sheets("Sheet1").Activate End With 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 c.Offset(0, 11).Value = 1 End If Next cc Next c With Workbooks("温泉地&寺と神社ファイル.xls").Sheets("Sheet1") myRng1.Resize(, 12).Sort Key1:=Range("L1"), Order1:=xlDescending, Header:=xlNo, Orientation:=xlTopToBottom With .Range(.Range("L1"), .Range("L1").End(xlDown)).Offset(0, -11).Borders(xlDiagonalUp) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With .Range(.Range("L1"), .Range("L1").End(xlDown)).ClearContents End With End Sub

dj-s
質問者

お礼

merlionXXさんほんとすごいですね! 『マクロ・コンサルタント』として活躍できると思います、タダで教えていただいて本当にすいません(^_^;) コピペした後「実行」をクリックすると、簡単に該当データに斜線を引くことができました、本当にありがとうございます(>_<)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

 このようなブックの内容を比較する手段はいくつも方法がありますが、比較的簡単なものをお一つ。  『温泉地&寺と神社ファイル.xls』を「甲」、『温泉地ファイル.xls』を「乙」として説明いたします。 1)エクセルで、甲・乙、2つのブックを並べて表示します。 2)乙の B1 をクリックし、[F2] キーを押下し、「=MATCH(A1,」を入力します。 3)甲の A列 の列見出しをクリックします。 4)「,FALSE)」を入力して、[Enter] を押下します。 5)以上で、乙の B1 に =MATCH(A1,'[温泉地&寺と神社ファイル.xls]Sheet1'!$A:$A,FALSE) という式が入力され、乙A列のデータが甲A列に存在するときには、その「行番号」が、存在しないときには「#N/A」が返ります。 6)乙B列で並べ替えます。 7)乙B列に数字が表示されている分について、A列の各セルに斜線を引きます。

dj-s
質問者

お礼

画像も添付していただき、本当にありがとうございます! こういうやり方もあるのですね~勉強になります(>_<) ただ「6)」と「7)」の後、いざ甲データの方に斜線を引く際、行番号に該当するセルに引いていくのですが、連番で2、3、4、5・・・等、セルが隣り合わせになっている場合は、斜線を引くのは簡単なのですが、実際は2、21、112、174と、乙データ(温泉地)に一致する甲データ(温泉地&寺・神社) の行番号はバラバラで、一つ一つセルをアクティブにして斜線を引き、スクロールしてセルをアクティブにして斜線を引き、またスクロールしてセルをアクティブにして斜線を引く・・・と、結構時間がかかってしまうのです(ToT) ですので、次のような処理を施したいのですが・・・。 乙ファイルのB列に並んだランダムの行番号(上から2、21、112、174・・・)は、そもそも甲ファイルのA列と、乙ファイルのA列に共通するデータ、すなわち「温泉地のデータ」を示しているので、その温泉地のデータの行番号に、自動的に罫線を引きたいのです。 つまり「乙ファイルのB列(例えばB1からB249まで行番号のデータがあるとします)の行番号が指す、甲ファイルのA列の行番号に罫線を引く」といった処理を施したいのです。それが可能であれば、作業も非常に合理的になるのですが・・・(^_^;)

関連するQ&A

  • Excelで、条件に該当するデータに「/(罫線)」を引きたいです。

    Excelで困っています(>_<) 今、ファイルが二つあります。 一つめのファイルは『野菜&果物ファイル.xls』、二つ目のファイルは『果物ファイル.xls』とファイル名を付けています。 一つめのファイルには、 セロリ マンゴー バナナ トマト リンゴ 白菜 ホウレンソウ イチゴ ・ ・ ・ と、野菜と果物の名前がA1からずら~っと縦に並んでいます。 二つ目のファイル『果物ファイル.xls』には、 バナナ リンゴ イチゴ ・ ・ ・ と、A1から果物の名前だけがずら~っと並んでいます。 ここで、『果物ファイル.xls』にある全果物のデータを参照し、『野菜&果物ファイル.xls』の中で、一致するデータ(果物)があれば、その該当データに「/(罫線)」を引きたいのです。 そして、野菜のデータと果物のデータの区別を、視覚的にわかりやすくしたいのです。 「色をつける」「網をかける」のでも大丈夫なのですが、モノクロでプリントアウトした際も一目でわかるのはやはり、「/(斜線)」だと思いまして。 関数やマクロを使って、何とか解決できないでしょうか?

  • エクセルVBAについて (データのマッチング)

    過去ログで解決できなかったのでここに書かせていただきます。 エクセルのVBで下記のプログラムを作成したいのですがうまくマクロが組めません。 ファイル名:TEST01.xls ファイル名:TEST02.xls があります。 TEST01.xlsにあるA列のデータとTEST02.xlsのA列にあるデータが一致したおり、かつTEST02.xlsのD列のデータが『×』の場合のみ、TEST01.xlsのB列に固定の文字(test)を入力し、TEST01.xlsのC列に入力されているデータを削除するプログラムを作りたいです。 ご存知の方がいらっしゃれば、ご教授よろしくお願い致します。

  • エクセル VBA データのマッチング

     エクセルのVBで下記のプログラムの作成をしたいのですがうまくマクロが組めません。 ファイル名:TEST01.XLS ファイル名:TEST02.XLS があります。 TEST01.XLSにあるA列のデータ、TEST02.XLSにG列にあるデータが一致した場合のみ、一致した行にあるTEST01.XLSのB列にある4桁のコードを一致したTEST02.XLSのL列に表示させるプログラムを作りたいです。 すみませんが回等お願いできませんか。

  • エクセルのマクロ

    以下の処理をするマクロを教えて頂きたいのですが。 ファイルab.xlsのSheet1のA1からA100までのデータを、ファイルcd.xlsのSheet3のC列にコピーする。 ただし、Sheet3のC列には既にデータが入力されているので(空欄も有)、一番末端に付け足す形にする。 続けて、ファイルab.xlsのSheet2のA1からA100までのデータを、ファイルcd.xlsのSheet3のC列に、前と同様のやり方でコピーする。 宜しくお願いいたします。

  • エクセル 異なるブックのデータ比較

    教えてください。 エクセルのファイルA1.xls(原本)とA2.xlsがあるとします。 どちらも行ごと(レコード)にデータを入力したデータベースのファイルです。 A1は原本データで、A2がデータ(レコード)を追加した編集後のファイルです。 この時、A1とA2の列(レコード)を比較し、A2にあってA1に無いものを抽出するフリーソフトなどはご存知ではないでしょうか。 あくまで、A1とA2の差分の抽出ではなく(A1にあってA2にないものはは除く)、A2にあってA1にないものだけを抽出したいのです。

  • エクセルマクロの質問です。

    例えば、A.xlsというファイルに01.csv,02.csv,・・・,20.csvといういくつかのファイルからデータを取り出すのですが、A.xlsのシート1の1列目に01.csvの1列目を貼り付けて、01.csvの2列目はA.xlsのシート2の1列目に貼り付けるようにシートをずらして行って、02.csvの1列目はA.xlsのシート1の2列目、02.csvの2列目はA.xlsのシート2の2列目というようにしたいのですが、どのようなプログラムがよいのでしょうか? エクセルマクロ初心者なので説明が不十分かも知れませんがよろしくお願いします。

  • エクセルで同じ作業の簡略化したい・・・

    教えて下さい。 仕事で以下の処理を毎日行っていて、同じ作業なので、なんとか簡略化したいのですが、教えて下さい。 【作業】 テスト(1).xls テスト(2).xls 二つのファイルが有ります。 (2).xlsファイルの中のA列のデータを → (1).xlsのB列へコピー (2).xlsファイルの中のC列のデータを → (1).xlsのE列へコピー (2).xlsファイルの中のZ列のデータを → (1).xlsのAA列へコピー と、10列のコピーを一揆に出来ますでしょうか? 貼り付け先を間違えたりすると、大変な事になる等、同じ作業を繰り返すので、ぜひともPCの特性を生かしたいのですが・・・。 どなたか良い方法をご存知の方御座いましたら、ご教授頂けないでしょうか? 宜しくお願い致します。 質問が難しく、不明点等御座いましたら、お申し付け下さい。

  • Excelでのデータについて

    Unixで作成したデータが「数値 数値 数値」のように、数値とスペースで間を区切ってあります。これを拡張子を「.xls」にすると、A列に全て入ってしまうのですが、1つの数値ごとに「A列 B列 C列 …」と入れていくにはどのようにすればいいのでしょうか?

  • エクセルでのデータリンクについて

    教えてください。 =[ファイル名.xls]sheet1!$A$1 で別々のファイル間でのデータリンクができますが、 =[ファイル名.xls]sheet1!$A$1 =[ファイル名.xls]sheet1!$A$2          .          .          . =[ファイル名.xls]sheet1!$A$30 といったようにしたいのですが、手打ち出来る数ではないので簡単にする方法はないでしょうか?

  • ExcelのVBAマクロ作成で他のExcelから条件つきでデータを取り込みたい

    毎日の在庫データが記載されたファイル群の中から特定のデータのみを他のファイル(貼付け先ファイル)の一つのシートに縦一列にして取り込みたいのですがどうすればよいのでしょう? 具体的には… ・在庫データは年ごとにファイルが分かれている(ファイル名「在庫2003年.xls」など) ・在庫データファイルは月ごとにシートが分かれている(シート名「2003年04月」など) ・シートの中のA列に「日付」(上記のシートなら2003/4/1から2003/4/30まで)、D列に「製品A在庫数」、F列に「製品B在庫数」が入力されており他の列にも様々なデータが入力されている。 ・貼付け先ファイルはA列に日付(2000/1/1~2006/12/10)が入力されている。 この状況で、例えば2003年4月と指定してマクロを実行すると、指定の在庫データファイルのシートから「製品A在庫数」と「製品B在庫数」を貼り付け先ファイルの、日付に対応したB列、C列の部分に入力してくれるようにしたいのですが、VBAの記述の仕方がわかりません。どうすればよいのでしょう? お願いします!

専門家に質問してみよう