• 締切済み

Excelマクロで罫線をひきたい。

Access2000からエクスポートした結果のExcel2000のワークシートに、線をひきたいんです。 一番最初のセルはa1と決まっているけど、一番最後のセルは毎回変わってしまうのですが、 このセルを取得するためにはどんなマクロボタンを作成すればいいでしょうか? ただ本来の希望としては、マクロボタンひとつで、並べ替え>セルの変更>罫線、としたいのですけれど。 「セルの変更」というのは、エクスポートしたデータで「ランク」という項目があり、 これに「特・A・B」という項目があります。 Access上はひとつのフィールドにまとまっているのですが、Excel上では、それぞれ「特・A・B」という列を作成し、データがあったら、「○」を入れるというようにしたいのです。 (列が増えることになります。) また「備考1・備考2」がAccess上にあり、これは別フィールドとなっていますが、 今度はExcel上で「備考」としてひとつの列にしたいのです。 (列の減少) 別シートを作成してもかまいません。 このようなことはできるのでしょうか? せめて罫線だけでもひければ、と思います。 よろしくお願いします。

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

少々長くなっています。 この処理の考えるところは、Accessの出力シートにはマクロを書き込みづらいことです。 簡単にするために、処理用のシートを作ってみました。 処理用シートの内容  1.新規Bookを開きシートを1枚のみにする。これに結果を書きます。  2.標準モジュールに下記コードをコピーして貼り付けます。    (ツール→マクロ→Visual basic Editor で挿入→標準モジュール)    このBookは何回でも使えるように別名で保存しておきます。 使用方法は  3.Access2000からエクスポートしたシートをこのBookにコピーします。  4.ツール→マクロ→マクロ で『表の整形』を実行します。 質問に書かれていることは取りあえず全てできているはずです。 罫線はCurrentRegionでセル範囲を求め、Bordersコレクションを操作しています。 ソートは例としてA、B列で行っています。書き換えて下さい。 (Excel2000) ここから(標準モジュールにコピーして貼り付けます) Sub 表の整形()   '*** シート構造を検証   If Worksheets.Count <> 2 Then     MsgBox "シート枚数が処理要件に合致していません。中止します"     Exit Sub   Else     If Worksheets(1).Name = "変更後" Then       Worksheets(2).Activate     Else       Worksheets(1).Activate     End If   End If   'シートを変数に代入   Dim ws1 As Worksheet 'ワークシート(Accessから出したシート)   Dim ws2 As Worksheet 'ワークシート(罫線を引くシート)     Set ws1 = ActiveSheet     Set ws2 = Worksheets("変更後"): ws2.Range("A1").CurrentRegion.Clear   Dim rw As Long '行カウンタ   Dim col1 As Integer '列カウンタ1   Dim col2 As Integer '列カウンタ2   Dim hd As String 'セルの値(表題)   Dim dt As String 'セルの値(データ)   Dim Biko1, Biko2 As Integer '備考1,2の場所   Application.ScreenUpdating = False   '*** 表題部分を書き込む ***   With ws1     col2 = 0     col1 = 1: hd = .Cells(1, col1)     While hd <> ""       If hd <> "備考2" Then         If hd = "ランク" Then '特・A・Bの分離           col2 = col2 + 1: ws2.Cells(1, col2) = "特"           col2 = col2 + 1: ws2.Cells(1, col2) = "A"           col2 = col2 + 1: ws2.Cells(1, col2) = "B"         ElseIf hd = "備考1" Then '備考欄は備考1のみ使う           col2 = col2 + 1: ws2.Cells(1, col2) = "備考"           Biko1 = col1         Else           col2 = col2 + 1: ws2.Cells(1, col2) = .Cells(1, col1)         End If       Else         Biko2 = col1       End If       col1 = col1 + 1: hd = .Cells(1, col1)     Wend   End With   '*** データ部分を書き込む ***   With ws1     For rw = 2 To ws1.Range("A65536").End(xlUp).Row       col2 = 0       col1 = 1: hd = .Cells(1, col1)       While hd <> ""         dt = .Cells(rw, col1)         If hd <> "備考2" Then           If hd = "ランク" Then             Select Case dt '特・A・Bの分離               Case "特": ws2.Cells(rw, col2 + 1) = "○"               Case "A": ws2.Cells(rw, col2 + 2) = "○"               Case "B": ws2.Cells(rw, col2 + 3) = "○"             End Select             col2 = col2 + 3           ElseIf hd = "備考1" Then '備考1、2を結合             col2 = col2 + 1             ws2.Cells(rw, col2) = _               .Cells(rw, col1) & .Cells(rw, col1 + Biko2 - Biko1)           Else             col2 = col2 + 1             ws2.Cells(rw, col2) = .Cells(rw, col1)           End If         End If         col1 = col1 + 1: hd = .Cells(1, col1)       Wend     Next   End With   '*** 変更したシートを選択 ***   ws2.Activate: Range("A1").Select   ActiveCell.CurrentRegion.Select   '*** ソート *** 列A、Bの例   Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, _           Key2:=Range("B2"), Order2:=xlAscending, Header:=xlYes   '*** 罫線を引く(Bordersコレクション) ***   Dim ks As Integer 'カウンタ   For ks = 7 To 12 'xlEdgeLeft から xlInsideHorizontal     With Selection.Borders(ks)       .LineStyle = xlContinuous       .Weight = xlThin       .ColorIndex = xlAutomatic     End With   Next   ws2.Range("A1").Select   Application.ScreenUpdating = True End Sub

  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.3

こんにちは。 罫線はこんな感じかな? Sub Test()  For i = 7 To 12   ActiveSheet.UsedRange.Borders(i).LineStyle = 1  Next i End Sub 「ランク」フィールドは、データが入ったままで列をコピーし、それぞれの列で○に置換えた後に、○以外を消す処理でいけると思います。 マクロを記録し、書きかえると良いですよ。

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

質問の趣旨を理解できない点が有りますが、 下記道具立てが役に立ちますでしょうか。ご参考に。 (列の削除)F列の例 Columns("F:F").Select Selection.Delete Shift:=xlToLeft 削除する前に、文字列情報が入っているときは&で結合し残す列にまとめる。 例 Cells(3,3)=Cells(3,3) & Cells(3,4) C列とD列の文字列内容を結合してC列へセット。 (罫線を引く) Range(Cells(1,3),Cells(3,5)).Select With Selection.Borders(xlEdgeRight) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With WeightでxlThin=細線、xlThick=太線 xlEdgeRight=セルの右側辺、xlEdgeTop=セルの上辺、 xlEdgeBottom=セルの底辺、xlEdgeLeft=セルの左辺 消す時= Selection.Borders(xlEdgeLeft).LineStyle = xlNone (罫線を引く最下行の取得) c=Range("a1").CurrentRegion.Rows.Count (最右列の取得) d=Range("a1").CurrentRegion.Columns.Countなど。 (ソート) Range("A1:C6").Select Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin End Sub ソートの条件を変えてマクロの記録を取って、どこがどのように変わるか見てください。 (マクロボタンひとつで) コマンドボタンをシートに貼りつけ、ダブルクリックし Private Sub CommandButton1_Click() End Sub の間にVBAでプログラムを書く。

  • coco1
  • ベストアンサー率25% (323/1260)
回答No.1

マクロボタン、というよりも、罫線を引くにあたって、末尾セルのアドレスを取得する方法、ということですね? counta()関数でデータが記録された列数と行数を取得すれば、cells()やindirect()関数で最終セルが計算できるはずです。 作業セルを作ればわかりやすいと思います。 罫線を引く手順については操作を記録させればいいのでそれほど難しくはないと思います。 わかりにくければ、補足を要求してください。

KODAMAR
質問者

お礼

回答ありがとうございます。 >counta()関数でデータが記録された列数と行数を取得すれば、cells()やindirect()関数で最終セルが計算できるはずです。 すいません、これはどのようにやったらよいのでしょうか? マクロというかVBAですと「Range」とかでセルの位置を取得しますよね? そんな感じでできるのでしょうか?

関連するQ&A

  • アクセス97での罫線について

    教えてください。 ACCESS97で一つのテーブルをEXCELにエクスポートする処理をマクロ (ワークシート変換)で作成しました。 EXCELシート上にデータはちゃんと書き込まれています。 次に、エクスポートされたEXCELのシート上に(セルすべてを囲む)罫線をつけて 見やすく表示したいと考えているのですが... マクロでもVBAでも構いません。そのようなことはできるのでしょうか? また出来るとしたら、データの中のある項目(フィールド)が変更したら、その下の罫線は太くするといったことは可能でしょうか? 参考HPでも構いません。宜しくお願い致します。

  • Excel エクセル で罫線のマクロ記録で困ってしまいました

    エクセルであるチェックシートを作成しました。 チェック後にはセルに罫線からの「/」を挿入します。 (いつもはセルの書式設定から実施) この処理をマクロ登録し、ボタンから、「/」を 入れる処理を簡単にできるようにしました。 ところが、このボタンを押すと、 セルには「/」のみならず、「/」のまわりの「□」の枠まで 貼り付けされてしまいます。 (説明がわかりにくいかもしれません) これだと、一部が太線のセルに「/」を挿入する場合、 いちいち普通の線に変更するため、マクロを活用できておりません。 どなたかご存じの方宜しくお願いします。

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

    EXCEL97の罫線について教えてください。 マクロで、単純にデータのあるセルに罫線を引きたいと考えています。 ACCESSのデータをEXCELにエクスポートしてからEXCELのシートを開くので、 シートの列(横幅)はどれだけあるかわかりません。ちなみに行のマックス行の取得の仕方はわかっています。 現在、下のようなコードで5枚のシートに罫線を引いているのですが、すべてのシートが一枚目のシートの列行と同じだけ罫線が引かれてしまいます。 ========================================================== Public Sub get_keisen(sheet As String)  ←シート名が引数 Set ws1 = Worksheets(sheet) '罫線を引くシート Dim maxRow As Long '最大行 Dim I As Integer Application.ScreenUpdating = False ws1.Activate 'シートの最大行を得る ws1.Activate: maxRow = ws1.Range("A65536").End(xlUp).Row 'シートの横幅を得る I = 1 'デ-タ1行目設定 Do Until Cells(1, I) = ""   I = I + 1 Loop '罫線を引く範囲(全体)を選択 ws1.Activate: Range("A1:I" & maxRow).Select   ~ 罫線を引く処理文 ~ end sub =========================================================== もっと簡単な方法があればその方法でかまいません。 宜しくお願い致します。

  • Excelで入力が反映されるものを作りたい

    助けてください。 作りたいプログラムは、まずエクセルで入力画面を作ります。 (1)名前(2)生年月日(3)住所(4)備考 の入力画面がほしいです。マクロかなんかでできるでしょうか? マクロでなくてもだれでも簡単に入力できればいいのですが・・・ その後、これらの入力がされて決定ボタンを押すと、 別シートに作成した表の中にこれらを順に表示していきたいのです。 (1)名前で入力された項目はシート2のA1セル (2)生年月日で入力された項目はシート2のB1セル (3)住所    〃   項目はシート2のC1セル (4)備考    〃   項目はシート2のD1セル に入力されるようにしたいのです。 その他、最初の入力画面に 『 』行目 という項目を作って、そこに『2』と打てばそれぞれシート2の2行目に同じことを出力したいのですがどうすればいいのでしょうか? 手順等、作り方まで教えていただけると本当に嬉しいです。 どなたか知っている方がいましたら助けてください。 お願いします。

  • エクセルでマクロを作りたいのですが上手くいきません

    エクセルで会社で使うファイルを作成していますが、ファイルサイズが大きくなりすぎたので、こういうマクロが作れないかと調べていたのですが、やり方がわからないので困っています。 わからないのは、入力シートのA列にデータを入力して、シート2のB列に自動的に表示する ことを自動的にやってくれるマクロです。 今はIF関数をシート2に入力している状態ですが、セルに関数を入れる方法だとファイルサイズが大きくなりすぎてしまいます。 (IF関数をあらかじめ入力しておくセル数がとてもたくさんある為) なお、入力シートA列がブランクの場合は、シート2のB列には何も表示されないようにしたいです。 大変困っております。よろしくお願いします。 

  • excelでマクロが思うように動きません

    EXCELでのマクロを使った文字列検索についてお尋ねします。 EXCEL2003のシートにフォームボタンを設置し、そのボタンに 以下のマクロを設定しています。 ここから--------------------------------------------- Sub 検索() Cells.Select Application.Dialogs(xlDialogFormulaFind).Show End Sub ここまで--------------------------------------------- ボタンをクリックすると、検索ダイヤログが開き、任意の文字列を 検索できるのですが、別シートまで検索してしまいます。 【希望1】検索対象をアクティブシートのみにしたい。 表示される“検索ダイヤログ”では、以下項目が設定可能ですが、 1.検索する文字列 2.検索方向 3.対象 4.大文字と小文字を区別 5.完全に同一なセルだけを検索 6.半角と全角を区別 【希望2】変更可能な以下の項目を固定(変更できないように)したい。 2.は“列”に固定 3.は“値”に固定 4.5.6.はチェックボックスでon/offできるようになっていますが、  全てoffに固定 【希望3】出来れば検索ダイヤログには1.の“検索する文字列”欄と、 “次を検索”ボタン、“閉じる”ボタンの3つだけを表示したい。 このような希望を満たすマクロは作成可能でしょうか? おわかりの方がいらっしゃいましたら、ご教授ください。 よろしくお願い致します。

  • エクセルのマクロについて

    エクセルのマクロ初心者です。 マクロを使用して印刷プレビューが見れるようにしたいです。 vlookup関数を使いsheet1に入力し、sheet2,sheet3,sheet4、sheet5へデータを反映させています。 sheet1に入力画面を作成してあり、セルA2~A13に入力すればsheet2へ、セルA17~A28はsheet3へ、セルF2~F13はsheet4へ、セルF17~F28はsheet5へデータを反映する作りです。 sheet2~sheet5はフォーマットを作成してあり、印刷するとA4で2枚印刷されるようになっています。 入力画面で入力した内容によってはA4用紙1枚ですむこともあります。(A1~M15でA4用紙一枚、A1~M31でA4用紙2枚) 教えて頂きたいことは。 ・入力画面にマクロのボタンを設置し、ボタンをクリックすると印刷プレビューが表示されるようにしたいです。 ・sheet2用、sheet3用、sheet4用、sheet5用、とボタンを設置したい。 ・印刷プレビュー後に、(実際には印刷後)に入力画面を表示したい。 ・印刷プレビューが見たいのはsheet2,sheet3,sheet4,sheet5です。 以上です。 説明が下手ですみません><

  • エクセルで罫線を引くとデーターを消すマクロ

    あまり、マクロに詳しくなくて どうしても分からないので質問します。 1 エクセルのA1のセルにデーターを入れると   A30迄自動的にA1のデーターをコピー 2 A5の下側に罫線を付けると、A6から A30まで、コピーしたデーターを消す (A5に入れる罫線は、ランダムで、A3の時もあれば、 A20の時もあります) 3 A6に違うデーターを入れると 1と同じくA36までコピーする 4 2と同じくA10の下側に罫線を付けると、 A11からA36までデーターを消す 以上のような作業でデーターを コピー、ペーストで繰り返しているのですが、 罫線を引くことを基準に、マクロで出来ないかと 思い質問します。 よろしくお願いします。  

  • Excelで集計

    Excelで請求書を作っています。 この請求書の集計表を自動的に別シートもしくは別ブックに作成されるようにしたいのですが、可能でしょうか? 具体的には以下のような具合です。 1.請求書の雛型があり、金額、各項目を入力し「名前をつけて保存」で保存していく 2.金額、各項目を別シートもしくは別ブックに自動的に作成されていく 私のレベルでは例えば「sheet1」のセルA1に何らかの文字列が入るとsheet2のセルA1に同じものが作成されるが、もし、sheet2のセルA1に何らかの文字列が存在する場合、次の行(sheet2のセルA2)に作成され、さらにsheet2のセルA2にも何らかの文字列が存在したらさらに次の行…、といった感じなのですが、何か良い方法はないでしょうか? ちなみにマクロやAccessはさっぱり分かりません。Excelで関数を駆使して出来る範囲でお願いします。 分かりにくい点があるかもしれません。その際はどしどし補足要求してください。

  • エクセル マクロ

    エクセル マクロで、シート1のA1セルないの文字列(数式)をクリックボードにコピーするマクロを組みたいのですが、セルのコピーは出来るのですが、文字列のみコピーが出来ません。貼り付けは任意でするので必要ないです。 初心者で何もわかりません。よろしくお願いします。

専門家に質問してみよう