Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


512 / 13645 ツリー ←次へ | 前へ→

【79961】別々のシートにある列の結合 VBA 18/6/6(水) 21:43 質問[未読]
【79962】Re:別々のシートにある列の結合 VBA マナ 18/6/6(水) 22:30 発言[未読]
【79964】Re:別々のシートにある列の結合 VBA 18/6/7(木) 23:05 質問[未読]
【79965】Re:別々のシートにある列の結合 VBA マナ 18/6/8(金) 18:56 発言[未読]
【79966】Re:別々のシートにある列の結合 VBA γ 18/6/8(金) 19:10 発言[未読]
【79969】Re:別々のシートにある列の結合 VBA 18/6/9(土) 23:17 質問[未読]
【79973】Re:別々のシートにある列の結合 VBA γ 18/6/10(日) 11:51 発言[未読]
【79980】Re:別々のシートにある列の結合 VBA 18/6/10(日) 22:21 お礼[未読]

【79961】別々のシートにある列の結合 VBA
質問    - 18/6/6(水) 21:43 -

引用なし
パスワード
   こんにちは。よろしくお願いいたします。

題名の件について説明しにくいので,例えて書かせていただきます。

例えば,シート1のA列には,1月の予定表,
シート2のA列には,2月の予定表,
シート3のA列には,3月の予定表・・・・
これが,シート12まで続いてあるとします。

それらをシート13にVBAを使って,年間予定表を作成する。
つまり,シート13のA列には1月の予定,B列には2月の予定・・・L列には12月の予定が表示されることになります。

どのような構文になるのでしょうか?

実際には,200シート分のデータを横並びに結合させなければなりません。ご教授のほどよろしくお願いいたします。

【79962】Re:別々のシートにある列の結合 VBA
発言  マナ  - 18/6/6(水) 22:30 -

引用なし
パスワード
   ▼剛 さん:

少しずつ考えるとよいです。
まずは、

シート1のA列をシート13のA列に転記です。
どんなコードになるかわかりますか。

 

【79964】Re:別々のシートにある列の結合 VBA
質問    - 18/6/7(木) 23:05 -

引用なし
パスワード
   ▼マナ さん:
御返事ありがとうございました。
最初に書いておけば良かったのですが,私のレベルは,自分で記録したマクロを多少書き換える程度のレベルです。
マナさんの質問に対して,私が考えられるのは,マクロの記録を使って,シート1のA列をシート13のA列に貼り付け,シート2のA列をシート13のB列に貼り付け・・・をひたすら繰り返すと言うレベルです
それをどのように書き換えれば良いのか理解できず書き込みした次第です。

特に,右側にひとつずつ列をずらして貼り付けという構文がネットでも見つけられていないところです。

よろしければ,ご教授お願いいたします。

【79965】Re:別々のシートにある列の結合 VBA
発言  マナ  - 18/6/8(金) 18:56 -

引用なし
パスワード
   ▼剛 さん:

>最初に書いておけば良かったのですが,私のレベルは,自分で記録したマクロを多少書き換える程度のレベルです。

でしたら、なおのこと、一気に解決しようと考えないで
順番に理解していけばよいです。

まずは、

シート1のA列をシート13のA列に転記するだけ

のマクロを考えてみてください。
わからなければ、マクロの記録を利用してもよいです。


 

【79966】Re:別々のシートにある列の結合 VBA
発言  γ  - 18/6/8(金) 19:10 -

引用なし
パスワード
   列を選択してコピーし、それを貼り付けまたは値貼り付け
する動作を記録して、こちらにアップしてみては?

【79969】Re:別々のシートにある列の結合 VBA
質問    - 18/6/9(土) 23:17 -

引用なし
パスワード
   マナ様 γ様

ご教授ありがとうございます。
記録したマクロをベースに、書き換えに挑戦してみません。お陰様で「A列の選択」「何番目のシート選択」と「最後のシート選択」の構文を覚えました。
ここまでの構文は下に貼り付けました。本当に、恥ずかしながらこの程度のレベルなのです。

ここで改めて質問です。
この後、約200シートを処理する際には、構文を200回コピーして、シートの選択の(数字)の書き換えと貼り付ける位置(Columns)の書き換えが必要を思われます。
 もっとすっきりした構文にしたいと思い、シートは、「次のシートを選択」にするといいのかと思い、(ActiveSheet.Next.Activate)に置き換えてみましたがうまくいきませんでした。「貼り付ける位置を右に一つずつずらす」に関しては、現在のところ検討もつかないところです。
 ご教授よろしくお願いいたします。


Sheets(1).Select
  Columns("A:A").Select
  Application.CutCopyMode = False
  Selection.Copy
  Worksheets(Worksheets.Count).Select
  Columns("A:A").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Sheets(2).Select
  Columns("A:A").Select
  Application.CutCopyMode = False
  Selection.Copy
  Worksheets(Worksheets.Count).Select
  Columns("B:B").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
  Sheets(3).Select
  Columns("A:A").Select
  Application.CutCopyMode = False
  Selection.Copy
  Worksheets(Worksheets.Count).Select
  Columns("C:C").Select
  Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

【79973】Re:別々のシートにある列の結合 VBA
発言  γ  - 18/6/10(日) 11:51 -

引用なし
パスワード
   (1)Selectをできるだけしないようにするとこのように短縮できます。

Sub test2()
  Sheets(1).Columns("A:A").Copy
  Worksheets(Worksheets.Count).Columns("A:A").PasteSpecial Paste:=xlPasteValues
  
  Sheets(2).Columns("A:A").Copy
  Worksheets(Worksheets.Count).Columns("B:B").PasteSpecial Paste:=xlPasteValues
  
  Sheets(3).Columns("A:A").Copy
  Worksheets(Worksheets.Count).Columns("C:C").PasteSpecial Paste:=xlPasteValues
End Sub
------------------------------
シートを変数化すると短くなります。
そして、Columns("A:A")はColumns(1)とも書けます。

Sub test3()
  Dim ws As Worksheet
  Set ws = Worksheets(Worksheets.Count)
  
  Sheets(1).Columns(1).Copy
  ws.Columns(1).PasteSpecial Paste:=xlPasteValues
  
  Sheets(2).Columns(1).Copy
  ws.Columns(2).PasteSpecial Paste:=xlPasteValues
  
  Sheets(3).Columns(1).Copy
  ws.Columns(3).PasteSpecial Paste:=xlPasteValues
End Sub
------------------------------
これを繰り返し構文For .. Nextを使って書くと、こうなります。

Sub test4()
  Dim ws As Worksheet
  Dim k As Long
  
  Set ws = Worksheets(Worksheets.Count)
  For k = 1 To 3
    Sheets(k).Columns(1).Copy
    ws.Columns(k).PasteSpecial Paste:=xlPasteValues
  Next
End Sub

参考にしてみて下さい。

【79980】Re:別々のシートにある列の結合 VBA
お礼    - 18/6/10(日) 22:21 -

引用なし
パスワード
   γ 様 マナ様


ご教授いただきありがとうございました。
一つの実行でも、いろいろなやり方があり、最後はあそこまで短くできるのですね。ほんとすばらしいです。勉強になりました。

また、「自分でここまで考えたということを示してから、ご教授いただくことがマナーであること」に気づかせていただきありがとうございました。
以後気をつけたいと思います。

512 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free