- ベストアンサー
データーを同時に入れ替えたいのですが・・・・
エクセルのデーターがA列~J列まであり、また1行目~250行までにあるとします。 指示した行のデーターを同時に入れ替えることは可能ですか。 例えば、どこかのセル等で次のように指示した場合 データーを5行目のデーターを90行目のデーターとを同時に入れ替えたい時はどのようにしたらよいですか。関数やマクロで可能でしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
何度もごめんなさい。 余りに深く考えすぎていました。 単純にA列の番号を指定し、1行ずつを入れ替えれば良い!というコトですね! ↓にしてみてください。 Sub Sample3() Dim i As Long, k As Long, c As Range, r As Range i = InputBox("入替え元番号を入力") k = InputBox("入替え先番号を入力") Set c = Range("A:A").Find(what:=i, LookIn:=xlValues, lookat:=xlWhole) Set r = Range("A:A").Find(what:=k, LookIn:=xlValues, lookat:=xlWhole) On Error Resume Next If c.Row < r.Row Then i = c.Row k = r.Row Else i = r.Row k = c.Row End If Rows(k + 1).Insert Rows(i).Cut Cells(k + 1, "A") Rows(k).Cut Cells(i, "A") Rows(k).Delete End Sub これではどうでしょうか?m(_ _)m
その他の回答 (3)
- tom04
- ベストアンサー率49% (2537/5117)
続けてお邪魔します。 No.2の補足 >2行分あるとして、修正したいのですがお教え下さい。通し番号をつけていますので、 実は行番号での入れ替えでなく、通し番号を指定して入れ替えたい!というコトですよね? 尚、1データは2行が一塊になっている!というコトですので、 仮にA列に「通し番号」が入っていて2行ずつセルの結合がしてあるか、 1行おきに通し番号が入っている!という前提のコードにしてみました。 Sub Sample2() Dim firRow As Long, secRow As Long, c As Range, r As Range firRow = InputBox("差替え元番号を入力") secRow = InputBox("差替え先番号を入力") Set c = Range("A:A").Find(what:=firRow, LookIn:=xlValues, lookat:=xlWhole) Set r = Range("A:A").Find(what:=secRow, LookIn:=xlValues, lookat:=xlWhole) On Error Resume Next '←念のため If c.Row > r.Row Then firRow = r.Row secRow = c.Row Else firRow = c.Row secRow = r.Row End If Rows(secRow + 2).Resize(2).Insert Rows(firRow).Resize(2).Cut Cells(secRow + 2, "A") Rows(secRow).Resize(2).Cut Cells(firRow, "A") Rows(secRow).Resize(2).Delete End Sub ※ 操作方法は前回と一緒です。 今度はどうでしょうか?m(_ _)m
補足
ほんとうにありがとうございます、なんて親切な方ですか、感謝します。マクロを本当に勉強しようと思いました。但し、前回の補足で私の言い方が悪かったため違うご理解をされたようでした。「1行は表題があり、1行は科目説明の行があります。2行分あるとして、修正したいのですが・・・・・・」 これは私の言い方がまずかったです。 「実は行番号での入れ替えでなく、通し番号を指定して入れ替えたい!というコトですよね?」については、その通りなのです。 尚、1データは2行が一塊になっている!というコトですので・・・・・ これは塊ではなくて、1行目に表題・2行目に科目説明があって、2行が一塊ではないのです。あくまでも2行分入れ替えて行くのでなく、最初のNo.1マクロのように1行づつ入れ替える訳です。ただ、通し番号は3行目からつける訳ですから最初のNo.1マクロでは、行数と通し番号は一致して作って下さったのです。つまり、行目とすべきを「目」という言葉を抜かしたばかりに、ご迷惑をおかけしてしまったということです。ご理解いただけましたでしょうか。素人考えですが、最初のNo.1マクロの始まりを3行目から始めることに変更するだけでよいと思った訳です。説明が悪かったです、できれば3行目から始めるといことを理解して頂き厚かましいお願いですが、再度作って頂けませんか。あるいは修正すればできるようなら、お教え下さい。
- tom04
- ベストアンサー率49% (2537/5117)
No.1です。 >Alt+F8キー をすると、入れ替え元の行を聞いてきますこれはどのようにしたら良いでしょうか インプットボックスが表示されている状態ですので、その画面の中にカーソルが点滅している窓があるはずです。 その中に、入れ替えたい行番号を入力 → Enter(またはOK) → 続いて同じ画面が出ますので そこにも先ほどの行と入れ替えたい行番号を入力 → Enter(またはOK) これで入力した二つの行が入れ替わるはずです。m(_ _)m
補足
できました、ありがとうございました。但し、1行は表題があり、1行は科目説明の行があります。2行分あるとして、修正したいのですがお教え下さい。通し番号をつけていますので、3行目から1~最後の行が268行目までになります。勝手なお願いで大変申し訳ありません。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! VBAでの一例です。 >例えば、どこかのセル等で次のように指示した場合 とありますが、インプットボックスに行番号を入力するようにしてみました。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面(カーソルが点滅しているところ)に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long i = InputBox("入れ替え元の行を入力") k = InputBox("入れ替え先の行を入力") Rows(k + 1).Insert Rows(i).Cut Cells(k + 1, "A") Rows(k).Cut Rows(i) Rows(k).Delete End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m
補足
Alt+F8キー をすると、入れ替え元の行を聞いてきますこれはどのようにしたら良いでしょうか。初心者で申し訳ありません。
お礼
色々とお世話になりました、できました。考えていることを伝えることが難しいこと再認識しました。不手際の多かったことお許し下さい。大変助かりました。ありがとうございました。