Excel VBA質問箱 IV

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

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


3045 / 13644 ツリー ←次へ | 前へ→

【64594】64593の質問者です rin 10/2/24(水) 18:16 質問[未読]
【64596】Re:64593の質問者です neptune 10/2/24(水) 23:21 発言[未読]
【64598】Re:64593の質問者です UO3 10/2/25(木) 0:01 発言[未読]
【64599】Re:64593の質問者です UO3 10/2/25(木) 0:13 回答[未読]
【64603】Re:64593の質問者です rin 10/2/25(木) 11:46 質問[未読]
【64605】Re:64593の質問者です 超初心者 10/2/25(木) 11:59 発言[未読]
【64610】Re:64593の質問者です rin 10/2/25(木) 14:25 お礼[未読]
【64613】Re:64593の質問者です rin 10/2/25(木) 16:44 質問[未読]
【64614】Re:64593の質問者です 超初心者 10/2/25(木) 16:49 発言[未読]
【64615】Re:64593の質問者です rin 10/2/25(木) 17:08 お礼[未読]
【64616】Re:64593の質問者です 超初心者 10/2/25(木) 17:19 発言[未読]
【64617】Re:64593の質問者です rin 10/2/25(木) 17:30 お礼[未読]
【64618】Re:64593の質問者です 超初心者 10/2/25(木) 17:55 発言[未読]
【64619】Re:64593の質問者です rin 10/2/25(木) 18:26 お礼[未読]
【64606】Re:64593の質問者です UO3 10/2/25(木) 12:37 回答[未読]
【64608】Re:64593の質問者です Yuki 10/2/25(木) 13:51 発言[未読]

【64594】64593の質問者です
質問  rin  - 10/2/24(水) 18:16 -

引用なし
パスワード
   質問を礼としてしまいました。
以下同じ質問内容です。

ある範囲指定をしたリストがあります。
1行目のデータを行列を入れ替えて(横から縦並びへ)コピーをし、(どこかリストの外側の列へ)
次に2行目のデータを1行目の並び替えをしたデータの下に同じく行列を入れ替えてコピーをする。
更に3行目のデータを行列を入れ替えて、並び替えをした列の再下段へ貼り付ける・・・。
これをリストの再下段まで繰り返し、1列のデータに仕上げる作業をしたいと思います。
マクロを走らせて処理をする方法はどうしたらできるでしょうか?
このような作業がはじめてです。
どなたか助けてください。

【64596】Re:64593の質問者です
発言  neptune  - 10/2/24(水) 23:21 -

引用なし
パスワード
   ▼rin さん:
よく読んでませんが、手作業で希望の作業はできますか?
出来るのなら、マクロの記録を利用しましょう。

【64598】Re:64593の質問者です
発言  UO3  - 10/2/25(木) 0:01 -

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

もう少し具体的に書かれた方がいいと思います。

>ある範囲指定をしたリストがあります。

いまいち、意味がわからないんですが。
これはListObjectのことですか?
じゃないとしたら具体的には、どういった範囲ですか?

>(どこかリストの外側の列へ)

どこでもいいんですか?

【64599】Re:64593の質問者です
回答  UO3  - 10/2/25(木) 0:13 -

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

仮にListObjectだとします。
(違っていたら無視してください)

Option Explicit

Sub Test()
Dim myList As ListObject
Dim c As Long
Dim r As Long
Dim i As Long
Dim x As Long

  Set myList = ActiveSheet.ListObjects(1)
  c = myList.ListColumns.Count
  r = myList.ListRows.Count
  x = 1
  For i = 1 To r
    Cells(x, c + 2).Resize(c) = WorksheetFunction.Transpose(myList.ListRows.Item(i).Range)
    x = x + c
  Next
  Set myList = Nothing
  
End Sub

【64603】Re:64593の質問者です
質問  rin  - 10/2/25(木) 11:46 -

引用なし
パスワード
   ▼UO3 さん:
>▼rin さん:
>
>仮にListObjectだとします。
>(違っていたら無視してください)
>
>Option Explicit
>
>Sub Test()
>Dim myList As ListObject
>Dim c As Long
>Dim r As Long
>Dim i As Long
>Dim x As Long
>
>  Set myList = ActiveSheet.ListObjects(1)
>  c = myList.ListColumns.Count
>  r = myList.ListRows.Count
>  x = 1
>  For i = 1 To r
>    Cells(x, c + 2).Resize(c) = WorksheetFunction.Transpose(myList.ListRows.Item(i).Range)
>    x = x + c
>  Next
>  Set myList = Nothing
>  
>End Sub

ご回答をいただきありがとうございました。
Sheetの中でE11:J20まで数字が埋められています。
Dim myList As ListObject
にこのセル範囲を当てはめた方がよいですか?

【64605】Re:64593の質問者です
発言  超初心者  - 10/2/25(木) 11:59 -

引用なし
パスワード
   ▼rin さん:
>Sheetの中でE11:J20まで数字が埋められています。

貼り付け先をSheet2のA1から、にしてます。
(適宜変更して下さい。)

Sub sample()
  Dim myRange As Range
  Dim myRow As Long
  
  Set myRange = Range("E11:J20")
  
  For myRow = 1 To myRange.Cells.Count
    Sheets("Sheet2").Cells(myRow, 1) = myRange(myRow)
  Next myRow
End Sub

参考までに。

【64606】Re:64593の質問者です
回答  UO3  - 10/2/25(木) 12:37 -

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

こんにちは。

>Sheetの中でE11:J20まで数字が埋められています。
>Dim myList As ListObject
>にこのセル範囲を当てはめた方がよいですか?

いえいえ。rinさんが【範囲を指定したリスト】と表現されていたので
それをListObjectとして規定しておられるのだと思ったんです。
シート上には複数のListObjectを配置できますので、とりあえず
ListObjects(1)としたんですが、おっしゃるリストはListObjectじゃない
みたいですね。

忘れてください。

【64608】Re:64593の質問者です
発言  Yuki  - 10/2/25(木) 13:51 -

引用なし
パスワード
   ▼rin さん:
>ある範囲指定をしたリストがあります。
>1行目のデータを行列を入れ替えて(横から縦並びへ)コピーをし、(どこかリストの外側の列へ)
>次に2行目のデータを1行目の並び替えをしたデータの下に同じく行列を入れ替えてコピーをする。
>更に3行目のデータを行列を入れ替えて、並び替えをした列の再下段へ貼り付ける・・・。
>これをリストの再下段まで繰り返し、1列のデータに仕上げる作業をしたいと思います。
>マクロを走らせて処理をする方法はどうしたらできるでしょうか?

こんな方法でSheet2のA列へ
Sub TESTa()
  Dim i  As Long
  Dim j  As Long
  
  j = 1
  For i = 11 To 20
    Worksheets("Sheet1").Cells(i, 5).Resize(, 6).Copy
    Worksheets("Sheet2").Cells(j, 1).PasteSpecial Paste:=xlPasteAll, _
                           Operation:=xlNone, _
                           SkipBlanks:=False, _
                           Transpose:=True
    j = j + 6
  Next
End Sub

【64610】Re:64593の質問者です
お礼  rin  - 10/2/25(木) 14:25 -

引用なし
パスワード
   ▼超初心者 さん:
>▼rin さん:
>>Sheetの中でE11:J20まで数字が埋められています。
>
>貼り付け先をSheet2のA1から、にしてます。
>(適宜変更して下さい。)
>
>Sub sample()
>  Dim myRange As Range
>  Dim myRow As Long
>  
>  Set myRange = Range("E11:J20")
>  
>  For myRow = 1 To myRange.Cells.Count
>    Sheets("Sheet2").Cells(myRow, 1) = myRange(myRow)
>  Next myRow
>End Sub
>
>参考までに。


みごとに結果が出て驚きました。
最終的には、Sheetが5枚あったら、それぞれのSheetに全てマクロを走らせて、
1枚目のシートの結果がSheet2のA1へ
2枚目のシートの結果がSheet2のB1へ
みたいに行き先を指定できたらと思っています。

【64613】Re:64593の質問者です
質問  rin  - 10/2/25(木) 16:44 -

引用なし
パスワード
   ▼rin さん:
>▼超初心者 さん:
>>▼rin さん:
>>>Sheetの中でE11:J20まで数字が埋められています。
>>
>>貼り付け先をSheet2のA1から、にしてます。
>>(適宜変更して下さい。)
>>
>>Sub sample()
>>  Dim myRange As Range
>>  Dim myRow As Long
>>  
>>  Set myRange = Range("E11:J20")
>>  
>>  For myRow = 1 To myRange.Cells.Count
>>    Sheets("Sheet2").Cells(myRow, 1) = myRange(myRow)
>>  Next myRow
>>End Sub
>>
>>参考までに。
>
>
>みごとに結果が出て驚きました。
>最終的には、Sheetが5枚あったら、それぞれのSheetに全てマクロを走らせて、
>1枚目のシートの結果がSheet2のA1へ
>2枚目のシートの結果がSheet2のB1へ
>みたいに行き先を指定できたらと思っています。

引き続き申し訳ありません。
Set myRange = Range("E11:J20")
の部分をE11セルから連続する範囲にしたいのですが、
Set myRange = Range("E11").CurrentRegion.Select
にしてみたらエラーになってしまったので、どう書いたらよいでしょうか・・・。

【64614】Re:64593の質問者です
発言  超初心者  - 10/2/25(木) 16:49 -

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

>Set myRange = Range("E11").CurrentRegion.Select
>にしてみたらエラーになってしまったので、どう書いたらよいでしょうか・・・。

Set myRange = Range("E11").CurrentRegion

ではどうでしょう

【64615】Re:64593の質問者です
お礼  rin  - 10/2/25(木) 17:08 -

引用なし
パスワード
   ▼超初心者 さん:
>▼rin さん:
>
>>Set myRange = Range("E11").CurrentRegion.Select
>>にしてみたらエラーになってしまったので、どう書いたらよいでしょうか・・・。
>
>Set myRange = Range("E11").CurrentRegion
>
>ではどうでしょう

エラーにならずにいきました。
感謝です。
コピー先の列をパラメータなどでB列へコピーなどと指定するのは
複雑すぎますでしょうか?

【64616】Re:64593の質問者です
発言  超初心者  - 10/2/25(木) 17:19 -

引用なし
パスワード
   ▼rin さん:
>コピー先の列をパラメータなどでB列へコピーなどと指定するのは
>複雑すぎますでしょうか?


>> Sheets("Sheet2").Cells(myRow, 1) = myRange(myRow)

Cells(myRow, 1)にて、A列myRow行目、を指定してます。

A列(=1列目)ですので、「1」を変数化して
変化させればB列以降や好きな位置への
出力ができるかと思います。


例えば、最初に
myCol = 1

2回目(以降)には
myCol = myCol + 1

出力先を
Cells(myRow, myCol)
とするとか。

いろいろ試しながらやってみるのも
勉強になるかと思います。

【64617】Re:64593の質問者です
お礼  rin  - 10/2/25(木) 17:30 -

引用なし
パスワード
   ▼超初心者 さん:
>▼rin さん:
>>コピー先の列をパラメータなどでB列へコピーなどと指定するのは
>>複雑すぎますでしょうか?
>
>
>>> Sheets("Sheet2").Cells(myRow, 1) = myRange(myRow)
>の
>Cells(myRow, 1)にて、A列myRow行目、を指定してます。
>
>A列(=1列目)ですので、「1」を変数化して
>変化させればB列以降や好きな位置への
>出力ができるかと思います。
>
>
>例えば、最初に
>myCol = 1
>
>2回目(以降)には
>myCol = myCol + 1
>
>出力先を
>Cells(myRow, myCol)
>とするとか。
>
>いろいろ試しながらやってみるのも
>勉強になるかと思います。

ご親切にありがとうございました。
試しながら勉強してみます。
理想はA列に貼り付けようとした時に、空白でなかったら
右隣の空白を探し、空白へ貼り付ける → 次に実行した時に
A列もB列も空白でなたっから、右隣の空白を探しに行き空白へ貼り付ける
ができたら完璧です。。。

【64618】Re:64593の質問者です
発言  超初心者  - 10/2/25(木) 17:55 -

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

> 理想はA列に貼り付けようとした時に、空白でなかったら
> 右隣の空白を探し、空白へ貼り付ける 

明日は居ないので、ヒント?だけ
myCol = 1
Do Until Cells(1, myCol) = ""
  myCol = myCol + 1
Loop
(シートをキチンと指定しましょう)


がんばってください^^

【64619】Re:64593の質問者です
お礼  rin  - 10/2/25(木) 18:26 -

引用なし
パスワード
   ▼超初心者 さん:
>▼rin さん:
>
>> 理想はA列に貼り付けようとした時に、空白でなかったら
>> 右隣の空白を探し、空白へ貼り付ける 
>
>明日は居ないので、ヒント?だけ
>myCol = 1
>Do Until Cells(1, myCol) = ""
>  myCol = myCol + 1
>Loop
>(シートをキチンと指定しましょう)
>
>
>がんばってください^^

大変助かります。
レベルアップに向けて頑張ります。
お世話になりましてありがとうございました。

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