- ベストアンサー
エクセルVBAでセル位置の置き換え
売上帳をエクセルVBAを使って作っています。 シート自体は、 B C D E 1 日付 顧客NO. 顧客名 品名 2 3 のようになっており、 B列、C列、D列の最終行に入っている値を、その一行下から、E列最終行までのB~D列全部に貼りつけたいのです。 コードは下記のように書いてあります。 Dim 行番号 Dim セル日 Dim セル客 Dim 品名行 Dim 日付行 Dim セル日2 Dim セル日3 Sub 日付と顧客名を貼付() 行番号 = Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行の行番号を取得し「行番号」に代入 セル日 = "B" & 行番号 セル客 = "D" & 行番号 Range("セル日:セル客").Copy '日付と顧客番号と顧客名をコピー 品名行 = Cells(Rows.Count, "E").End(xlUp).Row 'E列最終行の行番号を取得し「品名行」に代入 日付行 = Cells(Rows.Count, "B").End(xlUp).Row + 1 'B列最終行の1行下の行番号を取得し「日付行」に代入 セル日2 = "B" & 日付行 セル日3 = "B" & 品名行 Range("セル日2:セル日3").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 'B列最終行の1行下のB列からD列に値の貼り付け End Sub これを実行すると、 『Range("セル日:セル客").Copy』の部分でエラーがでます。 正しくはどのように書けばよいのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>Range("セル日:セル客").Copy '日付と顧客番号と顧客名をコピー ↑これでは、セル日:セル客 という単なる文字列になります。 下記のようにすれば通ると思います。 Range(セル日, セル客).Copy 5行下の Range("セル日2:セル日3").PasteSpecial Paste:=・・・・・・ でも同じことです。
その他の回答 (3)
- KonnaMonde
- ベストアンサー率57% (97/170)
簡単ですが、こういう方法もあります。 Sub 日付と顧客名を貼付2() 行番号 = Cells(Rows.Count, 2).End(xlUp).Row Range(Cells(行番号, 2), Cells(行番号, 5)).Copy Destination:=Cells(行番号 + 1, 2) Cells(2, 1).AutoFill Destination:=Range(Cells(2, 1), Cells(Cells(Rows.Count, 2).End(xlUp).Row, 1)) ' 1列に連番を振る End Sub
お礼
回答ありがとうございます。 こういう方法もあるのですね。 試してみます。
- hige_082
- ベストアンサー率50% (379/747)
一例です Sub test() Dim x, y x = Cells(Rows.Count, "B").End(xlUp).Row y = Cells(Rows.Count, "E").End(xlUp).Row Range("B" & x + 1, "D" & y).Value = Range("B" & x, "D" & x).Value End Sub やっていることは同じです よ~く見比べてみてください
お礼
ありがとうございます。 同じ事をするのにも、いろいろな書き方があって、初心者の私は頭がパニックになりそうです。 時間をかけてしっかり理解したいと思います。
- n-jun
- ベストアンサー率33% (959/2873)
ちなみに代入で良ければ、 Range("E1", Cells(Rows.Count, 5).End(xlUp)).Offset(, -3).Resize(, 3).SpecialCells(xlCellTypeBlanks).Value = _ Cells(Rows.Count, 2).End(xlUp).Resize(, 3).Value この1行でもいけるかも?
お礼
回答ありがとうございます。 やってみます。
お礼
ありがとうございます。 この方法が簡単でした。 出来ました。