Excelで、以下(例)のようにSheet1のB列(数量A)の値を、Sheet2のB列(数量)に1行おきに、同じくC列(数量B)の値を、Sheet2のB列に1行おきに貼り付けをVBAでおこないたいです。
コードを教えてください。
例)
【Sheet1】
A列 B列 C列
1 品目 数量A 数量B
2 りんご 1 1.2
3 みかん 4 10.63
4 ぶどう 10 80
・ ・ ・
・ ・ ・
<B列とC列の値それぞれをコピー>
↓
<B列に値を1行おきに貼り付け>
【Sheet2】
A列 B列
1 品目 数量
2 りんご 1 ←(数量A)
3 りんご 1.2 ←(数量B)
4 みかん 4 ←(数量A)
5 みかん 10.63 ← (数量B)
6 ぶどう 10 ←(数量A)
7 ぶどう 80 ← (数量B)
実際に使用する表に関して
・"品目"のデータは500近くあり、表の行数も増減します。
・"品目"のデータはSheet1と2で行数が1行使用と2行使用の違いで並びは一緒です。
1行おきで貼り付けで考えてはいますが(それしか考えつかなかったのですが…)方法は貼り付けにこだわっていません。結果的に同じであれば、別のもっと効率のいい方法があればそちらでも構いません。
よろしくお願いします。
No.1
- 回答日時:
こんばんは!
一例です。標準モジュールにしてください。
Sub Sample1()
Dim i As Long, lastRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet1")
With Worksheets("Sheet2")
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
If lastRow > 1 Then
Range(.Cells(2, "A"), .Cells(lastRow, "B")).ClearContents
End If
For i = 2 To wS.Cells(Rows.Count, "A").End(xlUp).Row
.Cells(Rows.Count, "A").End(xlUp).Offset(1).Resize(2) = wS.Cells(i, "A")
With .Cells(Rows.Count, "B").End(xlUp)
.Offset(1) = wS.Cells(i, "B")
.Offset(2) = wS.Cells(i, "C")
End With
Next i
End With
End Sub
※ Sheet2のA列も一緒に表示するようにしています。m(_ _)m
早速の回答ありがとうございます。
ためしてみました。さすがです!
質問には全然書かなかったので非常に申し訳なかったのですが、このコードでSheet2の品目を消さないバージョンで修正できるのでしょうか?試行錯誤してますが、初心者のためやはりよくわかりませんでした。是非ともまたご教授願いたいです。
No.2ベストアンサー
- 回答日時:
No.1です。
>Sheet2:B列は、F列にあり品目列とは離れていて行は12行目から開始位置になっています。
要するにSheet1のB2・C2セル以降のデータをSheet2のF12セル以降に縦にコピー&ペーストすれば良いのですね?
Sub Sample2()
Dim i As Long, myRow As Long, wS As Worksheet
Set wS = Worksheets("Sheet2")
myRow = 10
With Worksheets("Sheet1")
For i = 2 To .Cells(Rows.Count, "B").End(xlUp).Row
myRow = myRow + 2
.Cells(i, "B").Resize(, 2).Copy
wS.Cells(myRow, "F").PasteSpecial Paste:=xlPasteAll, Transpose:=True
Next i
Application.CutCopyMode = False
End With
End Sub
こんな感じではどうでしょうか?m(_ _)m
再度の回答ありがとうございます。
実際の表で動作確認してみました。
考えたとおりをVBAにすればこうなるよ!って感じになっていました。
マクロ実行に表の行数によるとおもいますが、けっこう時間がかかるのと実行したときにチラチラしました(多分これは仕方のないことなんですよね?)
でも自分でもそこは修正できました。
ありがとうございました。
No.3
- 回答日時:
F列の12行目から数式が入るってことでいいのかな
ほとんど数式で
Sub test2()
With Sheets("Sheet2").Range("F12:F" & Range("a65535").End(xlUp).Row)
.FormulaR1C1 = "=INDEX(Sheet1!C[-4]:C[-3],ROW(R[-8]C[-5])/2,MOD(ROW(R[-8]C[-5]),2)+1)"
.Value = .Value
End With
End Sub
No.4
- 回答日時:
ちょっと修正
Sub test2()
With Sheets("Sheet2").Range("F12:F" & Sheets("Sheet2").Range("a65535").End(xlUp).Row)
.FormulaR1C1 = "=INDEX(Sheet1!C[-4]:C[-3],ROW(R[-8]C[-5])/2,MOD(ROW(R[-8]C[-5]),2)+1)"
.Value = .Value
End With
End Sub
単純に Sheet2!F12:F??セル範囲に
=INDEX(Sheet1!B:C,ROW(A4)/2,MOD(ROW(A4),2)+1)
を入力して[Ctrl]+[Enter]
数式を値化
回答ありがとうございます。
なるほど!です。
これをマクロを使用する場合、表の行が増減したとき、セル範囲のコードを修正することになるってことですよね…
セルに関数を直接入れてもできるってことですよね。
でも自分のレベルでも教えていただいたこのコードを参考にしてアレンジできそうです。
勉強なります!
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Excel(エクセル) Excelにて、行の最後のセルの値をコピーして別sheetに張りつけるVBAコードをご教授願います 3 2022/11/20 14:35
- Visual Basic(VBA) VBA シート間の転記で、条件の追加コードの書き方について教えて下さい。 13 2023/02/26 09:31
- Visual Basic(VBA) チームごとにどの商品を何個希望しているか数量を算出したいです。 A列(A2~A265)に各チーム名が 3 2023/07/18 18:46
- Visual Basic(VBA) VBAで、1つのエクセルで、2つのシートからもう1つのシートに条件のある転記コードを教えてください。 1 2023/03/16 18:07
- Excel(エクセル) ExcelVBAでリストの項目に必要数と同じ手配数を分配していくマクロを作りたいです。 1 2022/07/29 18:36
- Excel(エクセル) 【Excel関数】値が合致するセルの隣のセルを表示させたい 8 2022/10/12 17:44
- Excel(エクセル) エクセルの表について 3 2023/04/14 18:00
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
PowerPointで表の1つの列だけ...
-
LOOKUP関数を使えばいいのでし...
-
エクセルで二つの数字の小さい...
-
エクセルの表から正の数、負の...
-
エクセル 文字数 多い順 並...
-
50人を数回、グループ分けする...
-
エクセルで最初のスペースまで...
-
重複行を削除して数値を合算し...
-
Excelで、A列にある文字がB列...
-
A,B,C3種類の文字で無限列を作る
-
VBAで文字列を数値に変換したい
-
エクセルで文字が混じった数字...
-
コミックマーケットについて
-
Excel元に戻す方法を教えてくだ...
-
エクセルで休日日数・連休日数...
-
VBAでセル入力の数式に変数を用...
-
エクセルで2列のセルを連続して...
-
エクセルマクロ:複数列 重複...
-
エクセルかグーグルスプレッド...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
エクセル(勝手に太字になる)
-
「B列が日曜の場合」C列に/...
-
エクセル 文字数 多い順 並...
-
EXCELで 一桁の数値を二桁に
-
エクセル 同じ値を探して隣の...
-
VBAで文字列を数値に変換したい
-
エクセルの並び変えで、空白セ...
-
Excelで半角の文字を含むセルを...
-
エクセルで文字が混じった数字...
-
Excel、市から登録している住所...
-
A列がない・・・A列が非表示に...
-
エクセルの表から正の数、負の...
-
[関数得意な方]教えて下さい・...
-
エクセルの項目軸を左寄せにしたい
-
エクセル 時間帯の重複の有無
-
Excelにてある膨大なデータを管...
おすすめ情報
ちなみに貼り付け先のSheet2には品目はすでに入力されています。
「…貼り付けにこだわっていません。結果的に同じであれば、別のもっと効率のいい方法があればそちらでも構いません。」と書いたのですが…
⇒実際の表は、Sheet2の品目は本質問とは別の表中別データに絡んでいるためSheet2品目をいじらない方法でお願いします。わがまま言ってすみません…
・ちなみに実際の表のSheet2:B列は、F列にあり品目列とは離れていて行は12行目から開始位置になっています。例で参考できるコードを教えてもらい自力で調整できればと思っています。