dポイントプレゼントキャンペーン実施中!

教えていただいたエクセルマクロを参考に作成してみました。
マクロが動いた時は「すごい!」「うれしい!」・・と、とてもとても感動いたしました。
ありがとうございます。

1行目からですと正確に反転できるのですが、
24行目から275行目までのセルの反転を希望です。
列は2行目のみです。

以下が作成したものです。(先生のマクロにならって)
最初と最後は入れ替えできているのですが、途中数行におかしな数値が入ります。

Sub AP上下反転()

Dim 最終行 As Long
Dim temp As Variant
Dim 上行 As Long
Dim 下行 As Long
Dim 列変数 As Long

最終行 = 275
上行 = 24

For 上行 = 24 To Int(最終行 / 2)
下行 = 最終行 - 上行 + 23 + 1
For 列変数 = 2 To 2
temp = Cells(上行, 列変数).Value
Cells(上行, 列変数).Value = Cells(下行, 列変数).Value
Cells(下行, 列変数).Value = temp
Next 列変数
Next 上行
End Sub

どうぞ、どうぞ・・ご指導のほど、お願い申しあげます。

A 回答 (4件)

とりあえず、修正しました。



Sub AP上下反転()

Dim 開始行 As Long
Dim 最終行 As Long
Dim temp As Variant
Dim 上行 As Long
Dim 下行 As Long
Dim 列変数 As Long

最終行 = 275
開始行 = 24

For 上行 = 開始行 To 開始行 + Int((最終行 - 開始行 + 1) / 2) - 1
下行 = 最終行 - 上行 + 23 + 1
For 列変数 = 2 To 2
temp = Cells(上行, 列変数).Value
Cells(上行, 列変数).Value = Cells(下行, 列変数).Value
Cells(下行, 列変数).Value = temp
Next 列変数
Next 上行
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
感謝の気持ちでいっぱいです。

今、確認しました。できました!
データ、見事に上下入れ替えができていました。

もう、あきらめて、私でできる形で仕上げて・・と言い聞かせておりました。
とてもとても・・嬉しいです。
なんとお礼申しあげていいやら・・。

10年以上前に少し勉強してマクロの魅力に引き寄せられました。
仕事で必要に迫られてのことです。
仕事ですから、間に合わないことには意味がありません。
まずはできる形で・・。(アポロ13号方式です。)
そして時間を見つけてはシンプルな形を探そうと。

思いついたコードが動いた時の感動は忘れません。
ドキドキワクワクです。
天国かと思ったら次は地獄です。

変数がうまく使えたら・・と。
今回、for next をちょっと前に使ってまたマクロのおもしろさを覚えました。
今日、データをチェックしていたら・・なんとなんと、
途中のデータが違っています。

地獄に落ちました。
そこで、初めての投稿をしました。
投稿してよかったです。

本当に自分のものにするにはまだまだ長い道のりですが、
あきらめず少しずつ少しずつ前に進んでいきます。
本当にありがとうございました。

お礼日時:2022/01/30 13:27

こんにちは


少し、コードを整理して
For 列変数 = 2 To 2 は  変わらないので このループ外して
最終行 = 275 の
下あたりに 列変数=2
上行 = 24 は For 上行 = 24 で代入されていくので 不要かな
あっても結果は変わらないのだけれど


さて、ここからが本題です
下行 = 最終行 - 上行 + 23 + 1 
ループの初めは確かに 下行 =275  だけれど
最後は 下行 =162 になってしまいますね。(138+24)

つまりInt(275 / 2) 書き出し行 137= 参照行138 になりません

もし、下行 = 最終行 - 上行 とすると 今度はループの最初で
書き出し行 24 = 251 となり 最終行275では無い。。

下行は 275~138に変化する変数を使うか、変化する計算式で
変数 下行に代入すれば良い事になります。

初めは下行は最終行と同じ、1回ループするごとに変化させる
言ってしまっていますが、やり方は色々ありそうです。
    • good
    • 3
この回答へのお礼

ありがとうございます。
先程の回答の方に修正していただき、
動かしてみると、
なんと、すばらしく上下入れ替えできました。

その方にお礼を申し上げるのが精一杯で、
原因は後回し、私の未熟な頭で少しずつ紐解いてゆこう・・
と思っておりました。

と、その時に今回の回答が届きました。
謎が解けました!
私の知りたかったことです。
とてもありがたいです。

ていねいにわかりやすく・・
解説いただきましたこと感謝します。

「あぁ・・そういうことだったんだ‥」と。
250行だとデータ1つずつチェックしても間違いが起こるから、
データを少なくしてトライしてみたり・・
悪戦苦闘でした。
解放されました。

と同時にムクムクと次の課題に挑戦しようと思います。
苦しいからこそおもしろいのですね。
そしてうれしいのですね。

とても感謝いたしております。
ありがとうございました。

お礼日時:2022/01/30 13:50

開いている列に昇順にナンバーリングをいれ、範囲を決めてナンバーリング列を基準に降順に並び替える。



と言うのとは違うのかな?
先の質問を見てないからねぇ。
    • good
    • 0
この回答へのお礼

回答いただきまして、ありがとうございます。
今回、初めての投稿です。
投稿の仕方もわからず、なんとかかんとか投稿しました。

マクロで、for next を使ってできれば・・と思い、投稿されていた人の例に倣って、作成してみました。
250行ぐらいのデータです。

その方の回答サンプルは1行目からの上下入れ替えでした。
別シートでA1・・1行目からであれば正確な数値になりました。
希望は24行目からです。

1行目からできるのであれば or next  を使って別シートに1行目から作成して、転記する・・か、
提案いただいたナンバリングを使っての方法・・等で作成します。

まずは今の自分の能力でできる形で一旦仕上げます。
でも、あきらめきれないので・・
時間を見つけては、探し続けます。

早々に回答ありがとうございました。

お礼日時:2022/01/30 12:01

For Next


の使い方をよく調べてみましょう。

数値を増やすだけでなく、数値を減らすこともできます。
どのように行うかは、1行目から行った場合と同じです。

マクロのコードの一部を変えて対処しようと考えてはいけません。
全体の意味を考えず、書き写しているだけでは何も覚えられませんよ。
プログラミングというものは、こういった作業の積み重ねの上に成り立ちます。
    • good
    • 3
この回答へのお礼

早々に回答をいただきありがとうございます。
今回初めて投稿しました。
マクロ初心者です。

先日for nextで悪戦苦闘しながらあまりにもシンプルなコードでマクロが動いたので感動いたしました。
行列を入れ替えて、そのあと上下を入替てあと計算させていく表作成です。
別シートにナンバリングをして並び替え、コピーする方法で一旦作成します。
(今の私の能力でできる形でします。)
が、シンプルなコードに憧れがあります。
おっしゃるとおり、自分でひとつずつ考えての積上げだと思います。
今回は一旦仕上げますが、あきらめず挑戦します。

貴重なお言葉、ありがとうございました。

お礼日時:2022/01/30 11:50

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