Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Home : Excel 2016)
選択範囲を移動し、範囲サイズを変更する軒で
投稿日時: 21/05/01 06:20:34
投稿者: rinahana

 いつもお世話になっております。40程の班があり、各班は4名〜30名の
構成となっています。各班の名簿を作る作業を考えてやっとできたのですが、
for - Next でループさせて、罫線を引く部分のものですが、 SelectやSelection
がやたら多くなり、これをどうすればすっきりした形になるかを教えてもらえませんか?
 netで探してやっと作成したのですが 細かなところが分かりません。
この作業は「罫線を引く部分を”CurrentRegion”で選択して、表の最上段のタイトルを
下にずらせて、あとで、範囲を1行減らせる」というものです。説明は不要とはおもいますが
一応させてもらいました。お願いします。
                        sing_ichi(row1, c2).Select
                        Selection.CurrentRegion.Select
                        Selection.Offset(1, 0).Select
                        Selection.Resize(Selection.Rows.Count - 1).Select
                        Selection.Borders.LineStyle = True

回答
投稿日時: 21/05/01 08:37:01
投稿者: WinArrow
投稿者のウェブサイトに移動

 

引用:
SelectやSelection
がやたら多くなり、これをどうすればすっきりした形になるかを教えてもらえませんか?

参考コード
 
 
Dim sing_ichi As Range, ROW1 As Long, C2 As Long
    ROW1 = 1: C2 = 4
    Set sing_ichi = Cells(ROW1, C2)
    With Application.Intersect(sing_ichi.CurrentRegion, sing_ichi.CurrentRegion.Offset(1, 0))
        .Borders.LineStyle = True
    End With

回答
投稿日時: 21/05/01 08:51:57
投稿者: WinArrow
投稿者のウェブサイトに移動

もう少し、すっきりさせよう
 
Dim ROW1 As Long, C2 As Long
    ROW1 = 1: C2 = 4
    With Cells(ROW1, C2).CurrentRegion
        With Application.Intersect(.Cells, .Cells.Offset(1, 0))
            .Borders.LineStyle = True
        End With
    End With

回答
投稿日時: 21/05/01 08:57:42
投稿者: simple

回答を頂き、解決済みかと思います。
 
参考までにお聞きするのですが、
sing_ichiとは何で、どのように定義されているのでしょうか。
そこも含めて提示されるとよいかもしれません。
(今のご提案に直接関係するものではありませせんが。)

投稿日時: 21/05/01 10:01:37
投稿者: rinahana

早速のお教え 有難うございます。
 WinArrowさん、simpleさん ありがとうございます。
小生の稚拙(ネットを参考にほとんど1行1行作成)なものをwith を使った
すっきりしたものになっております。ありがとうございます。
もう少し 説明をさせてもらいますと、
 
テキストが班名簿ごとにすでに並んでいるとします。
 
人数の多い順にソートされている。(人数は30名〜3名とバラバラ)
現在のものは 3列×13行になっている。
(A4版用紙縦に出力する。現在は5ページあります。)
で、WinArrowさんのコードを2つともランした結果、どちらも1行目の右側の
2・3列だけ 罫線が引かれない結果です。
そのあとの2行以降は罫線はできています。
なんとかしたいのですが
宜しく。
simpleの助言ですが、Sing_ichi は出力位置を定義していますが、今回はセルA3なのであまり意味はないですね。
後は Integer で定義しており、あまり問題がないと思い 記載していませんでした。
ごめんなさい。
以上です。よろしく 

投稿日時: 21/05/01 10:31:54
投稿者: rinahana

できました。
 
 With Cells(ROW1, C2).CurrentRegion を
 
 With sing_ichi(row1, c2).CurrentRegion に変更したら、上手くいきました。
ありがとうございました。

回答
投稿日時: 21/05/01 12:11:35
投稿者: simple

>40程の班があり、各班は4名〜30名の構成となっています。
この部分の指定について以前質問されていたので、どうなったのかなと疑問に思っただけです。
固有名詞的な名前なので、ひとつひとつ指定する方式に戻ったんですかね。

回答
投稿日時: 21/05/01 12:29:48
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
With Cells(ROW1, C2).CurrentRegion を
  
With sing_ichi(row1, c2).CurrentRegion


者と後者の違い
 
sing_ichiをA3セルという説明がありました。
Row1とC2について説明がないので、勝手に「1」「4」として掲示しました。
 
 
例えば
    Debug.Print sing_ichi(Row1, C2).Address
これを実行すると
どのような結果になりますか?
 
Row1とC2の値も悦明していただけますか?
 

回答
投稿日時: 21/05/01 19:32:10
投稿者: WinArrow
投稿者のウェブサイトに移動

今後も、質問されると思いmすので、
質問の際に、状況をきちんと説明していただきたいです。
 
今回の説明のなかには、
sing_ichi(Row1, C2)
があります。
普通に考えると
 
sing_ichi
をいう大きなセル範囲の中の「row」行目、「C2」列目のセルと想像します。
そこに
.currentregion
 
が付いています。
そうすると、罫線を設定するセル範囲の左上と、sing_ichiの関係が
分からなくなります。
 
このように、一見、徳分からないところを割愛されると、
回答者は、勝手に解釈してしまいます。
 
今後、状況説明には、手をぬかないようお願いします。

トピックに返信