性格いい人が優勝

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

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で質問しましょう!