こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセルVBAでセル位置の置き換え

売上帳をエクセルVBAを使って作っています。

シート自体は、
   B    C     D    E
1 日付 顧客NO. 顧客名 品名


のようになっており、
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』の部分でエラーがでます。
正しくはどのように書けばよいのでしょうか?

投稿日時 - 2009-03-30 12:18:45

QNo.4838525

困ってます

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

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

5行下の
Range("セル日2:セル日3").PasteSpecial Paste:=・・・・・・
でも同じことです。

投稿日時 - 2009-03-30 12:53:01

お礼

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

投稿日時 - 2009-04-02 11:52:06

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.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

投稿日時 - 2009-03-31 00:34:33

お礼

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

投稿日時 - 2009-04-02 11:53:02

ANo.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

やっていることは同じです
よ~く見比べてみてください

投稿日時 - 2009-03-30 22:42:05

お礼

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

投稿日時 - 2009-04-02 11:54:40

ANo.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行でもいけるかも?

投稿日時 - 2009-03-30 12:46:46

お礼

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

投稿日時 - 2009-04-02 11:55:47

あなたにオススメの質問