![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_09.png?5a7ff87)
お世話になっております。
業務上必要になり(効率化が図れるので)選択したセルにバツの罫線を引くマクロを作成しています。
まだまだ自分のレベルが低いので、マクロ記録を参考に、下記のようなマクロを作りました。
Sub バツ罫線マクロ()
ActiveCell.Select
With Selection.Borders(xlDiagonalDown)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlDiagonalUp)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
End Sub
試してみると、選択したセルに対してバツの罫線が引かれました。
やった!と思ったのもつかの間、Ctrlキーでセルを複数選択してマクロを実行すると最後にアクティブにしたセルしか罫線が引かれないではありませんか・・・。
ネットなどで調べてみると、Ctrlキーで複数選択してもアクティブセルというのはそのうちの一つだけというような記述がありました・・・。
そして、ここで行き詰ってしまいました。
お伺いしたいのは2つあります。
・どうすればCtrlキーで選択した全てのセルにこの罫線を引くマクロを適用させる事が出来ますか?
・変数などを用いたもっとレベルの高いコードの書き方だと、どのように記述されますか?後学のためにレベルの高い人の記述方法と比較させてもらって勉強させてもらいたいと思っています。
よろしくお願いします。
No.6
- 回答日時:
こんばんは
天邪鬼なんでひねくれた答えですいませんが、こういう方法もあります。
要するにこの目的を達成するのにいちいちマクロ使いますか?ということです。
Excelのバージョンにもよりますが、ツールバーに斜め罫線を左上がり、右上がりとも追加しておいて、セルを選択してからそれを順次2つとも押す。
ちなみにご存知かと思いますが、ツールバーにボタンを追加するには、
・ツールバーの開いているところを右クリック-「ユーザー選択」
・ダイアログが出てきますので、「コマンド」タブを選択し、分類は「書式」を選ぶと下のほうにいろいろな罫線のボタンが出てくるので、斜め罫線をツールバーの任意の場所にドロップ
です。
回答ありがとうございます。
ご指摘の通りとは思いますが、2つの点でマクロを作った方が良いと判断しました。
1つ目は、VBAとかマクロの勉強になるからという理由です。もちろん何でもかんでもマクロにすればいいってものではないという事も学習せねばなりませんが・・・。
その意味では回答者様に指摘いただいたことは今後気をつけていこうと思います。
2つ目は実際に行う場合の業務効率の問題です。
Excelのシートを上から下にどんどんスクロールさせて該当箇所を指定してバツ罫線を入れていく作業を考えると、
・ボタンのある所までマウスを動かし
・2つもボタンを押す
というのは、マクロをショートカットキー登録して作業する事に比較するといかにも業務効率が落ちると考えます。
以上の2点から、マクロを使った方法を模索し、(えらく初歩的な段階で)行き詰まり、こうして質問した次第です。説明不足でした。
No.5
- 回答日時:
こんにちは。
KenKen_SP です。Areas コレクション内を For Each でループさせた方法です。
選択範囲のブロック毎にまとめて書いた方が早いと思います
が、どうでしょうか?
ご参考までに。
Sub Sample()
Dim rngArea As Range
Dim i As Integer
Application.ScreenUpdating = False
For Each rngArea In Selection.Areas
'xlDiagonalDown = 5
'xlDiagonalUp = 6
For i = 5 To 6
With rngArea.Borders(i)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = 1
End With
Next i
Next rngArea
Application.ScreenUpdating = True
End Sub
回答ありがとうございます。
色々な方法を教えていただいて、締め切る際にどの方にポイントをつければいいのかと迷い始めています~。
色々なやり方ありますが、たくさんのデータのあるファイル(実際のデータはかなり重いです)で使用し続けると速度の違いとか明確になるかもしれませんね。
来週の週明けから早速試しまくって見ます。
No.4
- 回答日時:
複数のセルに同じ作業をするときは
絶対にunionを使いましょう。
選ぶ数が多いほど格段にスピードが違います。
Dim allcell
For Each c In Selection.Cells
If Not IsObject(allcell) Then
Set allcell = c
Else
Set allcell = Union(allcell, c)
End If
Next
With allcell.Borders(xlDiagonalDown)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
With allcell.Borders(xlDiagonalUp)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = xlAutomatic
End With
うわ~、起床してみてみるとすごく増えてる。
これって色々なやり方があるってことですよね。
なんだかやる気が出てきました。頑張ります。
回答ありがとうございました!
No.3
- 回答日時:
こんにちは。
私の書き方ですと、以下のようになります。
変数がなければ、Selection の中は、達成されません。また、オートメーションを使う場合などのExcelのマクロの場合は、Selection は一回だけにして、変数に置き換えたほうが無難です。変数を使うときは、変数の型の宣言をするのが基本です。
.ColorIndex = xlAutomatic
VRamを使ったものは、経験的にマクロでは、うまくいかないときがあるます。なぜ、xlAutomatic を使わないかというのは、あまり理由はありませんが、明示的に色を入れたほうが無難です。また、ScreenUpdatingは、最後につけているのも、実験的にやってみてください。千回近くなって初めて、トラブルが出ることもありますから、一度や二度では分らないことがあります。
これらは、標準モジュールに取り付けてください。
Sub バツ罫線マクロ2()
Dim c As Range
For Each c In Selection.Cells
With c
With .Borders(xlDiagonalDown)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = 1
End With
With .Borders(xlDiagonalUp)
.LineStyle = xlContinuous
.Weight = xlHairline
.ColorIndex = 1
End With
End With
Next c
Application.ScreenUpdating = True '念のため
End Sub
なお、おまけのショートカットキーをつけておきます。
Sub ShortCutSet()
'ショートカットをCtrl + L に設定
Application.OnKey "^l", "バツ罫線マクロ2"
Application.OnKey "^L", "バツ罫線マクロ2"
End Sub
Sub ShortCutSetOff()
'ショートカットを解除
Application.OnKey "^l"
Application.OnKey "^L"
End Sub
回答ありがとうございます。
オートメーションとかVRamとかScreenUpdatingとか、意味のわからない単語が目白押しですが勉強になります(手持ちのVBA辞典の索引にはありませんでした)。
どの記述がベスト、というものはあるものなんでしょうか。まずは美しいコードでなくてもやってみる事だと思っているのですが・・・。
ありがとうございました。
No.1
- 回答日時:
まず一つ目。
「ActiveCell.Select」を削除してください。
これで、選択されたすべてのセルで罫線が引けます。
二つ目。
正直言って、私は罫線を引くだけなら変数を使う必要はないと
思います。
選択したセルに接するセル全部に引く、とか
ある条件を満たすセルに引く、とか言うなら、
そのセルを確定させるための何らかの条件を記述するために
必要でしょうけど。
素早い回答ありがとうございます。
ほ、本当だあ~~。なんか色々試していた自分がバカみたいです。
そうですか、この程度なら変数はいらないのですか。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) 選択行の列範囲に二重線を引く 3 2022/06/08 12:21
- Visual Basic(VBA) 複数セルに〇印をつけるマクロ 4 2022/09/07 05:33
- Excel(エクセル) vba セルの罫線について教えてください 2 2022/12/28 17:14
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) 【VBA】Excelで罫線を引きたい 3 2022/07/14 12:04
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) オートフィルタで抽出結果に 罫線をひく方法 1 2022/07/13 13:08
- Excel(エクセル) 特定の位置にあるマクロボタンについて 2 2022/04/19 18:13
- Visual Basic(VBA) VBA 罫線について B列3行目から21行毎にデータがはいります。 データがはいったらデータが入った 6 2022/11/15 17:22
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの条件付き書式設定の太い...
-
Excelの外枠太罫線を2~3倍さ...
-
excel2003 罫線だけを保護したい
-
EXCELで、下線の太さを変...
-
決まった罫線のなかで、文章入...
-
【エクセル】謎の枠線の消し方
-
エクセル 入力されていない線...
-
エクセルで罫線も一緒に並び替...
-
罫線が引かれているセルの個数...
-
エクセルで文字を入力すると罫...
-
罫線の色をまとめて変更する
-
エクセル表の罫線(縦)が消せ...
-
パワーポイントで、表の一部を...
-
エクセル
-
エクセルの罫線を固定させる方...
-
勝手に背景に色が付いて困っ...
-
条件付き書式で自動で斜線の罫...
-
罫線の色を薄くしたい
-
エクセルを印刷すると勝手に線...
-
エクセルでデータがある部分だ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの条件付き書式設定の太い...
-
Excelの外枠太罫線を2~3倍さ...
-
excel2003 罫線だけを保護したい
-
勝手に背景に色が付いて困っ...
-
EXCELで、下線の太さを変...
-
【エクセル】謎の枠線の消し方
-
エクセルで文字を入力すると罫...
-
罫線の色を薄くしたい
-
エクセルで罫線も一緒に並び替...
-
パワーポイントで、表の一部を...
-
決まった罫線のなかで、文章入...
-
エクセル
-
罫線が引かれているセルの個数...
-
エクセルのアンダーラインについて
-
EXCELのオートフィルタで罫線が...
-
エクセル 入力されていない線...
-
Wordで表のセル幅を超えたら次...
-
エクセル表の罫線(縦)が消せ...
-
エクセルの罫線を固定させる方...
-
エクセルExcel 「/」セルの斜...
おすすめ情報