Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
Re:多数の複数セルを単独選択 マゴマゴさんへ
投稿日時: 20/09/18 13:41:08
投稿者: Suzu

コメント作成中に閉じられてしまったので。。
 
多数の複数セルを単独選択
https://www.moug.net/faq/viewtopic.php?t=79836
 

ゴマゴマ さんの引用:
表の中か外かを個別にで判断するのですが、ガードとして連続選択($J$123:$J$125)はしない、という決まり事を作りました。よってセルの数が多くても単独選択$J$123,$J$124,$J$125したい、というのが理由です。

 
選択範囲が表範囲に含まれているかの判定をしたいという事でしょうか?
 
であれば INTERSECTメソッドを使用すれば良いと思います。
【セル領域の操作−セル領域の重複部分を取得する(Intersectメソッド)】
https://www.moug.net/tech/exvba/0050074.html
 
・表範囲が A1:E10
・ユーザー選択範囲が E10:F11
として
Sub sunple()
    Const TableArea As String = "A1:E10"
 
    If Intersect(Range(TableArea), Selection).Address = Selection.Address Then
        MsgBox "選択範囲OK"
    Else
        MsgBox "選択範囲NG"
    End If
End Sub

投稿日時: 20/09/18 14:23:29
投稿者: Suzu

ゴマゴマさんの今回の希望を拝見する限り、個別にSelectを行う必要性は無さそうですが
セルを範囲でなく個別に(連続した)範囲を選択する操作は興味がありました。
 
 
罫線を配置した表を改ページを行い印刷する際、一部の罫線が消える事があります。
 
表の中に行を追加し、後で編集した範囲だけ罫線を追加する様な操作を行った時
元の罫線の位置と違う位置に罫線を追加してしまい 改ページの 前ページと後ページ に
罫線が分かれてしまう事があります
(xlEdgeTop/xlEdgeBottom/xlInsideHorizontalが違う)
 
全行の罫線なら範囲選択を行い 中の横線
  (VBAなら .Borders(xlInsideHorizontal).LineStyle) を設定すれば良いのですが
 
1行おきの場合、2行選択を繰り返し中の横線を引きます。
結果全行選択になるのですが、今回の様に個別に範囲指定をする事になります。
 
 
流用できるかなと試した結果
 

For i = 1 To 66
  strAddress = strAddress & "," & Cells(i, 1).Address(False, False, xlA1)
Next
strAddress = Mid(strAddress, 2)
Range(strAddress).Select
66までだと、strAddress は 254文字。 67だとエラーになります。
 
上記の実行後、マクロの自動記録を行い
手動で、選択範囲に A67 を追加した時のマクロが
Union( _
    Range("A33,A34,A35,A36,A37,A38,A39,A40,A41,A42,A43,A44,A45,A46,A47,A48,A49,A50,A51,A52,A53,A54,A55,A56,A57,A58,A59,A60,A61,A62,A63,A64"), _
    Range("A65,A66,A67,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,A16,A17,A18,A19,A20,A21,A22,A23,A24,A25,A26,A27,A28,A29"), _
    Range("A30,A31,A32")).Select
Range("A67").Activate

 
この自動記録マクロを実行すると
Range("A1:A67)).Select
Range("A67").Activate
と同じになります。
 
※当方Excel2013です。
 
 
そこで皆さんのお知恵をお貸し頂きたいのですが
 
1.複数のセル範囲の選択の場合、
  Range("セル範囲1,セル範囲2,・・・") 、オートフィルター 以外に方法があるでしょうか?
 
2. 罫線の消えてしまう時の修正 当方のやり方よりお手軽な方法はありますでしょうか?
 
よろしくお願いします。

回答
投稿日時: 20/09/18 18:28:04
投稿者: mattuwan44

引用:
全行の罫線なら範囲選択を行い 中の横線
  (VBAなら .Borders(xlInsideHorizontal).LineStyle) を設定すれば良いのですが

 
中の線?ってほぼほぼ使わないですねー。
2行おきに罫線を引くときは、
2行分選択して外枠うかなぁ。。。。で、書式のみフィルコピー。
 
条件によって、
(例えばページの境目は太線したい)変えたいときは、条件付き書式設定を使ったり?
 
マクロでやるなら、好きなようにセル範囲を取得して、
2行おきなら2行おきに繰り返せばいいと思いますし、
ページの境目もわかりますよねぇ。。。。
なかなか回答が難しいテーマです。
 
--------------------------------------------------------------
 
話変わりますが、
元の質問は、シート上にいくつかの表が縦に並んでいて、
そのうちのどれかの表だけを削除したいのかなぁと思いました。
 
手動でドラッグするとうまく範囲を選択できないので、
個別に行を選択するような動作をイメージされているのかと思いました。
 
マクロでやるなら、
 
sub test()
    activecell.currentregion.entirerow.delete
end sub

 
のようなことをしたいのかなと。

投稿日時: 20/09/23 10:37:30
投稿者: Suzu

mattuwan44 さんの引用:
2行分選択して外枠うかなぁ。。。。で、書式のみフィルコピー。
 
条件によって、
(例えばページの境目は太線したい)変えたいときは、条件付き書式設定を使ったり?
 
マクロでやるなら、好きなようにセル範囲を取得して、
2行おきなら2行おきに繰り返せばいいと思いますし
 
ページの境目もわかりますよねぇ。。。。

確かにですよね。複数行おきの罫線はマクロでやっていますが
昔は わざわざ 複数行おきに行を選択していました。
 
念のためと動作確認
手動にて、複数おきに選択し、罫線を中線で引いて 行を挿入し、そこに改ページを設定すると。。
あれ。。罫線消えてる。
 
中線にしても罫線消える。。効果無い。昔はあったはずなんですが。。 orz
 
 
引用:
なかなか回答が難しいテーマです。
操作内容と、それを自動記録したマクロを実行した内容 差異が発生する現象ですね。
差異が発生するのは仕様 と、あきらめるしかないですね。
 
先に確認した様に、「多数の複数セルを単独選択」という必要性が無くなってしまったので
WinArrow さんが提示くださった様に
For Each すれば 最終的に求める処理は出来るので 当方としては解決です。
 
 
引用:
元の質問は、シート上にいくつかの表が縦に並んでいて、
そのうちのどれかの表だけを削除したいのかなぁと思いました。
 
手動でドラッグするとうまく範囲を選択できないので、
個別に行を選択するような動作をイメージされているのかと思いました。

セルの結合された列を含む表の行単位での削除の事でしょうかね?
 
確かにそれだと、For Each だと駄目ですね
For i = 5 To 3 Step -1
  Rows(i).Delete
Next
の様に下の行から削除する必要があるので
 
それを知らないと、一気に対象のセル個別で選んで。。と言う発想になる事も頷けますね。
 
当方としては解決ですが、まだ閉めないでおきます。

投稿日時: 20/09/24 10:36:52
投稿者: Suzu

ゴマゴマさんもいらっしゃらない様なので 閉じます。
 
mattuwan44 さん コメントありがとうございました。