【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?

エクセルのバージョンは2003です。
Worksheets("様式2")のセルをコピーしてWorkbooks("件数.xls").Worksheets("件数")のセルに数値のみを張り付ける作業を
Select Caseを使って組んでいるのですが数が多くて打ち切れません。
WS2からコピーするセルは変わらずWB1へ貼り付けする場所は列がずれて行きます。
myNoは1~30までで、1の場合はC列に数値を貼り付けし、2の場合はD列に数値を貼り付けし、3の場合はE列に数値を貼り付けし・・・
といった具合に列をずらして貼り付けを行いたいのです。
よろしくお願いします。

Dim myNo As Integer
Set WS2 = Worksheets("様式2")
Set WB1 = Workbooks("件数.xls").Worksheets("件数")
myNo = Workbooks("件数.xls").Worksheets("一覧").Range("V7").Value
Select Case myNo
Case Is = 1
'Worksheets("様式2")からWorkbooks("件数.xls").Worksheets("件数")へ数値のみコピー
WS2.Range("T7").Copy
WB1.Range("C4").PasteSpecial Paste:=xlPasteValues
WS2.Range("T8").Copy
WB1.Range("C7").PasteSpecial Paste:=xlPasteValues
WS2.Range("T10").Copy
WB1.Range("C13").PasteSpecial Paste:=xlPasteValues
WS2.Range("T11").Copy
WB1.Range("C16").PasteSpecial Paste:=xlPasteValues
WS2.Range("T13").Copy
WB1.Range("C22").PasteSpecial Paste:=xlPasteValues
WS2.Range("T14").Copy
WB1.Range("C25").PasteSpecial Paste:=xlPasteValues
WS2.Range("T16").Copy
WB1.Range("C31").PasteSpecial Paste:=xlPasteValues
WS2.Range("T17").Copy
WB1.Range("C34").PasteSpecial Paste:=xlPasteValues
WS2.Range("T18").Copy
WB1.Range("C37").PasteSpecial Paste:=xlPasteValues

WS2.Range("T69").Copy
WB1.Range("C5").PasteSpecial Paste:=xlPasteValues
WS2.Range("T70").Copy
WB1.Range("C8").PasteSpecial Paste:=xlPasteValues
WS2.Range("T72").Copy
WB1.Range("C14").PasteSpecial Paste:=xlPasteValues
WS2.Range("T73").Copy
WB1.Range("C17").PasteSpecial Paste:=xlPasteValues
WS2.Range("T75").Copy
WB1.Range("C23").PasteSpecial Paste:=xlPasteValues
WS2.Range("T76").Copy
WB1.Range("C26").PasteSpecial Paste:=xlPasteValues
WS2.Range("T78").Copy
WB1.Range("C32").PasteSpecial Paste:=xlPasteValues
WS2.Range("T79").Copy
WB1.Range("C35").PasteSpecial Paste:=xlPasteValues
WS2.Range("T80").Copy
WB1.Range("C38").PasteSpecial Paste:=xlPasteValues

A 回答 (3件)

こんにちは。



ざっと見てみました。
Select Case は、If よりもNest は利きますが、あまり応用力がありません。
こんな風にしてみたらよいと思います。ただし、設定の部分の中で、セルの書き方が、A1:A2 のような場合は、それを一つとして扱わなくてはなりません。以下は、実際には試しておりませんので、注意して行ってください。


Sub CopyTest1()
  Dim myNo As Integer
  Dim Ws2 As Worksheet
  Dim Ws1 As Worksheet
  Dim i As Long
  Dim rng1 As Range
  Dim rng2 As Range
  
  Set Ws2 = Worksheets("様式2")
  Set Ws1 = Workbooks("件数.xls").Worksheets("件数") 'WBではなくて、Ws です。
  
  '設定
  Set rng2 = Ws2.Range("T7,T8,T10,T11,T13,T14,T16,T17,T18,T69,T70,T72,T73,T76,T78,T79,T80")
  Set rng1 = Ws1.Range("C4,C7,C13,C16,C22,C25,C31,C34,C37, C5, C8,C14,C17,C26,C32,C35,C38")
  
  myNo = Workbooks("件数.xls").Worksheets("一覧").Range("V7").Value
  If 31 > myNo And myNo > 0 Then
    For i = 1 To rng2.Areas.Count
      rng2.Areas(i).Copy rng1.Areas(i).Offset(, myNo - 1)
    Next i
  End If
End Sub
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/13 01:08

私だったら


標準モジュールに
Sub test01()
Dim ws1 As Worksheet
Dim ws2 As Worksheet
Set ws2 = Worksheets("Sheet2")
Set ws1 = Worksheets("Sheet1")
'--
a = Array("G7", "G8", "G10")
b = Array("C4", "C7", "C13")
'---
For K = 0 To UBound(a)
ws2.Range(a(K)).Copy
ws1.Range(b(K)).PasteSpecial Paste:=xlPasteValues
Next K
End Sub
とします。
ーーー
T列をG列に、
多数を3個載セルの例に
シート名を同一ブックのSheet1とSheet2の例に 
して、上記コードは簡単例でテスト済み。
本質を際立たせるためDim、CutCopyMode、Updatind=Falseなど一切省いています。
ーーー
質問の書き方例の挙げ方で私のを見習ってください。
多数有る場合は3例ぐらい挙げれば、それ以上増やすのは類推で判るはず。
シート名も自分の例そのままでなく,標準のままを使う。
列もできるだけA列の近くの列にする(回答者がテストデータを作りやすい)。
ーー
質問するには、
自分のケース(個別・複雑)ー質問の趣旨に影響ないと思われる要素は省くー>質問文作成ー>回答に接すー>自分のケースに当てはめる
の訓練が大切です。
    • good
    • 0

Rangeプロパティは、繰り返しや条件を指定した処理に弱いです。


Cellsプロパティだと、セルの位置を数値で指定できるので便利です。
Range("A1")→Cells(1,1)
Range("A2")→Cells(2,1)
というように、(行番号,列番号)という指定になります。

例えば、
「WB1.Range("C7").PasteSpecial Paste:=xlPasteValu」
こちらは
「WB1.Cells(7,3).PasteSpecial Paste:=xlPasteValu」
となります。

> myNoは1~30までで、1の場合はC列に数値を貼り付けし、2の場合はD列に数値を貼り付けし、3の場合はE列に数値を貼り付けし・・・
これなら、
「Cells(7, 3)」の部分を「Cells(7, myNo + 2)」としていけば、
Select Caseを使わなくてもできますよ

今、手元にExcelがないので、セルの指定方法のコードが違っていたらごめんなさい。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/03/13 01:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!