• 締切済み

エクセル VBA 複雑な行列入れ替えコピー

VBAを使って複雑な行と列を入れ替えをしたいのですが?どなたか伝授していただけませんでしょうか?    A    B    C 1 (1) 2 (2) 3 (3) 4 (1) 5 (2) 6 (3)  ・  ・  ・ 1,000行以上あります。 これを   A    B    C 1 (1)    (2)    (3) 2 (1)    (2)    (3) 3 (1)    (2)    (3)      ・      ・      ・ という風にしたのですが・・・・ お分かりになる方よろしくお願いします。

みんなの回答

  • vba_2007
  • ベストアンサー率100% (1/1)
回答No.5

'(1)からはじまる文字列をA列に '(2)からはじまる文字列をB列に '(3)からはじまる文字列をC列に 'それ以外をD列に移動させる '念のため初期のA列情報をH列にバックアップしておく Option Option Explicit Sub main()   Dim i As Long   Dim A As String   Dim B As String   Dim C As String   Dim D As String   Dim E As String      'A列のデータ分だけループをまわす   With Excel.Application.ActiveSheet     For i = 1 To .Range("$A$65536").End(xlUp).Row       '初期化       A = ""       B = ""       C = ""       D = ""       E = ""       'A列のコピー元の行       A = "A" & i       'B~Eは、最終使用行+1(=コピー先となる空白行)       B = "B" & .Range("$B$65536").End(xlUp).Row + 1       C = "C" & .Range("$C$65536").End(xlUp).Row + 1       D = "D" & .Range("$D$65536").End(xlUp).Row + 1       E = "E" & .Range("$E$65536").End(xlUp).Row + 1              'A列の先頭3文字によってコピー先を振り分ける       'ただし、B1~E1が空白の場合でも、.End(xlUp).Row が 1 になってしまうので、       'その場合のみアドレス直指定で対処       If Mid(.Range("A:A").Cells(i, 1).Value, 1, 3) = "(1)" Then         If Range("B1") = "" Then           Range(A).Copy Range("B1")         Else           Range(A).Copy Range(B)         End If       ElseIf Mid(.Range("A:A").Cells(i, 1).Value, 1, 3) = "(2)" Then         If Range("C1") = "" Then           Range(A).Copy Range("C1")         Else           Range(A).Copy Range(C)         End If       ElseIf Mid(.Range("A:A").Cells(i, 1).Value, 1, 3) = "(3)" Then         If Range("D1") = "" Then           Range(A).Copy Range("D1")         Else           Range(A).Copy Range(D)         End If       '(1)~(3)のどれでもない場合は、E列にコピー       Else         If Range("E1") = "" Then           Range(A).Copy Range("E1")         Else           Range(A).Copy Range(E)         End If       End If     Next   End With      'A列をG列にバックアップ   Range("A:A").Copy Range("G:G")   'A列を削除   Range("A:A").Delete   MsgBox "Program End" End Sub

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

'3行ずつがセットになっていて2行目、3行目を1行目と同じ行の '列方向持ってくるというだけなら。 Sub 処理() Dim oSh As Worksheet Dim i As Long, j As Long Dim pLastRow As Long Dim pMod As Long Set oSh = Sheets("Sheet1") 'Sheet1には実際使っているシート名を入れる。 With oSh pLastRow = .Range("A" & .Rows.Count).End(xlUp).Row For i = 1 To pLastRow pMod = i Mod 3 Select Case pMod Case 0 .Range("C" & i - 2) = .Range("A" & i) Case 1 'そのまま Case 2 .Range("B" & i - 1) = .Range("A" & i) End Select Next i For i = pLastRow To 1 Step -1 If .Range("B" & i) = "" Then .Rows(i & ":" & i).Delete End If Next i End With Set oSh = Nothing End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

こんな感じで Sub test() Dim i, ii, iii Dim a a = Range("a1", Cells(Rows.Count, 1).End(xlUp).Address) Range("a1", Cells(Rows.Count, 1).End(xlUp).Address).ClearContents iii = 1 For i = 1 To UBound(a, 1) / 3 For ii = 1 To 3 Cells(i, ii) = a(iii, 1) iii = iii + 1 Next ii Next i End Sub エラー処理、アレンジはご自分で

全文を見る
すると、全ての回答が全文表示されます。
  • hisappy
  • ベストアンサー率46% (184/392)
回答No.2

A列に並んでいるデータを単純に3つずつ並べなおすのと データの内容によって移動先が変化するのかで VBAの組み方もかわってきますが… 後者ならこんな感じでしょうか。 フローなコーディング版。 for(A1~Aの最終行)  セル内容判定   1番:B列に移動。   2番:C列に移動。   3番:D列に移動。 end for A列削除。 実際にはB、C、Dの各列での現在行管理が必要です。 エラーなデータが存在していた場合の処理も 場合によっては必要でしょう。

ryoryo1979
質問者

お礼

ありがとうございます! 素人なのでもう少し詳しく教えていただけないでしょうか? すいませんが宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

B1 =INDIRECT("$A"&(ROW()-1)*3+(COLUMN()-1)) でD1まで右にフィルコピー。 B1~D1選択で下にフィルコピー。 B~D列コピー・B1をクリックし形式を選択して貼り付けで値を選択。 と言う方法もあります。

ryoryo1979
質問者

お礼

ありがとうございます! 素人なのでもう少し詳しく教えていただけないでしょうか? すいませんが宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル VBA 複雑な行列入れ替えコピー

    VBAを使って複雑な行と列を入れ替えをしたいのですが?どなたか伝授していただけませんでしょうか?    A    B    C 1 東京都  ペット マルチーズ 2 神奈川県 ペット チワワ 3 埼玉県  ペット 柴犬 4 千葉県  ペット プードル  ・  ・  ・ 1,000行あります。 これを 別シートに20行づつ1行にまとめて 東京都 ペット マルチーズ 神奈川県 ペット チワワ ・・・ のようにしたいのです。 コピー先のデータ行数は元が1,000行だったので、結果50行になります。 よろしくお願いします。

  • Excel 行列入れ替え

    行列入れ替えを行いたいのですが、良い方法はありますでしょうか? A列   B列   C列   D列   E列   F列   G列 111   222    あ    い    う    え 333   444    あ    い    う    え    お ↓ A列   B列   C列 111   222    あ 111   222    い 111   222    う 111   222    え 333   444    あ 333   444    い 333   444    う 333   444    え 333   444    お C列以降は内容により、フィールド数が異なります。 最終的にはA列ごとB列ごとに各値を含む割合を出したいと考えています。 ピボットテーブルで集計をしようと考えているのですが、横方向にデータが 入っていると上手く出来ませんでした。 もし、データの入れ替えをせず集計が出来れば、そういった方法も教えて 頂きたいです。 宜しくお願いいたします。

  • Excel 複雑なセル埋めのVBA

    エクセルで入力済みのデータをテーブル形式にするためにVBAを組んでいますが突き当たりました、お知恵を拝借させてください。現在成形出来ているのは以下の状態です。    A列     B列    C列 1行  AA      2     1 2行 3行  BB      3     2 4行 5行 6行 7行 8行 9行  CC      2     3 10行 11行 12行 13行 14行 これを以下のようにB列を埋めたいと考えています。A列を埋めるVBAは当方で分かります。      A列    B列    C列 1行    AA     1     1 2行    AA     2 3行    BB     1     2 4行    BB     2 5行    BB     3 6行    BB     1 7行    BB     2 8行    BB     3 9行    CC     1     3 10行   CC     2 11行   CC     1 12行   CC     2 13行   CC     1 14行   CC     2 B1に2が入っていてC1に1が入っているときはB1から下へ1,2の連番を1回入れます、B3に3と入っていてC3に2と入っているときはB3から下へ1,2,3の連番を2回繰り返します、同じようにB9以降も処理しています。連番のスタートは必ず1で、現在B列に入っている数字が連番の最後に当たる数値でC列が繰り返し回数という事です。上の例ではB列を書き直していますが、新たにD列にB列に入れたい連番の列を作る方法でもいいと思っています。 もし表が崩れていたら済みませんでした。恐れ入りますがポインタでも結構ですのでご教授下さい、よろしくお願いします。

  • VBA,行列入れ替え挿入

     初めまして、よろしくお願いします。  VBAで、シート  A B C D E 1    9 2    8 3    7 4 5 を  A B C D E 1 2 3 4 5  9 8 7 とC列(C1:C3)を5行目(B5:D5)へと行を挿入していくVBAを教えて頂きたく、よろしくお願いします。

  • EXCEL 関数をふくむ行列の入れ替え

    いまSheet1に3列*2行で A1+A10 B1+B10 C1+C10 A2+A11 B2+B11 C2+C11 といった関数が入っているとして、 別のシートに、この関数から導き出される値の行列を入れ替えた状態で表示したいのですが、どういった方法があるのでしょうか? ちなみに値だけを行列の入れ替えをしたいのではなく、関数を活かしたまま行列を入れ替えたいのですが、一般的な「形式を選択して貼り付け」で行列の入れ替えにチェックをいれても、エラーが返ってきてしまいうまくいきません。 さらに、その別のシート上でSUMなどの関数で縦・横・の集計など計算をしたいのですが・・・ いい方法があったら教えてください。

  • EXCEL VBAで

    EXCEL VBAで シート1のA2~G2までの列にA,B,C,D~と題名があり、それぞれの下の行には数字が並んでます。シート2のA2~G2までの列にもA,B,C,D~と題名がありますが、ランダムに並んでます。シート1のAの行を、シート2のAの行に、BにはBへという風にコピーをさせるにはどのようにすればよいでしょうか。またシート1A~Gのどれかが欠けている場合もあります。その場合はシート1にあるもののみコピーすることとします。 わかりにくいかも知れませんか、どうかよろしくお願いします。

  • VBA エクセル 複雑な行列入れ替え

    VBAを使って以下のような行列変換を行いたいです。 【元のデータ】   A   B   C   D   E   F 1 X11  Y11  X12  Y12  X13  Y13 … 2 X21  Y21  X22  Y22  X23  Y23 … 3 X31  Y31  X32  Y32  X33  Y33 … 4 … … 1000行あります。 これを別のシートに以下のように行列を入れ替えたいです。 【変換後】   A   B   C   D   E   F 1 X11  Y11  X21  Y21  X31  Y31 … 2 X12  Y12  X22  Y22  X32  Y32 … 3 X13  Y13  X23  Y23  X33  Y33 … 4 X14  Y14  X24  Y24  X34  Y34 … … どうぞおろしくお願い致します。

  • エクセル2003のVBAを教えて

    エクセル2003のVBAを教えてください。 次の対象データで、(1)(2)(3)の作業が出来るエクセルVBAを教えて下さい。 (1)(2)(3)個々のVBAでお願いします。 ●対象データ:種類(A列)、文字(B列)、    データの行数:不特定なので、データのある最終行までとします。 ●教えていただきたい項目  (1):種類だけを(C列)に取り出す。  (2):種類の先頭に空白の行を3行入れて、追加の2行目の種類(A列)に文字(B列)を入れる。  (3):種類が5行以上あるときは、5行ごとに空白行を追加する。 ●対象データ 種類(A列)   文字(B列) AA       あああ BB       いいい BB       いい BB       いいい CC       うう CC       うう DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ ●(1)のVBAの結果(このようになるVBAを教えてください。) (C列) AA BB CC DD ●(2)、(3)のVBAの結果(このようになるVBAを教えてください。) 種類(A列)    文字(B列) あああ AA        あああ いいい BB        いいい BB        いいい BB        いいい うう CC        うう CC        うう ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ

  • エクセルのVBA「当てはまる場合、コピー」の方法

    Excell2003のVBAについてお尋ねします。     A1 101  B1 102  C1  A2 102  B2 104  C2 OK A3 103  B3 105  C3 A4 104         C4 OK A5 105         C5 OK ・   ・ ・   ・ ・   ・    ↑     ↑      ↑   もとから  指定する マクロで A列に101から始まる番号が続いています。 B列で番号を入力してボタンを押します。 そうしますと、入力した番号の行にだけC列にOKという文字が入るようできますでしょうか。 イメージとしましては、来場してくれた会員を控えておきたいときに、 A列には会員番号があらかじめ入力されていて、 来場してくれた方の会員番号をB列にどんどん入力していきます。 ボタンを押すとB列で入力した方のC列に「来場」と入力されるような使い方を想定しております。 コピーペーストのVBAとVLOOKUPの数式の知識は(かろうじて)あるのですが、 VBAでどのように行ったらよいかわからずにおります。 お手数ですがよろしくお願いいたします。

  • Excel セルの内容入れ替え

    以下のようなデータあり 【元データ】   A         B         C 1 0         A         B 2 1         B         A 3 0         A         B A列が”1”の場合のみB列の値とC列の値を入れ替えたい。 【得たいデータ】   A         B         C 1 0         A         B 2 1         A         B 3 0         A         B VBAで釦作成をし、クリックをすることで入れ替えができるようにと考えています。 ご教授よろしくお願いします。