A列 B列 C列 D列
1 A B 1 2
2 C D 3 4
3 E F 5 6
これを
A列 B列 C列 D列
1 A 1 2
2 B
3 C 3 4
4 D
5 E 5 6
6 F
とやることは可能でしょぅか?
Sub t()
Dim r1, r2 As Range
Set r2 = Worksheets(2).Range("a1")
With Worksheets("sheet1")
For Each r1 In .Range("a3", .Cells(Rows.Count, 1).End(xlUp))
r2.Resize(4).Value = Application.Transpose(r1.Resize(, 4).Value)
Set r2 = r2.Offset(2)
r2.Offset(-2, 1).Value = r2.Resize(r1, 4).Value
Next
End With
End Sub
このコードはいつもこのサイトから教えていただいている方から
頂戴致しました。すこし付け加えてもなかなかいかないです。
わかる方いましたらお願い致します。
付け加えた部分
r2.Offset(-2, 1).Value = r2.Resize(r1, 4).Value
No.3ベストアンサー
- 回答日時:
No.1です。
一番左の数字は行数だったようですね。
必ず2個ずつずらしていくのなら、
Sub try()
Dim r1 As Range
Dim r2 As Range
Set r1 = Worksheets("Sheet1").Range("A1")
Set r2 = Worksheets("Sheet2").Range("A1")
Do Until r1.Value = ""
r2.Resize(2).Value = Application.Transpose(r1.Resize(, 2).Value)
r2.Offset(, 1).Resize(, 2).Value = r1.Offset(, 2).Resize(, 2).Value
Set r1 = r1.Offset(1)
Set r2 = r2.Offset(2)
Loop
Set r1 = Nothing
Set r2 = Nothing
End Sub
一例です。
Set r1 = r1.Offset(1)
Set r2 = r2.Offset(2)
この部分がわかりませんでした
あとは思い通りです。有難うございました。
No.4
- 回答日時:
No.3です。
シート1の開始位置がA3なら
>Set r1 = Worksheets("Sheet1").Range("A1")
を
Set r1 = Worksheets("Sheet1").Range("A3")
ですかね。
No.2
- 回答日時:
ご提示のデータがA1セルから始まっているのに
> For Each r1 In .Range("a3",
ここがA3から始まっているのは意味不明です。
あと、Application.Transposeはサンプルのような小規模なデータでは使用しないと思います。
やりたいことは、B列のデータだけは、次の行のA列にコピーしたいってことですよね?
Sub t2()
Dim row1 As Long
Dim row2 As Long
Dim col As Long
Dim sh1 As Worksheet, sh2 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
row1 = 1 'シート1の作業対象行
row2 = 1 'シート2の作業対象行
col = 1 '作業対象列
' シート1のA列のデータがある間、対象行を下げて繰り返す
Do While sh1.Cells(row1, col).Value <> ""
'sh1の列によってコピー先をかえる
Select Case col
Case 1: 'A列
sh2.Cells(row2, col).Value = sh1.Cells(row1, col).Value
Case 2: 'B列
sh2.Cells(row2 + 1, 1).Value = sh1.Cells(row1, col).Value
Case Else: 'C列以降
sh2.Cells(row2, col - 1).Value = sh1.Cells(row1, col).Value
End Select
' 次の列
col = col + 1
' その行のデータが無くなったら次の行の処理にうつる
If sh1.Cells(row1, col).Value = "" Then
row1 = row1 + 1
row2 = row2 + 2
col = 1
End If
Loop
End Sub
No.1
- 回答日時:
実行前が4列である事は何となく分かるのですが実行後も4列になると言う事は、どの列にどの値が入るのか?が少しわかりにくいかな。
あとA列は単純に1から始まるカウント数なのかどうかとか。
シート内容を文字で表すのならセルの区切りを例えばアンダーライン(_)にしてみるとか、シートの画像を添付した方が良かったかもと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) Sheet1をフィルターで「りんご」を抽出し、Sheet2へ地域を貼り付ける下記マクロを変更して S 2 2022/12/11 03:01
- Excel(エクセル) 並べ替え、ソートの構文がわからない。 お世話になります。VBA超初心者です。 エクセルでワークシート 2 2023/06/28 21:00
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) マクロで列を加えたら上手くいかなくなりました。 2 2022/05/23 17:59
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
VBAを使って検索したセルをコピ...
-
vba 2つの条件が一致したら...
-
【VBA】2つのシートの値を比較...
-
エクセルVBA シートモジュール...
-
VBAのFind関数で結合セルを検索...
-
B列の最終行までA列をオート...
-
VBAで、特定の文字より後を削除...
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
VBA 値と一致した行の一部の列...
-
vbaでシートより100より大きい...
-
VBAで10行おきにセルの下に罫線...
-
VBA UserFormからの転記で
-
Changeイベントでの複数セルの...
-
セルに値が入っていた時の処理
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
C# dataGridViewの値だけクリア
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
VBAのコードを教えてください
-
VBAを使って検索したセルをコピ...
-
B列の最終行までA列をオート...
-
エクセルvbaについて
-
vba 2つの条件が一致したら...
-
Excelで、あるセルの値に応じて...
-
VBA UserFormからの転記で
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
VBマクロ 色の付いたセルを...
-
VBAで指定範囲内の空白セルを左...
おすすめ情報
For Each r1 In .Range("a3", .Cells(Rows.Count, 1).End(xlUp))
r2.Resize(4).Value = Application.Transpose(r1.Resize(, 4).Value)
Set r2 = r2.Offset(2)
r2.Offset(-2, 1).Value = r2.offset(r1, 3).Value ①
r2.Offset(-2, 1).Value = r2.offset(r1, 4).Value ②
①②にを一つにまとめることは可能でしょうか