Excel VBA質問箱 IV

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

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


9032 / 13646 ツリー ←次へ | 前へ→

【29670】列と行を入れ替えてコピーする あさこ 05/10/11(火) 15:13 質問[未読]
【29671】Re:列と行を入れ替えてコピーする 座布団 05/10/11(火) 15:32 回答[未読]
【29676】Re:列と行を入れ替えてコピーする あさこ 05/10/11(火) 16:40 質問[未読]
【29685】Re:列と行を入れ替えてコピーする ichinose 05/10/11(火) 19:46 発言[未読]
【29716】Re:列と行を入れ替えてコピーする あさこ 05/10/12(水) 14:41 お礼[未読]
【29714】Re:列と行を入れ替えてコピーする 座布団 05/10/12(水) 14:10 回答[未読]
【29717】Re:列と行を入れ替えてコピーする あさこ 05/10/12(水) 15:08 お礼[未読]

【29670】列と行を入れ替えてコピーする
質問  あさこ  - 05/10/11(火) 15:13 -

引用なし
パスワード
   こんにちわ。
今日も質問ですみません。

あの〜。
シート1のA1とA2にあるデータをシート2のA1とB1に行列を入れ替えてマクロとかで
自動的に貼り付けてくれるような作業をしたいのですが、教えていただけたら幸いです!
本当にいつもすみません・・・・

例:
シート1のA1に金額、A2に個数が入っているとする。
(それが永遠とA列に300行にそんな感じで入っているとする・・・)
で、シート2のA1にシート1のA1を貼り付け、B1にシート1のA2を貼り付け。

これでわかりますか?
上記の例だとシート1のA9のデータはシート2のA5、A10はシート2のB5に貼り付く)

お手数をおかけします。
マクロ初心者ですみません・・・(T_T)

【29671】Re:列と行を入れ替えてコピーする
回答  座布団  - 05/10/11(火) 15:32 -

引用なし
パスワード
   >例:
>シート1のA1に金額、A2に個数が入っているとする。
>(それが永遠とA列に300行にそんな感じで入っているとする・・・)
>で、シート2のA1にシート1のA1を貼り付け、B1にシート1のA2を貼り付け。
>
>これでわかりますか?
>上記の例だとシート1のA9のデータはシート2のA5、A10はシート2のB5に貼り付く

単純にアルゴリズムの話しだと思いますが、
基本的な処理は以下のような感じになると思います。

Private Sub Seiretu()
  Dim s1row As Long 'シート1の操作先の行番号
  Dim s2row As Long 'シート2の操作先の行番号

  s1row = 1
  s2row = 1
  
  While (Sheet1.Cells(s1row, 1).Value <> "")
    Sheet2.Cells(s2row, 1).Value = Sheet1.Cells(s1row, 1)
    Sheet2.Cells(s2row, 2).Value = Sheet1.Cells(s1row + 1, 1)
    
    s1row = s1row + 2
    s2row = s2row + 1
  Wend
End Sub

いかがでしょうか。

【29676】Re:列と行を入れ替えてコピーする
質問  あさこ  - 05/10/11(火) 16:40 -

引用なし
パスワード
   座布団さん ありがとうございます。
シート間では、無事実行することができました!
ありがとうございます。(^O^)

で、すみません。
もし、これがファイルをまたいだ場合どうしたらいいのでしょうか?
本当に初心者ですみません。(>_<)

例えばりんご.xlsのリンゴというシートのデータを
総合.xlsのリンゴというシートに貼り付けたい場合なんですけど・・ 

本当にごめんなさい!!

【29685】Re:列と行を入れ替えてコピーする
発言  ichinose  - 05/10/11(火) 19:46 -

引用なし
パスワード
   ▼あさこ さん、座布団さん
こんばんは。


>もし、これがファイルをまたいだ場合どうしたらいいのでしょうか?
>本当に初心者ですみません。(>_<)
>
>例えばりんご.xlsのリンゴというシートのデータを
>総合.xlsのリンゴというシートに貼り付けたい場合なんですけど・・ 

仮にBook1.XlsのSheet1のセルA1から
   A
 1 10
 2 11
 3 12
 4 13
 5 14
 6 15
 7 16
 8 17
 9 18
 10 19

というようなデータが入っていたとして、

これをBook2.xlsのSheet2のセルA1から
   A B
 1 10 11
 2 12 13
 3 14 15
 4 16 17
 5 18 19

というデータを構成させるには、
標準モジュールに
'=======================================================
Sub test()
  Dim rng As Range
  Dim myarray As Variant
  With Workbooks("book1.xls").Worksheets("sheet1")
   myarray = sp_trans(.Range("a1", .Cells(.Rows.Count, 1).End(xlUp)))
   End With
  With Workbooks("book2.xls").Worksheets("sheet2")
   .Range("a1:b" & UBound(myarray, 1)).Value = myarray
   End With
End Sub
'=======================================================================
Function sp_trans(rng As Range, Optional Interval = 2) As Variant
'機能---指定されたセル範囲を指定された列数に再配置する
' input---- rng 再構成するセル範囲
'      interval 再構成列数
' output--- sp_trans n行 interval列の2次元配列
  ReDim ans(1 To Application.RoundUp(rng.Count / Interval, 0), 1 To Interval)
  For idx = 1 To rng.Count
   ans((idx - 1) \ Interval + 1, _
       ((idx - 1) Mod Interval) + 1) = rng.Cells(idx).Value
   Next
  sp_trans = ans()
  Erase ans()
End Function

でtestを実行してみて試してください。

【29714】Re:列と行を入れ替えてコピーする
回答  座布団  - 05/10/12(水) 14:10 -

引用なし
パスワード
   ▼あさこ さん:
>例えばりんご.xlsのリンゴというシートのデータを
>総合.xlsのリンゴというシートに貼り付けたい場合なんですけど・・

前回、提示させていただいたコードを改良し、
操作範囲をシートからブック(〜.xls)まで広げれば解決します。
ちなみに、以下のコードは、りんご.xlsと総合.xlsが開かれていて、
各ブックに"リンゴ"というシートが存在する前提でしか動作しません。

Private Sub Seiretu2()
  Dim s1 As Object 'ブック1内のシート
  Dim s2 As Object 'ブック2内のシート
  Dim s1row As Long 's1の操作先の行番号
  Dim s2row As Long 's2の操作先の行番号
  
  '以下のSetで「S1」は「Workbooks("りんご.xls").Sheets("リンゴ")」と
  '同じ意味を持つようになります。
  '「S2」についても同じ考えです。
  Set s1 = Workbooks("りんご.xls").Sheets("リンゴ")
  Set s2 = Workbooks("総合.xls").Sheets("リンゴ")
  s1row = 1
  s2row = 1
 
  While (s1.Cells(s1row, 1).Value <> "")
    s2.Cells(s2row, 1).Value = s1.Cells(s1row, 1).Value
    s2.Cells(s2row, 2).Value = s1.Cells(s1row + 1, 1).Value
  
    s1row = s1row + 2
    s2row = s2row + 1
  Wend
End Sub

[P.S]
もちろん、ichinoseさんのコードのようにサブルーチン化して、
再構成の範囲や列数が指定できる汎用的な関数を自作するのも一つの手です。

【29716】Re:列と行を入れ替えてコピーする
お礼  あさこ  - 05/10/12(水) 14:41 -

引用なし
パスワード
   座布団さん!ichinoseさん!
本当にありがとうございました。
無事できました!!
これで来月以降の作業がめちゃくちゃ楽になります!

会社で友達と頭をひねりながら、ぶつぶついいながら
作業をしていたので、友達ともども、
喜んでいます。

まったくの初心者の私にご親切にいつもありがとうございます。
ちょっと調子に乗って、これから、マクロの勉強をして
(本を買ってちょこちょこ何かプログラム作れたらいいな)
がんばります!

本当にありがとうございました。

【29717】Re:列と行を入れ替えてコピーする
お礼  あさこ  - 05/10/12(水) 15:08 -

引用なし
パスワード
   こんにちわ。座布団さん。
同じ結果でもいろんな方法があるんですね。

どっちがいいのか、まだ私にはわかりませんが、
とりあえず、今両方試してみました。
どちらでも結果は(当然ですが^^:)同じでした。

ちょっと感動しています。

なにか本当の初心者向けの本とかあったら、
お勧めしていただけたらうれしいです。

これからもよろしくお願いいたします。

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