• ベストアンサー

セルの交換について

今このようなデータがあったとします。   A B C D E F G H   ------------------ ~ 7|    a   - - - - 8|    b   1 - - - 9|    c   2 4 - - 10|    d   3 5 6 - セルを交換していって作りたいと考えております。 4×4の場合ですと上の状態だと 手順としては (1)E7とH10を交換 (2)E8とG10を交換 (3)E9とF10を交換 (4)E10とE10を交換 (5)F7とH9を交換 (6)F8とG9を交換 (7)F9とF9を交換 (8)G7とH8を交換 (9)G8とG8を交換 (10)H7とH7を交換 で下のような図になると思います。   A B C D E F G H   ------------------ ~ 7|    a   - - - - 8|    b   6 - - - 9|    c   5 4 - - 10|    d   3 2 1 - 頂いたデータはすべて4×4ではないのでこれをnという一般のときでもできるようにしたいのですが、わからないのでコードを教えていただけますでしょうか?nはC7から最終行でいいかと思います。 とりあえず思いついた方法なのでこの方法以外でも出来るというのであれば教えていただきたいです。

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

  • ベストアンサー
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

条件が良く分かってませんが、こんな感じかな? Sub test() Dim tbl Dim x, y, z1, z2 z1 = Range("e65536").End(xlUp).Row If z1 < 6 Then Exit Sub z1 = z1 - 7 z2 = z1 + 1 tbl = Range("e7", Range("e7").Offset(z1, z1)) For x = 0 To z1 For y = 0 To z1 Range("e7").Offset(x, y).Value = tbl(z2 - y, z2 - x) Next y Next x End Sub 以上参考まで

nardobrea
質問者

補足

ありがとうございます。 hige様のコードで動作確認を行い、条件通りの動きをしてくれています。

その他の回答 (2)

回答No.3

置き換え範囲は常に正方形(n×n)になるんですよね? rngOrgとnはとりあえず固定にしておきました。データ量に合わせて自動計算する等はうまく改良してください。 Dim rngOrg As Range Dim n As Integer Set rngOrg = Range("C7") ' 基点 n = 5 ' 行列の辺の数 Dim rngMatrix As Range Dim varSwap As Variant Dim x1 As Integer, y1 As Integer Dim x2 As Integer, y2 As Integer n = n Set rngMatrix = Range(rngOrg, rngOrg.Offset(n - 1, n - 1)) ' 置き換え範囲   For y1 = 1 To n - 1     x2 = n - y1 + 1     For x1 = 1 To x2       y2 = n - x1 + 1       ' セルの値を交換       varSwap = rngMatrix.Cells(y1, x1).Value       rngMatrix.Cells(y1, x1).Value = rngMatrix.Cells(y2, x2).Value       rngMatrix.Cells(y2, x2).Value = varSwap     Next   Next

nardobrea
質問者

補足

ありがとうございます。 動作はうまくいっているみたいなので、あとは アレンジして調整したいと思います。

回答No.1

VBAで書こうと思ったけど、計算が面倒くさかったので、使わずに。 B1 = 1 C1 = 2 D1= 3 E1 = 4 B2 = 5 C2 = 6 ・ ・ ・ ・ E4 = 16 というデータを仮定します。 A1 = 1 A2 = 2 A3 = 3 A4 = 4 という風にオートフィルなどを使いつつ各行に番号を付けます。 A1からE4をコピーして A6からE9に貼り付けます。 A6からE9を選択した状態で "データ"メニュー → "並び替え" 最優先されるキーをAに設定し、降順を選択し、OK A6からE9をコピーし、、 A11からE14までに「形式を指定して貼り付け」→行と列を入れ替える A11からE14までを A16からE19にコピーし、 "データ"メニュー → "並び替え" 最優先されるキーをAに設定し、昇順を選択し、OK すると B16からE19にほしいデータが出来ています

nardobrea
質問者

補足

こういうやり方もあるんですね ありがとうございました。

関連するQ&A

  • 2行のセルの入れ替え。

     初めまして、よろしくお願いします。  セルに A B C D E F G H I J K L 1 a b c d e f 2 g h i j k l 3 m n o p q r 4 s t u v w x 5 " ・ " ・ " ・ " 100 "  という表があります。これを A B C D E F G H I J K L 1 a b c d e f g h i j k l 2 m n o p q r s t u v w x 3 " 4 " 5 " ・ " ・ " ・ " 100 "  という風に、偶数行のデーターを奇数行の後ろにつけるようにしたいと思います。無理ならば奇数行だけのデーター、偶数行だけのデーターとなるように、何かよい方法を教えて頂きたく、よろしくお願いします。

  • excelのセルの並べ替え。

    Excelの操作で迷っています。詳しい方の知恵を拝借できたらと思います。 以下のようにデータの入力されたセルが並んでいます(アルファベット1文字が1セルです)。 A B C D E F G H I J K 横に何セル並んでいるかは、行によってまちまちです。このようなデータが、数千行あります。これを、以下のように1列に並べ替えたいのです。 A B C D E F G 「行列を入れ替えてコピー」ではなかなかに大変なので、何か良い方法を探しています。よろしくお願いいたします

  • エクセル マクロでセルを自動移動

    例1のようになっているエクセル表があります。 データは右方向、下方向へ増えます。 Cの列以降は4つ単位でしかデータは増えません。 それを例2の表のように列A,Bのデータはそのままに Cの列以降の4つのセルを区切りに下の行に移動して、 空白の列まで言ったらA2の行以降を最後の行まで繰り返しするという マクロを書くことは可能でしょうか。 出来ましたらそのマクロを教えてください。 例1 A1 B1 C1 D1 E1 F1 G1 H1 I1 J1 K1 L1 M1 N1 A2 B2 C2 D2 E2 F2 G2 H2 I2 J2 A3 B3 C3 D3 E3 F3 G3 H3 I3 J3 K3 L3 M3 N3 例2 A1 B1 C1 D1 E1 F1 A1 B1 G1 H1 I1 J1 A1 B1 K1 L1 M1 N1 A2 B2 C2 D2 E2 F2 A2 B2 G2 H2 I2 J2 A3 B3 C3 D3 E3 F3 A3 B3 G3 H3 I3 J3 A3 B3 K3 L3 M3 N3

  • エクセル:複数セルからの参照

    お世話になります。 A,B,C列にデータが入っています。 D,E,F列に参照のためのデータがあります。 A,B,C列はそれぞれD,E,F列に対応しています。 A,B,C列と同じ並びのデータが入っている行をD,E,F列から探し、その隣のG列の値をH列に返す。 D,E,F列の並びが重複する行はありません。 A,D列は場所の名前、B,C,E,F列には数字が入っている。 例) A1に事務室 B1に20 C1に3 が入っているとする。 D/E/F列が 事務室/20/3 の並びになっているのが10行目の場合、H1にG10のセルの値を返す。 この場合、H列にはどんな計算式を入れておけばよいのでしょうか? A,B,C列と同じ並びのデータがD,E,F列で見つからない場合は空白をH列に返す。 ちなみにD/E/F列が 事務室/20/3 の並びになっている行は10行目しかないです。 よろしくお願いします。

  • 結合セルに結合していないセルの値を貼り付けたいです。

    結合セルに結合していないセルの値を貼り付けたいです。 シート1の1行目の[A1-B1-C1-D1]を結合しています。以下同じように[E1-F1-G1-H1]…のように4つづつ結合しています。 この行に、シート2のA1→B1→C1と続く結合していないセルのデータを貼り付けたいのですが、やりかたがわかりません。色々やってみたのですが、うまくゆきません。ご教授お願いいたします。

  • 可視セルへのコピー マクロ

    次のように、可視セルから可視セルへコピーしたいです。 (元の状態) A   B     C     D   E   F 名前  支払  金額  名前 支払  金額 aさん 済    150 bさん 済    200 cさん 未    150 dさん 済    100 eさん 未    120 fさん 済    250 gさん 未    300 hさん 未    210 この状態をB列で支払が済んでるかどうかでフィルターをかけて ABC列をコピーし、DEF列に可視セルのみコピーして A   B     C     D   E   F 名前  支払  金額  名前 支払  金額 cさん 未    150  cさん 未    150 eさん 未    120  eさん 未    120 gさん 未    300  gさん 未    300 hさん 未    210  hさん 未    210 フィルターをはずすと A   B     C     D   E   F 名前  支払  金額  名前 支払  金額 aさん 済    150 bさん 済    200 cさん 未    150   cさん 未    150 dさん 済    100 eさん 未    120   eさん 未    120 fさん 済    250 gさん 未    300   gさん 未    300 hさん 未    210   hさん 未    210 と、未払いの人だけ、D列以降にもコピーされてる状態にしたいのです。 可視セルへのコピーはマクロを組む必要があると聞いて見てるのですが、 私が実現させたい可視セルへのコピーとまた違うプログラムでした。 どなたかよろしくお願いします。

  • エクセル 単一セルから結合セルへのコピー&ペーストについて

    エクセルで、去年のデータを今年のフォームに貼り付けたいのですが、 今年のフォームには結合セルが含まれています。 去年のフォームは A B C D E F G 1 2 3 4 5 6 7 今年のフォームは A BC DE F G H I 1 2  3  4 5 6 7 となっています。 貼り付けると、セルの結合が取れてしまうのですが 上手に貼り付ける方法はないのでしょうか?

  • エクセルで縦行のセルを横列のセルにリンク貼り付けをしたい

    表1の A B C D E F G . . . の各セルを、表2にA B C D E F G . . と簡単にリンク貼り付けをする方法がありませんか。

  • セルの移動量で参照したい。

     A  B C D 1  あ い う え 2 お か き く 3 け こ さ し 上のような位置関係のデータを   A  B C D  E F  G H I  J K L 1 あ い う え お か き く け こ さ し このように変換したいのですが、 E1やI1は左となりのセルが参照しているデータの1行下で3列左のセルを参照するようにしたいのです。 よろしくお願いします。

  • 条件を満たすN番目のセル

    条件を満たすN番目のセルの値を求める式を教えてください。 A1 B1 C1 D1 E1 F1 G1 あ い あ あ い い い ↓ い(B1) い(E1) い(F1) い(G1) のようにしたいと思っています。い(E1)は、"い"の中で2番目なので、それを求める式があれば良いと思います。

専門家に質問してみよう