Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1367 / 13645 ツリー ←次へ | 前へ→

【74872】For/NextとRangeの組み合わせ Mst 13/10/15(火) 9:57 質問[未読]
【74873】Re:For/NextとRangeの組み合わせ ウッシ 13/10/15(火) 10:15 回答[未読]
【74874】Re:For/NextとRangeの組み合わせ Mst 13/10/16(水) 0:01 質問[未読]
【74875】Re:For/NextとRangeの組み合わせ ウッシ 13/10/16(水) 0:15 回答[未読]
【74876】Re:For/NextとRangeの組み合わせ Mst 13/10/16(水) 3:06 お礼[未読]
【74877】Re:For/NextとRangeの組み合わせ ウッシ 13/10/16(水) 7:59 回答[未読]

【74872】For/NextとRangeの組み合わせ
質問  Mst  - 13/10/15(火) 9:57 -

引用なし
パスワード
   指定したセルの値を取得して張り付ける作業を考えてます。
D4, D5でコピーしたいセルを指定。


Sub Macro1()
Dim cell1 As String, cell2 As String

cell1 = Range("D4") 'D4セルにはI5と入っている。I5セルにはコピーしたい数値あり
cell2 = Range("D5") 'D5セルにはI7と入っている。I7セルにはコピーしたい数値あり


For i = 1 To 2
Range(cell & i).Copy
Range("A1048576").End(xlUp).Offset(0, 0).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
Next

End Sub

この場合、
Range(cell & i).Copy
でエラーになって止まってしまいます。
実際はコピーしたいセルが多いため、
うまくRange(cell1), Range(cell2)、、、、と順に指定したいです。

どうすればうまくセルを指定できるでしょうか?
よろしくお願いします。

【74873】Re:For/NextとRangeの組み合わせ
回答  ウッシ  - 13/10/15(火) 10:15 -

引用なし
パスワード
   こんにちは

元の位置情報が
D4、D5、D6〜と連続したセル位置なら Offset とか使えばcell1〜という変数はいらないと思います。
連続していないなら

Sub Macro1()
  Dim cell(1 To 2) As String
  Dim i As Long
  
  cell(1) = Range("D4").Value 'D4セルにはI5と入っている。I5セルにはコピーしたい数値あり
  cell(2) = Range("D5").Value 'D5セルにはI7と入っている。I7セルにはコピーしたい数値あり
   
  For i = 1 To 2
    Range(cell(i)).Copy Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
  Next

End Sub

Offset(0, 0)だと、ずっと上書きされちゃうのでOffset(1, 0)にしてあります。


▼Mst さん:
>指定したセルの値を取得して張り付ける作業を考えてます。
>D4, D5でコピーしたいセルを指定。
>
>
>Sub Macro1()
>Dim cell1 As String, cell2 As String
>
>cell1 = Range("D4") 'D4セルにはI5と入っている。I5セルにはコピーしたい数値あり
>cell2 = Range("D5") 'D5セルにはI7と入っている。I7セルにはコピーしたい数値あり
>
>
>For i = 1 To 2
>Range(cell & i).Copy
>Range("A1048576").End(xlUp).Offset(0, 0).Select
>Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>    :=False, Transpose:=False
>Next
>
>End Sub
>
>この場合、
>Range(cell & i).Copy
>でエラーになって止まってしまいます。
>実際はコピーしたいセルが多いため、
>うまくRange(cell1), Range(cell2)、、、、と順に指定したいです。
>
>どうすればうまくセルを指定できるでしょうか?
>よろしくお願いします。

【74874】Re:For/NextとRangeの組み合わせ
質問  Mst  - 13/10/16(水) 0:01 -

引用なし
パスワード
    ほぇぇ、すごいです。。。
まさに希望していた回答でした。
本当にありがとうございます。

まだまだスマートなマクロはかけないですが、これからもがんばります。

>D4、D5、D6〜と連続したセル位置なら Offset とか使えばcell1〜という変数はいらないと思います。

勉強として、このときどう表現するとキレイか、
お時間あればまた教えていただけると助かります。

よろしくお願いします。
ありがとうございました。


▼ウッシ さん:
>こんにちは
>
>元の位置情報が
>D4、D5、D6〜と連続したセル位置なら Offset とか使えばcell1〜という変数はいらないと思います。
>連続していないなら
>
>Sub Macro1()
>  Dim cell(1 To 2) As String
>  Dim i As Long
>  
>  cell(1) = Range("D4").Value 'D4セルにはI5と入っている。I5セルにはコピーしたい数値あり
>  cell(2) = Range("D5").Value 'D5セルにはI7と入っている。I7セルにはコピーしたい数値あり
>   
>  For i = 1 To 2
>    Range(cell(i)).Copy Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
>  Next
>
>End Sub
>
>Offset(0, 0)だと、ずっと上書きされちゃうのでOffset(1, 0)にしてあります。
>
>
>▼Mst さん:
>>指定したセルの値を取得して張り付ける作業を考えてます。
>>D4, D5でコピーしたいセルを指定。
>>
>>
>>Sub Macro1()
>>Dim cell1 As String, cell2 As String
>>
>>cell1 = Range("D4") 'D4セルにはI5と入っている。I5セルにはコピーしたい数値あり
>>cell2 = Range("D5") 'D5セルにはI7と入っている。I7セルにはコピーしたい数値あり
>>
>>
>>For i = 1 To 2
>>Range(cell & i).Copy
>>Range("A1048576").End(xlUp).Offset(0, 0).Select
>>Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
>>    :=False, Transpose:=False
>>Next
>>
>>End Sub
>>
>>この場合、
>>Range(cell & i).Copy
>>でエラーになって止まってしまいます。
>>実際はコピーしたいセルが多いため、
>>うまくRange(cell1), Range(cell2)、、、、と順に指定したいです。
>>
>>どうすればうまくセルを指定できるでしょうか?
>>よろしくお願いします。

【74875】Re:For/NextとRangeの組み合わせ
回答  ウッシ  - 13/10/16(水) 0:15 -

引用なし
パスワード
   こんばんは

連続してるなら、単純に

Sub test()
  Dim i As Long
  
  For i = 1 To 2
    Range(Cells(i + 3, 4)).Copy Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
  Next
End Sub

とかでも出来ますよ、

【74876】Re:For/NextとRangeの組み合わせ
お礼  Mst  - 13/10/16(水) 3:06 -

引用なし
パスワード
   ありがとうございます!
こういう風にシンプルなマクロが書けるよう、
これから勉強したいと思います。

本当にありがとうございました。


▼ウッシ さん:
>こんばんは
>
>連続してるなら、単純に
>
>Sub test()
>  Dim i As Long
>  
>  For i = 1 To 2
>    Range(Cells(i + 3, 4)).Copy Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
>  Next
>End Sub
>
>とかでも出来ますよ、

【74877】Re:For/NextとRangeの組み合わせ
回答  ウッシ  - 13/10/16(水) 7:59 -

引用なし
パスワード
   こんにちは

最終セル位置をいちいち調べるのは無駄って指摘されそうなので修正しておきます。

Sub test1()
  Dim i As Long
  Dim j As Long
  j = Range("A" & Rows.Count).End(xlUp).Row
  For i = 1 To 2
    j = j + 1
    Range(Cells(i + 3, 4)).Copy Cells(j, 1)
  Next
End Sub

1367 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free