• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBA 罫線 処理時間短縮)

エクセルVBAで罫線処理時間を短縮する方法

このQ&Aのポイント
  • エクセルVBAで罫線を1行ずつ引くと時間がかかる場合、効果的な処理方法をご紹介します。
  • ScreenUpdatingを使用しているにも関わらず処理が遅い場合、セルの範囲をまとめて指定することで処理時間を短縮できます。
  • このVBAの関数を使用することで、縦中央線の削除が容易になります。

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

  • ベストアンサー
回答No.6

No.2です この処理としてはこれ以上縮められそうにありません 「範囲を指定して縦中央線の削除を行っているこの範囲は」ですね 問題はここ以外、ここを蹴りだしている場所だと思いますが… どのように引いているかも判らない現状ですし、改善案までたどり着けそうにありません

kak_yuriko
質問者

お礼

ご回答ありがとうございます。 汎用的なfunctionにしたいため、 このような処理になりました。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (5)

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

>罫線を1行づつ引く場合、とても時間がかかります Range(Cells(f_gyo, f_retu), Cells(e_gyo, e_retu)).Select Selection.Borders(xlInsideHorizontal).LineStyle = xlNone は、書いた罫線を消しているのでは。 又罫線を1行ずつ引く(消す)イメージの処理ではない。コードは、セル範囲を指定して抹消しているでしょう。 10000行x10列ぐらいでマス目罫線を引いて、下記を実行すると、一瞬で終わりましたが。 Application.ScreenUpdating = Falseも入れていません。 Sub test01() Range(Cells(2, 2), Cells(10000, 10)).Borders(xlInsideHorizontal).LineStyle = xlNone End Sub またなぜ一旦書いた、横罫線を抹消する作業をするのか判らない。 何か外の原因で遅くなっているのでは。それを質問だけからは難しいと思うが。 >Function名で縦中央線削除 とあるが >(xlInsideHorizontalだと横罫線が削除されるようだが。

kak_yuriko
質問者

お礼

ご回答ありがとうございました。 ご指摘どおり、function名も変ですし、 書いている内容とPGも違いますね。 すみません。 同じような1行1行条件によって線をつける処理を しているところもあり、また、縦線を消す処理もあったので、 色々なことがごちゃ混ぜになってしまいました。 すみません。 ご回答ありがとうございました。

すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

答えを貰うまでは「そんなのできない」と逃げる割に何をしているのかの情報は出さない,後出しでダメだしだけが得意な解決の難しいご相談です。 >1行づつの処理が見えてしまいます。 というお話の様子から,遅さの原因(ボトルネック)はご質問で掲示されたFunctionとは違う部分,この関数を呼び出している元のループ部分にある様子に思われます。掲示されたマクロも,「そこまで」処理を重くする要因は見あたりません。(あちこちselectしたりactivateしたりとかはあるにしても,です) また,処理の対象となっているシートに何か別のイベントプロシジャを仕込んでいるなどで,そちらが割り込んで遅くなっているような状況も考えられます。 とりあえず最初の手として,掲示されたFunctionの中で行っている全てのアクションをコメントアウトして「全く何もしない」Functionにしてしまい,呼び出し元を実行してこの関数によってどれだけ遅くなっている(何もしないとどれだけ早くなる)か,まず確認してみてはいかがでしょう。 参考に: 条件付き書式でも,単に使い方に慣れていないだけで問題なく作成できそうに思われますが,まぁマクロでゴリゴリやりたいご希望なら勿論それはあなたのやりたいようになさって頂いて構いません。

kak_yuriko
質問者

お礼

ご回答ありがとうございます。 確認等行います。 条件付書式についてのよく知らないのに、 マクロでと言ってしまったこと、すみませんでした。 今から、条件付書式で行えるか、 やってみようと思います。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • FEX2053
  • ベストアンサー率37% (7995/21384)
回答No.3

遅いのは「マクロ自体を繰り返す」事に問題があるんであって、この処理そのものには「これ以上大きく処理速度を上げる要素」は無いです。 Range(Cells(f_gyo, f_retu), Cells(e_gyo, e_retu)).Select Selection.Borders(xlInsideHorizontal).LineStyle = xlNone Cells(e_gyo + 1, f_retu).Select 要は、この部分を例えばFOR-NEXTでくくって FOR i = 1 TO 10 Range(Cells(i, f_retu), Cells(i, e_retu)).Select Selection.Borders(xlInsideHorizontal).LineStyle = xlNone NEXT と言う風にループで回すか、 Range(Cells(f_gyo, f_retu), Cells(f_gyo + 10, e_retu)).Select Selection.Borders(xlInsideHorizontal).LineStyle = xlNone と言う風に一気に全行を選択して罫線を引くかすればいい、という話です。 すいませんが、コードの確認テストはしていません。動かない時はごめんなさい。

kak_yuriko
質問者

お礼

ご回答ありがとうございます。 やはり、処理速度を速めるのは難しそうです。 前の行と比較したりして、線をつけたり 消したりしなければならないため、 一気に選択をしたり、同じLOOPを回したりは 不可能なんです。 ご回答ありがとうございました。

すると、全ての回答が全文表示されます。
回答No.2

selectせずに試してみるのが一番最初かと思います Worksheets(sh_name).Range(Cells(f_gyo,f_retu),Cells(e_gyo,e_retu)).Borders(xlInsideHorizontal).LineStyle=xlNone のように繋げることも可能だと思います あとはそのシートを不可視にする事も出来ます worksheet(sh_name).visible=false こうすれば処理が見える事はありません

kak_yuriko
質問者

お礼

ご回答ありがとうございます。 早速やってみましたが、 処理時間は同じでした。 見え方も同じでした。 visible=falseにしても不安な時間を過ごすように なるため、どうしようか悩み中です。

すると、全ての回答が全文表示されます。
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

マクロを使わず,条件付き書式で作成してください。 「中央線」と無理にこだわらず,各列ごと右(または左)の縦線を無しにするか,若しくは最初から表の全域の縦線を無しにしておいて「右(もしくは左)縦線のあるべき列」だけ条件付き書式でその縦線を表示させるように仕込んだ方が多分簡単です。

kak_yuriko
質問者

補足

ご回答ありがとうございます。 以下の観点などから、マクロで行わなければいけません。 (1)行数・列が確定していない (2)条件が複雑 (3)マクロの一部で使われるfunction 説明不足ですみません。 よろしくお願い致します。

すると、全ての回答が全文表示されます。

関連するQ&A