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

コピーした範囲を貼り付ける際に、持っているデータの一番最後から貼り付けていく方法を探しています。
 VBAの領域でしょうか。。。

 例えばセル番地A1からA3には数値の1,2,3がそれぞれ入っている。それをコピーします。そのやりたい方法でA4番地のセルで”貼り付け”をすると3が、A5番地には2が、A6番地には1が貼付られるようにしたいのです。
 形式を選択して貼り付け、というメニューの中にもそのような選択肢はありませんでした。
 当ジャンル内で"貼付 逆から EXCEL エクセル 逆さま さかさま あべこべ”といったキーワードで検索してもなかったです。
 また念のため、”コンピューター [技術者向け] > プログラミング > Visual Basic ”カテゴリもちょっと調べたのですが、なかったので質問させてください。

 宜しくお願いします

A 回答 (6件)

こんにちは。



マクロでの解決のようですから、以下のような方法で出来ます。最初にマウスで、コピーする範囲を選択してから、マクロを実行します。ショートカットに取り付けると良いかと思います。

'標準モジュール
Sub ReverseCopy()
'逆さにコピーする
Dim myRng As Range
Dim Dest As Range
Dim i As Long
Dim j As Integer
Dim k As Long
If TypeName(Selection) <> "Range" Then Exit Sub
Set myRng = Selection
 Application.DisplayAlerts = False
 On Error Resume Next
 Set Dest = Application.InputBox("貼り付け先を指定してください", Type:=8)
 If Dest Is Nothing Then Exit Sub
 On Error GoTo 0
 Application.DisplayAlerts = True
 Set Dest = Dest.Cells(1)
With myRng
For j = 1 To .Columns.Count
 For i = .Rows.Count To 1 Step -1
  k = k + 1
  Dest(k, j).Value = .Cells(i, j).Value
 Next i
 k = 0
Next j
End With
End Sub
    • good
    • 0
この回答へのお礼

お礼が遅くなり、誠に申し訳ありません。
コードまでお書き頂き、ありがとうございます。
しかもDialog形式で、任意の所に貼り付けられるだなんて。。。

コメントを書き、自分のものにしてみようと思います。

ありがとうございました。

お礼日時:2006/11/19 15:37

簡単な方法をひとつ


 A B C D E F
 1 2 3 4 5(1)
 2 3 4 5 6(2)
 3 4 5 6 7(3)
 4 5 6 7 8(4)
例えば、この様なデータが有ったとしてこれをA列が4→1の順にコピー
できれば良いのですね
F列の最初に1を入力してオートフィルで1づつ加算しますと()内の値になります
そしてコピーしたい所を選択してコピー先にコピーします(A1からF4までを選択)
コピーされたデータを並べ替えしますが、第一キーをF列にすれば出来ませんか?
(F列で降順、範囲の先頭行をデータで並べ替えして下さいね)
何でも関数、マクロ、VBAではなくてこんな方法も有る事を覚えて下さいね
    • good
    • 0
この回答へのお礼

お礼が遅くなり、誠に申し訳ありません。

>何でも関数、マクロ、VBAではなくてこんな方法も有る事
言われる点、よく分かります。
VBAとかでなくても、意外と解決経路ってあるものですよね。
ただ今回は、連番でない場合の逆貼付もありえるので。。。

どちらにせよ、ありがとうございました!

お礼日時:2006/11/19 15:39

あぅ(^^; 間違えました m(__)m


上記MMULT()の中身が逆でした
誤 =MMULT(A1:A3,C1:F3)
正 =MMULT(C1:F3,A1:A3)です
失礼しました。
shft+ctrl+ENTERすると入力されたセルの中の式は
{=MMULT(C1:F3,A1:A3)}   と{}で囲まれたものになります。
必要な数のセルを選択した状態でその中の一番上にだけ入力すれば選択範囲全部におなじ式が入ります。
    • good
    • 0

行列計算で入れ替えるのはいかがでしょうか?


でかくなると面倒なので3つだけで書きます
ずれると見難いかもなので便宜上全角で表記します

   A  B  C  D  F
----------------
1| 3     0  0  1
2| 8     0  1  0
3| 2     1  0  0

A列の 3、8、2 が逆に並べたいデータだとします
(見やすくするためにB列は空欄にしています)
並べ替えたデータを置く場所を(たとえばH1:H3)選択して
=MMULT(A1:A3,C1:F3)と打ち込み、
shft+ctrl+ENTERで入力します(普通にENTERだけではありません)
並べ替えるデータが4つのときは4×4の、10個ののときは10×10の「単位行列」(の逆並び)を作ればおっけいです。ようは右上から左下への対角線にだけ1が並び、他のところは0がならんだ正方形ということです。
これで数字がその値の大きさ順に並んでなくてもそのままの逆順になると思うのですがお試しください。
    • good
    • 0
この回答へのお礼

お礼が遅くなり、大変申し訳ありません。
MMULT関数、始めて知りました。
行列の積を返す関数、みたいですね。
行列を少し勉強すれば、使いまわせそうです。
ありがとうございます!

お礼日時:2006/11/19 15:44

◆ご希望ではないかもしれませんが、参考までに関数による方法です


   A
1  1
2  2
3  3
4  3
5  2
6  1

A4=INDEX($A$1:$A$3,COUNT(A1:A3)-ROW(A1)+1)
★下にコピー
    • good
    • 0
この回答へのお礼

お礼が遅くなり、大変申し訳ありません。
MMULT関数でない場合の方法ですね。
ありがとうございます。
関数名的には、今まで使ったことのある関数なので、
取り組みやすそうです。

ありがとうございます!

お礼日時:2006/11/19 15:45

貼り付けた後にソートっていう動きではダメでしょうか?



当方、マクロ記憶にてやってみました。

Sub Macro4()

Range("A1:A3").Select
Selection.Copy
Range("A4").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Sort Key1:=Range("A4"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
:=xlPinYin, DataOption1:=xlSortNormal
End Sub
    • good
    • 0
この回答へのお礼

お礼が遅くなり、大変申し訳ありません。

>Order1:=xlDescending
実際に実行せずの意見で、違っていたら申し訳ないのですが、
上記記述から推測するに、単純に並べ替えるのでしたら、
少し意図と違うかな、と。
1
2
3
4
みたいなケースでしたらいいのでしょうが、場合によっては
1
6
5
2

2
5
6
1
と並べ替えたい場合もあるのです。

どちらにせよ、お忙しい中ご回答ありがとうございました!

お礼日時:2006/11/19 15:49

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