教えていただいたエクセルマクロを参考に作成してみました。
マクロが動いた時は「すごい!」「うれしい!」・・と、とてもとても感動いたしました。
ありがとうございます。
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
どうぞ、どうぞ・・ご指導のほど、お願い申しあげます。
No.3ベストアンサー
- 回答日時:
とりあえず、修正しました。
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
ありがとうございます。
感謝の気持ちでいっぱいです。
今、確認しました。できました!
データ、見事に上下入れ替えができていました。
もう、あきらめて、私でできる形で仕上げて・・と言い聞かせておりました。
とてもとても・・嬉しいです。
なんとお礼申しあげていいやら・・。
10年以上前に少し勉強してマクロの魅力に引き寄せられました。
仕事で必要に迫られてのことです。
仕事ですから、間に合わないことには意味がありません。
まずはできる形で・・。(アポロ13号方式です。)
そして時間を見つけてはシンプルな形を探そうと。
思いついたコードが動いた時の感動は忘れません。
ドキドキワクワクです。
天国かと思ったら次は地獄です。
変数がうまく使えたら・・と。
今回、for next をちょっと前に使ってまたマクロのおもしろさを覚えました。
今日、データをチェックしていたら・・なんとなんと、
途中のデータが違っています。
地獄に落ちました。
そこで、初めての投稿をしました。
投稿してよかったです。
本当に自分のものにするにはまだまだ長い道のりですが、
あきらめず少しずつ少しずつ前に進んでいきます。
本当にありがとうございました。
No.4
- 回答日時:
こんにちは
少し、コードを整理して
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回ループするごとに変化させる
言ってしまっていますが、やり方は色々ありそうです。
ありがとうございます。
先程の回答の方に修正していただき、
動かしてみると、
なんと、すばらしく上下入れ替えできました。
その方にお礼を申し上げるのが精一杯で、
原因は後回し、私の未熟な頭で少しずつ紐解いてゆこう・・
と思っておりました。
と、その時に今回の回答が届きました。
謎が解けました!
私の知りたかったことです。
とてもありがたいです。
ていねいにわかりやすく・・
解説いただきましたこと感謝します。
「あぁ・・そういうことだったんだ‥」と。
250行だとデータ1つずつチェックしても間違いが起こるから、
データを少なくしてトライしてみたり・・
悪戦苦闘でした。
解放されました。
と同時にムクムクと次の課題に挑戦しようと思います。
苦しいからこそおもしろいのですね。
そしてうれしいのですね。
とても感謝いたしております。
ありがとうございました。
No.2
- 回答日時:
開いている列に昇順にナンバーリングをいれ、範囲を決めてナンバーリング列を基準に降順に並び替える。
と言うのとは違うのかな?
先の質問を見てないからねぇ。
回答いただきまして、ありがとうございます。
今回、初めての投稿です。
投稿の仕方もわからず、なんとかかんとか投稿しました。
マクロで、for next を使ってできれば・・と思い、投稿されていた人の例に倣って、作成してみました。
250行ぐらいのデータです。
その方の回答サンプルは1行目からの上下入れ替えでした。
別シートでA1・・1行目からであれば正確な数値になりました。
希望は24行目からです。
1行目からできるのであれば or next を使って別シートに1行目から作成して、転記する・・か、
提案いただいたナンバリングを使っての方法・・等で作成します。
まずは今の自分の能力でできる形で一旦仕上げます。
でも、あきらめきれないので・・
時間を見つけては、探し続けます。
早々に回答ありがとうございました。
No.1
- 回答日時:
For Next
の使い方をよく調べてみましょう。
数値を増やすだけでなく、数値を減らすこともできます。
どのように行うかは、1行目から行った場合と同じです。
マクロのコードの一部を変えて対処しようと考えてはいけません。
全体の意味を考えず、書き写しているだけでは何も覚えられませんよ。
プログラミングというものは、こういった作業の積み重ねの上に成り立ちます。
早々に回答をいただきありがとうございます。
今回初めて投稿しました。
マクロ初心者です。
先日for nextで悪戦苦闘しながらあまりにもシンプルなコードでマクロが動いたので感動いたしました。
行列を入れ替えて、そのあと上下を入替てあと計算させていく表作成です。
別シートにナンバリングをして並び替え、コピーする方法で一旦作成します。
(今の私の能力でできる形でします。)
が、シンプルなコードに憧れがあります。
おっしゃるとおり、自分でひとつずつ考えての積上げだと思います。
今回は一旦仕上げますが、あきらめず挑戦します。
貴重なお言葉、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
B列の最終行までA列をオート...
-
Excelで、あるセルの値に応じて...
-
Worksheets メソッドは失敗しま...
-
IIF関数の使い方
-
文字列の結合を空白行まで実行
-
vba 2つの条件が一致したら...
-
VBAのFind関数で結合セルを検索...
-
データグリッドビューの一番最...
-
最終列の右へSUM関数を作成する...
-
VBAを使って検索したセルをコピ...
-
Changeイベントでの複数セルの...
-
Cellsのかっこの中はどっちが行...
-
複数csvを横に追加していくマク...
-
VBAの構文 3列置きにコピーし...
-
VBA 何かしら文字が入っていたら
-
エクセル 2つの表の並べ替え
-
VBAで10行おきにセルの下に罫線...
-
【VBA】2つのシートの値を比較...
-
VBScriptでfindを使うには??
-
マクロ 最終列をコピーして最終...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
マクロ 最終列をコピーして最終...
-
VBAを使って検索したセルをコピ...
-
データグリッドビューの一番最...
-
URLのリンク切れをマクロを使っ...
-
VBAのFind関数で結合セルを検索...
-
【VBA】2つのシートの値を比較...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
Excel(M365) Vlookup/セル反転(...
-
VBA指定行削除
-
VBAでのリスト不一致抽出について
-
C# dataGridViewの値だけクリア
-
Changeイベントでの複数セルの...
-
VBAで、特定の文字より後を削除...
-
rowsとcolsの意味
おすすめ情報