プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。

現在マクロを作成しておりまして、追加機能が多くなり
自分の知識だけではどうにもならず、内容が連動しているため
一度に2点の質問をさせて頂きます。
どなたかご伝授よろしくお願いいたします。
 

 1.並び替えについて
  セルを結合している場合は並び替えができないようなExcel仕様になっていますので、
  これを一括で解除して並び替えが終了したら、元の結合セル状態に一括で戻す
  方法があるのでしょうか。

 2.セルの範囲指定について
  データの入力されているセルまで自動で範囲指定の方法があるのでしょうか。

  セルA2:E10まで入力されていつ場合(E列が入力項目の最後の列と仮定)

A 回答 (4件)

No2です。


セルの結合/解除、結合セルの判定については
下記URLが参考になります。
http://www.moug.net/tech/exvba/0050106.html
http://www.moug.net/tech/exvba/0050105.html
    • good
    • 0
この回答へのお礼

助かりました

Tatsu99へ
お礼が大変遅くなってしまいました。
ありがとうございました。

お礼日時:2017/06/17 15:32

No2です。

添付図を張り忘れましたので、追加します。
「並び替えとデータ範囲指定について」の回答画像3
    • good
    • 1

「2.セルの範囲指定について」は、No1の方が述べているので、「1.並び替えについて」のみ回答します。


添付図1のような状態として、考えられるのは
①A列をキーにしてA,B列をソート
②B列をキーにしてA,B列をソート
上記で②については、あり得ないので①のケースとして回答します。
問題点1.セル結合を解除すると、結合セルの最上位行以外は、空白になります。
つまり添付図2のようになります。
つまり、黄色の部分が空白になるので、ここに上の行と同じ内容を設定してあげないとソートがでできません。
この問題を解決する必要があります。
また、逆に言えば、セル結合するとき、黄色のセルは、空白にしてから、セル結合しないと、期待した結果になりません。

上記の問題が解決したとしても、セル結合した範囲の行が、異なるなら、前回の結合解除したセル位置の
ソート後にセル結合する位置は変わってきます。そのことを念頭に置く必要があります。
    • good
    • 0

セル A2 から使用されているセルの終端までの範囲を参照するには


Dim s As Worksheet
Set s = Thisworkbook.Worksheets("Sheet1")

Dim r1 As Range, r2 As Range
Set r1 = s.Cells(2, 1)
Set r2 = s.Range(r1, s.UsedRange.Cells.SpecialCells(xlCellTypeLastCell))
r2 には A2 ~ 最終列の最終行までのセル参照が入っています。


結合を解除したり元の結合状態に戻したりする処理はお勧めできません。
ワークシート オブジェクト、表のセル範囲、並び替えに使用する列番号、昇順降順などのパラメータを保持し、並び替えや元に戻す処理をしてくれるクラス モジュールを自作するのならそれも良いでしょう。
並び替えも元に戻すという事は、もともとの行番号も記憶しておかなければなりませんね。
本の並び順の中で、どのセルとどのセルが結合されていたかという情報も記憶しておかなければなりませんね。

であれば一時的に別シートに複製した表を使うのはどうでしょうか?
これなら元に戻す必要はありません。

また、セルの値だけ取得できれば良いのであれば二次元配列に読み込んで、配列上でソートを掛けてみるのもいいかもしれません。
一部が結合されたままでも、セルの値を読み取るだけであれば特に問題なくできたかと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!