Excel VBA質問箱 IV

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

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


9301 / 13646 ツリー ←次へ | 前へ→

【28134】セル参照で値を抽出して貼り付けの方法 りょうた 05/8/29(月) 19:15 質問[未読]
【28137】Re:セル参照で値を抽出して貼り付けの方法 でれすけ 05/8/29(月) 19:39 回答[未読]
【28144】Re:セル参照で値を抽出して貼り付けの方法 りょうた 05/8/29(月) 21:15 質問[未読]
【28147】Re:セル参照で値を抽出して貼り付けの方法 でれすけ 05/8/29(月) 21:46 回答[未読]
【28148】Re:セル参照で値を抽出して貼り付けの方法 MokoMoko 05/8/29(月) 22:05 回答[未読]
【28164】Re:セル参照で値を抽出して貼り付けの方法 りょうた 05/8/29(月) 23:27 お礼[未読]
【28166】Re:セル参照で値を抽出して貼り付けの方法 りょうた 05/8/30(火) 2:55 お礼[未読]
【28149】Re:セル参照で値を抽出して貼り付けの方法 でれすけ 05/8/29(月) 22:10 回答[未読]
【28150】Re:セル参照で値を抽出して貼り付けの方法 りょうた 05/8/29(月) 22:14 お礼[未読]

【28134】セル参照で値を抽出して貼り付けの方法
質問  りょうた  - 05/8/29(月) 19:15 -

引用なし
パスワード
   こんにちは。
また、どうしても分からないので、お知恵をお借りしたくて
書き込みいたします。初心者なもので、すみません。

質問
 
Range("A9,A19,A29・・・A299")のセルを参照して、値が"0"の時、
Range("I9,I19,I29・・・I299")の値をそれぞれコピーして
Range("I319")から("I320")("I321")・・・と下方向に貼り付けしたい。

です。

つまり、"A9" = 0 の時は、"I9"の値をコピーして "I319" に貼り付け
続いて、"A19" <> 0 ならば、何もせず
続いて、"A29" = 0 の時は、"I29"の値をコピーして "I320" に貼り付け

みたいにしたいのです。

今、試みている式は

For Each rng In Range("A9,A19,A29,A39,A49,A59,A69,A79,A89,A99,A109,A119,A129,A139,A149,A159,A169,A179,A189,A199,A209,A219,A229,A239,A249,A259,A269,A279,A289,A299")
   With rng
   If .Value = "0" Then
    .Offset(0, 8).Copy
    
    Range("I311" & n).Offset(1).PasteSpecial Paste:=xlPasteValues
    
   
   End If

   End With
 Next

ですが、これだと、"A299"の値を"I312"だけになってしまいます。

分かりづらいかもしれませんが、どなたかご指南よろしくお願いいたします。

【28137】Re:セル参照で値を抽出して貼り付けの方法
回答  でれすけ  - 05/8/29(月) 19:39 -

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

これだと、ループのあいだ中、nの値が変わっていません。
ループを一回まわるたびにnの値が1づづ増えるようにしてください。
また、貼り付け先の指定
Range("I311" & n).Offset(1)
が変です。もう一度よく考えてみてましょう。

>For Each rng In Range("A9,A19,A29,A39,A49,A59,A69,A79,A89,A99,A109,A119,A129,A139,A149,A159,A169,A179,A189,A199,A209,A219,A229,A239,A249,A259,A269,A279,A289,A299")
>   With rng
>   If .Value = "0" Then
>    .Offset(0, 8).Copy
>    
>    Range("I311" & n).Offset(1).PasteSpecial Paste:=xlPasteValues
>    
>   
>   End If
>
>   End With
> Next
>
>ですが、これだと、"A299"の値を"I312"だけになってしまいます。

【28144】Re:セル参照で値を抽出して貼り付けの方法
質問  りょうた  - 05/8/29(月) 21:15 -

引用なし
パスワード
   ▼でれすけ さん:

ご回答ありがとうございます。
ヒントをいただいて、がんばっていますが
どうしても、解決できません。

>こんばんは。
>
>これだと、ループのあいだ中、nの値が変わっていません。
>ループを一回まわるたびにnの値が1づづ増えるようにしてください。
>また、貼り付け先の指定
>Range("I311" & n).Offset(1)
>が変です。もう一度よく考えてみてましょう。

For Each rng In Range("A9,A19,A29,A39,A49,A59,A69,A79,A89,A99,A109,A119,A129,A139,A149,A159,A169,A179,A189,A199,A209,A219,A229,A239,A249,A259,A269,A279,A289,A299")
   With rng
   If .Value = "0" Then
    .Offset(0, 8).Copy

    Range("I311" + n).PasteSpecial Paste:=xlPasteValues
    cnt = n + 1
  
   
   End If

   End With
 Next

上記の様に、組んでみましたが
貼り付けられるのは、"I311"〜"I319"までで
"I320"以降には貼り付けてくれません。
おそらく原因は、"I3111"に貼り付けようとしてるのだと思うのですが
(そういう桁数の行がないので)
cnt = n + 1
だと、まずいのでしょうか?

解決しないと帰宅できないので
誰かお答えくださいませんでしょうか?
よろしくお願いいたします

【28147】Re:セル参照で値を抽出して貼り付けの方法
回答  でれすけ  - 05/8/29(月) 21:46 -

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

>貼り付けられるのは、"I311"〜"I319"までで
提示されているコードを見る限りにおいては、
"I311"〜"I319"に貼り付けられるのも不思議なんですが...

>cnt = n + 1
これではnの値は変更されません。
cntの値も変更されないとおもいます。
cntと言う変数は、どこで使っているんでしょうね?


"I311" + n
という演算の結果がどうなるか試してください。

>おそらく原因は、"I3111"に貼り付けようとしてるのだと思うのですが
そういうことです。
n=1の時、I321となるためには、どのような式になればいいと思いますか?

または、
"I311" + n
をやめて、Offset(n)を使う方法もあります。

最初提示されたコードでは、Offset(1)と固定されてましたが、
Offset(n)とすれば、基準のセルからn個離れたセルを指定できますから、
nが変わればセルも変わります。

【28148】Re:セル参照で値を抽出して貼り付けの方法
回答  MokoMoko  - 05/8/29(月) 22:05 -

引用なし
パスワード
   ▼りょうた さん:
今晩は・・・
ちょっと考えてみました。一度試してみてください。

Sub 順次チェック貼り付け()

Dim k As Long
Dim i As Long
k = 1
For i = 9 To 299 Step 10

If Cells(i, 1).Value = 0 Then
 Cells(318 + k, 10).Value = Cells(i, 1).Offset(, 8).Value
Else
 k = k - 1
End If

 k = k + 1
Next

End Sub

【28149】Re:セル参照で値を抽出して貼り付けの方法
回答  でれすけ  - 05/8/29(月) 22:10 -

引用なし
パスワード
   すみませんが、私は帰宅します。

Sub sample()

Dim i As Long, j As Long

j = 0
For i = 9 To 299 Step 10
 If Cells(i, 1).Value = 0 Then
   Range("I319").Offset(j).Value = Cells(i, 9).Value
   j = j + 1
 End If
Next

End Sub

【28150】Re:セル参照で値を抽出して貼り付けの方法
お礼  りょうた  - 05/8/29(月) 22:14 -

引用なし
パスワード
   ▼でれすけ さん:

ご定義ありがとうございます。

For Each rng In Range("A9,A19,A29,A39,A49,A59,A69,A79,A89,A99,A109,A119,A129,A139,A149,A159,A169,A179,A189,A199,A209,A219,A229,A239,A249,A259,A269,A279,A289,A299")
   With rng
   If .Value = "0" Then
    .Offset(0, 8).Copy
    
    Range("I311").Offset(n).PasteSpecial Paste:=xlPasteValues
    n = n + 1
 
   End If

   End With
  
 Next

これで、出来ました。

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

【28164】Re:セル参照で値を抽出して貼り付けの方法
お礼  りょうた  - 05/8/29(月) 23:27 -

引用なし
パスワード
   ▼MokoMoko さん:
>▼りょうた さん:
>今晩は・・・
>ちょっと考えてみました。一度試してみてください。
>
>Sub 順次チェック貼り付け()
>
>Dim k As Long
>Dim i As Long
>k = 1
>For i = 9 To 299 Step 10
>
>If Cells(i, 1).Value = 0 Then
> Cells(318 + k, 10).Value = Cells(i, 1).Offset(, 8).Value
>Else
> k = k - 1
>End If
>
> k = k + 1
>Next
>
>End Sub

ご回答ありがとうございます。
とりあえず、帰宅しますので
(すみません。今書き込みに気づきました。)
明日に試してみますね。
ありがとうございます。

それにしても、色々なアプローチがあるんですね。
奥が深いので・・・どういう風に取り組むのがベターなのか
悩んでしまうのですよね。。

【28166】Re:セル参照で値を抽出して貼り付けの方法
お礼  りょうた E-MAIL  - 05/8/30(火) 2:55 -

引用なし
パスワード
   ▼MokoMoko さん:
 でんすけさん

色々とご回答ありがとうございました。

結果、

Pubulic Sub てすと()

Dim i As Long, n As Long
n = 0
  For i = 9 To 299 Step 10
  If Cells(i, 1).Value = 0 Then
   Range("I311").Offset(n).Value = Cells(i, 9).Value
   n = n + 1 
  End If
  Next

Range("I310").Select
End Sub

以上のように、すっきりとまとめることができました。

ちなみに、一番最初に貼り付けセルが"I319"と書いたのは
"I311"の間違いでした。

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

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