• ベストアンサー

エクセル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』の部分でエラーがでます。 正しくはどのように書けばよいのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

>Range("セル日:セル客").Copy '日付と顧客番号と顧客名をコピー ↑これでは、セル日:セル客 という単なる文字列になります。 下記のようにすれば通ると思います。 Range(セル日, セル客).Copy 5行下の Range("セル日2:セル日3").PasteSpecial Paste:=・・・・・・ でも同じことです。

yunako0517
質問者

お礼

ありがとうございます。 この方法が簡単でした。 出来ました。

その他の回答 (3)

回答No.4

簡単ですが、こういう方法もあります。 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

yunako0517
質問者

お礼

回答ありがとうございます。 こういう方法もあるのですね。 試してみます。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.3

一例です 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 やっていることは同じです よ~く見比べてみてください

yunako0517
質問者

お礼

ありがとうございます。 同じ事をするのにも、いろいろな書き方があって、初心者の私は頭がパニックになりそうです。 時間をかけてしっかり理解したいと思います。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

ちなみに代入で良ければ、 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行でもいけるかも?

yunako0517
質問者

お礼

回答ありがとうございます。 やってみます。