• ベストアンサー

逆さまに貼り付け(excel)

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

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

uniaa
質問者

お礼

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

その他の回答 (5)

回答No.5

簡単な方法をひとつ  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ではなくてこんな方法も有る事を覚えて下さいね

uniaa
質問者

お礼

お礼が遅くなり、誠に申し訳ありません。 >何でも関数、マクロ、VBAではなくてこんな方法も有る事 言われる点、よく分かります。 VBAとかでなくても、意外と解決経路ってあるものですよね。 ただ今回は、連番でない場合の逆貼付もありえるので。。。 どちらにせよ、ありがとうございました!

回答No.4

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

回答No.3

行列計算で入れ替えるのはいかがでしょうか? でかくなると面倒なので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がならんだ正方形ということです。 これで数字がその値の大きさ順に並んでなくてもそのままの逆順になると思うのですがお試しください。

uniaa
質問者

お礼

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

  • maron--5
  • ベストアンサー率36% (321/877)
回答No.2

◆ご希望ではないかもしれませんが、参考までに関数による方法です    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) ★下にコピー

uniaa
質問者

お礼

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

  • motsu2006
  • ベストアンサー率37% (110/297)
回答No.1

貼り付けた後にソートっていう動きではダメでしょうか? 当方、マクロ記憶にてやってみました。 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

uniaa
質問者

お礼

お礼が遅くなり、大変申し訳ありません。 >Order1:=xlDescending 実際に実行せずの意見で、違っていたら申し訳ないのですが、 上記記述から推測するに、単純に並べ替えるのでしたら、 少し意図と違うかな、と。 1 2 3 4 みたいなケースでしたらいいのでしょうが、場合によっては 1 6 5 2 を 2 5 6 1 と並べ替えたい場合もあるのです。 どちらにせよ、お忙しい中ご回答ありがとうございました!

関連するQ&A

専門家に質問してみよう