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

こんにちは、エクセル365を使っています。

以下の選択範囲を上下反転するにはどんなコードを書いたら良いのでしょうか?

Sub Macro1()
Range("B1:H1").Select
Range(Selection, Selection.End(xlDown)).Select
End Sub

詳しい方、よろしくお願いいたします。

質問者からの補足コメント

  • どう思う?

    こんにちは、もしよろしければもう一つ教えて頂けませんか?

    AとBのブックがあったとして、Aのブックに書いた教えて頂いたコードでBのブックに動作させるにはどうしたら良いでしょうか?

    コードが動作する対象をアクティブなブックのアクティブなシートにするという意味です。

    お手数ですが、教えて頂だけませんでしょうか。
    よろしくお願いいたします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/03/19 09:07

A 回答 (3件)

要するに、B~Hの1行目から最終行までを上下反転させればいいのなら下記のようにすればよいのではないですか。


今回は使用している領域の最終行を使っていますが、それぞれ一長一短がありますので参考にしてください。
No.8 ワークシートの最終行、最終列を取得する
http://www.niji.or.jp/home/toru/notes/8.html

標準モジュールではなく、シートのモジュールに記述することを想定しています。

====マクロの内容はココから====
Sub Macro上下反転()
Dim 最終行 As Long
Dim temp As Variant 'セルの内容によってはstring 等でも可能
Dim 上行 As Long
Dim 下行 As Long
Dim 列変数 As Long

最終行 = ActiveSheet.UsedRange.Rows.Count
'最終行の取得の仕方は複数あります。最適なものを使用してください。

For 上行 = 1 To Int(最終行 / 2)
 下行 = 最終行 - 上行 + 1
 For 列変数 = 2 To 8 '対象列をBからHまで順次
  temp = Cells(上行, 列変数).Value '上側セルの値を取得=一端保存
  Cells(上行, 列変数).Value = Cells(下行, 列変数).Value
  Cells(下行, 列変数).Value = temp
 Next 列変数
 Next 上行
End Sub
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
お陰様で上下の反転は出来たのですが、このマクロを他のボタンクリックのマクロの途中に動作させようとしました。

'上下を反転
Call Sub Macro上下反転()

このようにしてみたのですが、赤文字で表示され実行してみると構文エラーが出てしまうようなんですが、これはどうしたら良いでしょうか?

既にあるマクロは実際に動作しているものなので、構文だけが悪いという事ですよね?

お手数ですが教えて頂けないでしょうか、よろしくお願いいたします。

お礼日時:2020/03/18 13:43

その「他のボタンクリックのマクロ」が何処に記述されているのかによって対処法は変わってきます。


同一シートのモジュールにあるのでしたら
Call Macro上下反転()
(※Call 呼び出したいSubプロシージャー名 としなければいけません。「Sub」が付いているのが明らかな構文エラーです。)
だけでよいのですが、標準モジュールのものでしたら別の記述になる可能性がありますし、呼び出せないことも考えられます。
また前回答のSubプロシージャを標準モジュールに記述すると、Cellsの指定が不明確で誤作動の原因になることも考えられます。
これ以上は、質問者さんの状況により
・シートモジュール内のSubプロシージャーを使いたい。
・標準モジュール内で標的シートの特定方法(記述方法)
等の質問になりますので、この質問が解決したのであれば別質問をたてることをお勧めします。
    • good
    • 0
この回答へのお礼

再回答頂きありがとうございます。
別質問しようと思います。

お礼日時:2020/03/18 15:21

「選択範囲を上下反転」とはどういうことでしょうか?


「上から下」を選択しようと、「下から上」を選択しようと選択された範囲は一緒ですよね。
例えば
Range(Selection, Selection.End(xlDown)).Select

Range(Selection.End(xlDown),Selection).Select
も同じ範囲です。

「選択された範囲の値を上下を入れ替えたい」のでしょうか?
補足願います。

老婆心
Selection.End(xlDown)
では、結局B列の最終行の値になってしまうようです。また、1行目しか入力値が無い場合には最終行まで選択されてしまいますが、それでよろしいのでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

選択された範囲の値の上下をを入れ替えたいのです。
ちなみに、B~Hは必ず同じ行数で、1行などの事はありません。

また、コードはマクロの記録で取得したものなのですが、提示頂いたコードが正解なのでしょうか?

よろしくお願いいたします。

お礼日時:2020/03/18 10:13

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

このQ&Aを見た人はこんなQ&Aも見ています