• ベストアンサー

Excel データの再配置

Excelでデータを再配置するマクロの組み方を教えて下さい! 参考画像→ http://goo.gl/2nLWH 画像左側のように複数のデータセットが縦方向に配置されているシートで、左上が「セット○」セルから始まるデータセット単位で横方向に空白列を挟んで再配置したいと思っています。 画像はサンプルデータで、実際には行数は不定数、列数は4列のセットが複数個存在します。 宜しくお願いします。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

#2、#3、cjです。 > できました!今までのマクロはコードを見た時に大体どのように実行されているのかなとわかったのですが、貴方様のコードはマクロ初心者の小生にはチンプンカンプンです(笑)流石です! 馬鹿にしてます?(笑) 内容的には、マクロの記録をアレンジしたような、 VBAというよりは、とてもEXCEL一般機能寄りの処理をしています。  Set rTgt = .Range("A:A").SpecialCells(Type:=xlCellTypeConstants)  (手作業なら、A列を選択、F5キー、Alt+Sキー、Alt+Oキー、Enter) で、A列にある定数セルを取得して  rTgt.Areas(i).Resize(, 4)  (手作業なら、Ctrl+Alt+Sキー Shift+→キーを3回、の繰り返し) で、それぞれのセルブロック(領域)を4列に拡張して  .Copy Destination:=Sheets("Sheet2").Cells(i * 5 - 4) 指定のセルに貼り付ける、、、 という内容です。 #3のコード、より堅実に書き直しました。     Sub Re8130368dd()   Dim rTgt As Range   Dim i As Long   Set rTgt = Sheets("Sheet1").Range("A:A").SpecialCells(Type:=xlCellTypeConstants)   If rTgt Is Nothing Then Exit Sub   For i = 1 To rTgt.Areas.Count     rTgt.Areas(i).Resize(, 4).Copy Destination:=Sheets("Sheet2").Cells(i * 5 - 4)   Next i   Set rTgt = Nothing End Sub     > ちなみに列数を5列や6列にするにはどのように変数を与えてやればよいでしょうか? 6列の場合、を見てもらえれば、要領が分かると思います。     Sub Re8130368d6()   Dim rTgt As Range   Dim i As Long   Set rTgt = Sheets("Sheet1").Range("A:A").SpecialCells(Type:=xlCellTypeConstants)   If rTgt Is Nothing Then Exit Sub   For i = 1 To rTgt.Areas.Count     rTgt.Areas(i).Resize(, 6).Copy Destination:=Sheets("Sheet2").Cells(i * 7 - 6)   Next i   Set rTgt = Nothing End Sub     列数に依存しない書き方もありますが、今回の課題には必要なさそうなので、 また別の機会にでも、検討してみてください。

Timper1912
質問者

お礼

>馬鹿にしてます?(笑) とんでもございません!尊敬しております!! この度は大変お世話になりました(^^ゞ

その他の回答 (3)

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.3

#1です。 Sheet1からSheet2 にコピーするのでしたか? では、 Sub Re8130368d()   Dim rTgt As Range   Dim i As Long   Set rTgt = Range("A:A").SpecialCells(Type:=xlCellTypeConstants)   For i = 1 To rTgt.Areas.Count     rTgt.Areas(i).Resize(, 4).Copy Destination:=Sheets("Sheet2").Cells(i * 5 - 4)   Next i   Set rTgt = Nothing End Sub

Timper1912
質問者

補足

ご回答ありがとうございます! できました!今までのマクロはコードを見た時に大体どのように実行されているのかなとわかったのですが、貴方様のコードはマクロ初心者の小生にはチンプンカンプンです(笑)流石です! ちなみに列数を5列や6列にするにはどのように変数を与えてやればよいでしょうか?

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

別件の続きのようですね。 数式を使っていないですし、列数固定ということなので、 簡単な方法が却って効率的です。 Sub Re8130368c()   Dim rTgt As Range   Dim i As Long   Set rTgt = Range("A:A").SpecialCells(Type:=xlCellTypeConstants)   For i = 2 To rTgt.Areas.Count     rTgt.Areas(i).Resize(, 4).Cut Destination:=Cells(i * 5 - 4)   Next i   Set rTgt = Nothing End Sub

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

次のようなマクロでどうでしょう。 Sub 並び替え() Set WS1 = Worksheets("Sheet1") Set WS2 = Worksheets("Sheet2") Dim i, n As Integer i = 0 n = -4 Do i = i + 1 If Left(WS1.Cells(i, "A"), 3) = "セット" Then Setto1 = i End If Do i = i + 1 If i > 500 Then Exit Do Loop Until Left(WS1.Cells(i, "A"), 3) = "セット" Setto2 = i - 1 Range(WS1.Cells(Setto1, "A"), Cells(Setto2, "D")).Copy Do n = n + 5 Loop Until WS2.Cells(1, n) = "" ActiveSheet.Paste (WS2.Cells(1, n)) Application.CutCopyMode = False i = i - 1 Loop Until i = 500 End Sub

関連するQ&A

  • EXCELのデータで空白列を削除したい

    EXCELで列数・行数が毎回変化するデータがあり、この中に数箇所に分かれて空白列が存在します。 この空白列だけをマクロで削除する方法を教えてください。

  • エクセルVBAでデータ最終行取得方法

    エクセルVBAでデータ最終行取得方法で良い方法を教えてください。 データの行数、列数は不定。 最多のデータ行の列も不定。 この条件で、データ最終行を取得するにはどうすればよいでしょうか? lastrow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "A").End(xlUp).Row では、A列の最終行に限定されます。 lastrow = ActiveSheet.Cells(1, "A").SpecialCells(xlLastCell).Row では、列の限定はありませんが、一旦データ入力後、削除した部分まで入ってしまいます。 lastrow = ActiveSheet.UsedRange.Rows.Count では、データ入力後、削除した部分まで入ってしまい、かつ、1行目など上部が空白の場合、不正確になります。

  • Excel 2007で6万5536行以上のデータ

    Excel 2007では、最大列数が従来の256列から1万6384列に,最大行数が従来の6万5536行から104万8576行に増えたと聞きました。私のExcelは、2007ですが、最大行数は6万5536行のままです。 どうしたら、6万5536行以上のデータを扱えるようになるのでしょうか? 何らかの設定変更で可能になるのでしょうか?

  • Excell VBA:dataに空白行を挿入したい。

    A列のデータが違うところで、空白を開けたいのですが、どうすればいいのでしょうか。よろしくお願いします。 データの行数は不定です。 1 t1  **  ** 2 t2  **  ** 3 t2   **  ** 4 t3   **  **  を 1 t1  **  ** 2 3 t2  **  ** 4 t2  **  ** 5 6 t3  **  ** 7 8 t4  にしたい。

  • エクセルでデータを列別に配置するには?

    A列に以下のようなデータが入っています。これを国名はA列、数字はB列に配置するにはどうしたらいいでしょうか? B列は、空白です。 エクセル2002です。 A列 行1 Afghanistan (386) 行2 Albania (103) 行3 Algeria (89) 結果 ↓ A列 B列 行1 Afghanistan 386 行2 Albania 103 行3 Algeria 89

  • Excelで文字列の配置

    添付画像のように左の文字列が行の縦方向の中心に配置できません。 左右の文字列が行の中心に配置できる方法を教えてください

  • 『エクセル』 2つの列を1列で表示させたいです。

    エクセルで2つの列(A列及びB列)にそれぞれ入力されているデータ(行数不定)を添付画像のように1列(D列)に表示させたいです。 できれば、A列にデータを追加したら自動的に間に入るようにしたいです。 よろしくお願いします。

  • excelの操作でわからないことがあります・・・。

    ちょっとややこしい操作なので、うまく説明できるかわかりませんが、できるかぎりわかりやすく説明するつもりなので、よろしくお願いします。 まず、 51 42 35 41 36 50 41 32 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ 36 40 39 38 というサンプルデータがあって、ここから1列目の 51 36 ・ ・ ・ 36 を取り出し、 1 1 1 2 1 3 ・・ ・・ ・・ 1 400 というデータ、(2列目は1~400まで1づつ増加)とくっつけて 1 1 51 1 2 36 ・・・ ・・・ ・・・ 1 400 36 というデータにします。 次にサンプルデータの2列目の 42 50 ・ ・ ・ 40 を取り出し、 2 1 2 2 2 3 ・・ ・・ ・・ 2 400 というデータとくっつけて 2 1 42 2 2 50 ・・・ ・・・ ・・・ 2 400 40 という風にする、というのをサンプルの3列目、4列目・・・・とやっていきたいのです。 (わかりにくい説明ですいません) どのような効率的な操作、あるいはマクロを作ればいいでしょうか? 単純に作業するには、サンプルデータの列数が多すぎて時間がかかり過ぎてしまうので、困っています。 ちなみに3列目は 3 1 35 3 2 41 ・・・ ・・・ ・・・ 3 400 39 になります。

  • Excel VBA 2013; 並び替え、セル比較

    コーディングの方法を知りたいのですが、突き合わせ作業をおこないたいです。 同一列項目からなるデータを左右に並べて、左側を正として、例えば商品番号、売上日を連結するなりキーとしてマッチしたら右側の同一行に並へ 変えていきます。 そして、各行単位で比較して、差異があるセルに色付けしたいと考えています。 行数は不定です。 やり方がまったくわかりません。 サンプルを添付させていただきます。 アイデアをいただけませんでしょうか?

  • エクセルの各シートをアクセスで結合するには

    お世話になります。 1つのエクセルファイルに同じ書式のシートが複数あります。1行目がタイトル行で2行目以降にデータが入っています。 この各シートのA2セルからM列の最終行までの範囲のデータを順番にアクセスに取り込み一つのテーブルを作成したい。各シートのデータを縦に結合するイメージです。行数は各シートバラバラです。また各シートの列数はM列より多いが必要なのはM列までです。 最初のシートだけタイトルが必要なのでA1セルから取り込みます。 縦に並べるとエクセルの最大行数を超える可能性があるので一旦エクセル上で縦に並べることは考えません。 アクセスに取り込んだ際、主キーになる項目がないので左端に1からの連番の列を作ります。 以上のことをするためにはどのようにすれば良いのでしょうか?シートがかなりあるので自動化できればうれしいです。 空シートはありませんが、空白のセルはあります。 よろしくお願いします。

専門家に質問してみよう