Excel VBA質問箱 IV

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

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


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

【66596】Do until...Loopが途中で止まってしまう りん 10/9/13(月) 14:48 質問[未読]
【66598】Re:Do until...Loopが途中で止まってしまう Jaka 10/9/13(月) 15:45 発言[未読]
【66599】Re:Do until...Loopが途中で止まってしまう りん 10/9/13(月) 16:32 発言[未読]
【66602】Re:Do until...Loopが途中で止まってしまう Jaka 10/9/13(月) 17:06 発言[未読]
【66604】難解→何回 Jaka 10/9/13(月) 17:19 発言[未読]
【66605】Re:Do until...Loopが途中で止まってしまう りん 10/9/13(月) 17:24 発言[未読]
【66618】Re:Do until...Loopが途中で止まってしまう Jaka 10/9/14(火) 14:39 発言[未読]
【66622】Re:Do until...Loopが途中で止まってしまう りん 10/9/15(水) 17:18 お礼[未読]
【66603】Re:Do until...Loopが途中で止まってしまう kanabun 10/9/13(月) 17:14 発言[未読]
【66606】Re:Do until...Loopが途中で止まってしまう りん 10/9/13(月) 17:36 発言[未読]
【66607】Re:Do until...Loopが途中で止まってしまう kanabun 10/9/13(月) 18:05 発言[未読]
【66616】Re:Do until...Loopが途中で止まってしまう りん 10/9/14(火) 9:04 発言[未読]

【66596】Do until...Loopが途中で止まってしまう
質問  りん  - 10/9/13(月) 14:48 -

引用なし
パスワード
   VBA初心者です。
一番上のセルに入力したVLOOKをコピーして、Do until...Loopを使って、ENDと入力してあるセルまで数式の貼付をしたいのですが、途中でとまってしまい、
「Run-time error'13'」
というエラー表示が出ます。
ENDと入力してあるセルまで、貼付を繰り返すにはどこを修正すればよいのでしょうか?
全く検討違いのVBAを組んでしまっているかもしれませんが・・・
ご教授頂きたくよろしくお願いいたします。


Sub 1.() 
  '一番上のセルにVLOOK挿入
  Worksheets("sheet1").Activate
  Cells(6, 5).End(xlToRight).Offset(0, 1).Formula = _
    "=VLOOKUP(C" & 6 & ",'[PL-GS.xls]作業表'!$J$" & 6 & ":$W$" &
    109 & "," & 5 & "," & 0 & ")"
  
  'VLOOKをコピーして下に貼付け
  Cells(7, 5).End(xlToRight).Offset(-1, 1).Select
  Selection.Copy

  'VLOOKをコピーして下に貼付けをENDまで繰返し
  Dim i As String
  i = 5
  
  Do Until Cells(i, 11) = "END"
  Cells(5, 11).End(xlDown).Offset(1, 0).Select
  ActiveCell.PasteSpecial Paste:=xlFormulas

  i = i + 1
  Loop
End Sub

・エクセルのレイアウト都合上、6行目以下にVLOOKの式を入力したい
・右の最終列と、行の途中いくつかと最後にSUMが入力されているので、SUMの入っていない空白セルにのみVLOOKを入力したい

【66598】Re:Do until...Loopが途中で止まってしま...
発言  Jaka  - 10/9/13(月) 15:45 -

引用なし
パスワード
   ▼りん さん:
> Sub 1.() 
   ^
   ↑この部分はおいておいて。

>  '一番上のセルにVLOOK挿入
>  Worksheets("sheet1").Activate
>  Cells(6, 5).End(xlToRight).Offset(0, 1).Formula = _
>    "=VLOOKUP(C" & 6 & ",'[PL-GS.xls]作業表'!$J$" & 6 & ":$W$" &
>    109 & "," & 5 & "," & 0 & ")"
>  
>  'VLOOKをコピーして下に貼付け
>  Cells(7, 5).End(xlToRight).Offset(-1, 1).Select
>  Selection.Copy
>
>  'VLOOKをコピーして下に貼付けをENDまで繰返し
>  Dim i As String
>  i = 5
>  
>  Do Until Cells(i, 11) = "END"

>  Cells(5, 11).End(xlDown).Offset(1, 0).Select  '←
  ここにブレークポイントを置いて、F8ステップ実行をして、
  動作をチェックしてみてください。
  セレクトされているから、今どこのセルが対象か解ると思います。

>  ActiveCell.PasteSpecial Paste:=xlFormulas
>
>  i = i + 1
>  Loop
>End Sub
>
>・エクセルのレイアウト都合上、6行目以下にVLOOKの式を入力したい
>・右の最終列と、行の途中いくつかと最後にSUMが入力されているので、SUMの入っていない空白セルにのみVLOOKを入力したい

【66599】Re:Do until...Loopが途中で止まってしま...
発言  りん  - 10/9/13(月) 16:32 -

引用なし
パスワード
   ▼Jaka さん:
>▼りん さん:
 ご回答どうもありがとうございます。
>> Sub 1.() 
>   ^
>   ↑この部分はおいておいて。
    subのところに、数字はだめですよね。ありがとうございます。
>
>>  '一番上のセルにVLOOK挿入
>>  Worksheets("sheet1").Activate
>>  Cells(6, 5).End(xlToRight).Offset(0, 1).Formula = _
>>    "=VLOOKUP(C" & 6 & ",'[PL-GS.xls]作業表'!$J$" & 6 & ":$W$" &
>>    109 & "," & 5 & "," & 0 & ")"
>>  
>>  'VLOOKをコピーして下に貼付け
>>  Cells(7, 5).End(xlToRight).Offset(-1, 1).Select
>>  Selection.Copy
>>
>>  'VLOOKをコピーして下に貼付けをENDまで繰返し
>>  Dim i As String
>>  i = 5
>>  
>>  Do Until Cells(i, 11) = "END"
>
>>  Cells(5, 11).End(xlDown).Offset(1, 0).Select  '←
>  ここにブレークポイントを置いて、F8ステップ実行をして、
>  動作をチェックしてみてください。
>  セレクトされているから、今どこのセルが対象か解ると思います。

   教えて頂いたとおり1行ずつチェックしてみたところ、とあるセルのところでデバックとなり、
   「Run-time error'13'」のエラーが出てきました。
   素人で申し訳ないのですが、デバックとなったセルの何を調べると、このエラーを解除できる
   のでしょうか?
   調べたところ、変数のデータの型とやらがよくないのかと思ったのですが、それをどう変えれ
   ばよいのかがどうも分かりません。。。
>
>>  ActiveCell.PasteSpecial Paste:=xlFormulas
>>
>>  i = i + 1
>>  Loop
>>End Sub
>>
>>・エクセルのレイアウト都合上、6行目以下にVLOOKの式を入力したい
>>・右の最終列と、行の途中いくつかと最後にSUMが入力されているので、SUMの入っていない空白セルにのみVLOOKを入力したい

【66602】Re:Do until...Loopが途中で止まってしま...
発言  Jaka  - 10/9/13(月) 17:06 -

引用なし
パスワード
   エラーになったのはどこでですか?

選択した時?
>>>  Cells(5, 11).End(xlDown).Offset(1, 0).Select

数式を貼り付けた時?
>>>  ActiveCell.PasteSpecial Paste:=xlFormulas

また、難解ぐらい貼り付けているのでしょうか?
(頭が腐っていて当てにならない返信。)

【66603】Re:Do until...Loopが途中で止まってしま...
発言  kanabun  - 10/9/13(月) 17:14 -

引用なし
パスワード
   ▼りん さん:

横からすみません

>   「Run-time error'13'」のエラーが出てきました。
ランタイムエラーといっても、いろいろあると思います。
その下に エラーの内容が出ていませんですか?
たとえば 「型が一致しません」とか?

あと、
本題からは外れますが、
>  Cells(6, 5).End(xlToRight).Offset(0, 1).Formula = _
>    "=VLOOKUP(C" & 6 & ",'[PL-GS.xls]作業表'!$J$" & 6 & ":$W$" &
>    109 & "," & 5 & "," & 0 & ")"
は、単に
  Cells(6, 5).End(xlToRight).Offset(0, 1).Formula = _
    "=VLOOKUP(C6,'[PL-GS.xls]作業表'!$J$6:$W$109,5,0)"
ということではないですか?
6 とか 109 とかは 定数なので。


>  Cells(7, 5).End(xlToRight).Offset(-1, 1).Select
>  Selection.Copy

  Cells(7, 5).End(xlToRight).Offset(-1, 1).Copy
と一行で書けますよね?

その下も同様ですが、なるべく 「Selectしない」コードを書くように
しましょう。

【66604】難解→何回
発言  Jaka  - 10/9/13(月) 17:19 -

引用なし
パスワード
   すみません。

>また、難解ぐらい貼り付けているのでしょうか?
     ↓
    何回ぐらい貼り付けているのでしょうか?

【66605】Re:Do until...Loopが途中で止まってしま...
発言  りん  - 10/9/13(月) 17:24 -

引用なし
パスワード
   ▼Jaka さん:
>エラーになったのはどこでですか?
  Do Until Cells(i, 11) = "END"
  から
  Cells(5, 11).End(xlDown).Offset(1, 0).Select  '
  に移動しようとした時にエラーが出て、
  Do Until Cells(i, 11) = "END"
  に黄色いマーカーが引かれています

>
>選択した時?
>>>>  Cells(5, 11).End(xlDown).Offset(1, 0).Select
>
>数式を貼り付けた時?
>>>>  ActiveCell.PasteSpecial Paste:=xlFormulas
>
>また、難解ぐらい貼り付けているのでしょうか?
>(頭が腐っていて当てにならない返信。)
 48回貼付け終わったところでエラーになりました。

【66606】Re:Do until...Loopが途中で止まってしま...
発言  りん  - 10/9/13(月) 17:36 -

引用なし
パスワード
   ▼kanabun さん:
>▼りん さん:
 ご回答どうもありがとうございます。
>横からすみません
>
>>   「Run-time error'13'」のエラーが出てきました。
>ランタイムエラーといっても、いろいろあると思います。
>その下に エラーの内容が出ていませんですか?
>たとえば 「型が一致しません」とか?
 エラーにもいろいろあるんですね。言葉足らずですみません。下には
 「Type mismatch」
 と出ております。

>あと、
>本題からは外れますが、
>>  Cells(6, 5).End(xlToRight).Offset(0, 1).Formula = _
>>    "=VLOOKUP(C" & 6 & ",'[PL-GS.xls]作業表'!$J$" & 6 & ":$W$" &
>>    109 & "," & 5 & "," & 0 & ")"
>は、単に
>  Cells(6, 5).End(xlToRight).Offset(0, 1).Formula = _
>    "=VLOOKUP(C6,'[PL-GS.xls]作業表'!$J$6:$W$109,5,0)"
>ということではないですか?
>6 とか 109 とかは 定数なので。
 数字と文字は分けて入力しないといけないと勘違いしておりました。
 教えて頂いた記述に修正しました。ありがとうございます。
>
>>  Cells(7, 5).End(xlToRight).Offset(-1, 1).Select
>>  Selection.Copy
>も
>  Cells(7, 5).End(xlToRight).Offset(-1, 1).Copy
>と一行で書けますよね?
>
>その下も同様ですが、なるべく 「Selectしない」コードを書くように
>しましょう。
 Selectしない方がよいのですね。
 初歩的なことだとは思いますが、知りませんでした。
 ご教授ありがとうございます。

【66607】Re:Do until...Loopが途中で止まってしま...
発言  kanabun  - 10/9/13(月) 18:05 -

引用なし
パスワード
   ▼りん さん:

>・エクセルのレイアウト都合上、6行目以下にVLOOKの式を入力したい
>・右の最終列と、行の途中いくつかと最後にSUMが入力されているので、SUMの入
> っていない空白セルにのみVLOOKを入力したい

どのようなシートレイアウトなんでしょうね
SUM式の入っている列は 6行目から最後の行まで SUM式が入っているんでしょうか?

いちど、手動で
表内のすべてのセルを選択して
[F5](ジャンプ) [セル選択...]ダイアログで
  ●定数 をONにして [OK]

とすると、どのようなセルが選択されますか?
また、上の操作をマクロ記録してみると、どのようなコードが
記録されましたか?

【66616】Re:Do until...Loopが途中で止まってしま...
発言  りん  - 10/9/14(火) 9:04 -

引用なし
パスワード
   ▼kanabun さん:
>▼りん さん:
>
>>・エクセルのレイアウト都合上、6行目以下にVLOOKの式を入力したい
>>・右の最終列と、行の途中いくつかと最後にSUMが入力されているので、SUMの入
>> っていない空白セルにのみVLOOKを入力したい
>
>どのようなシートレイアウトなんでしょうね
>SUM式の入っている列は 6行目から最後の行まで SUM式が入っているんでしょうか?
 6行目から最後の行までではなく、8行目、10行目・・・、と途中途中で入っています。
 具体的には、月毎の経費を集計する資料で、
  列:月、最終列に12ヶ月分の合計SUM式を挿入
  行:経費項目、経費項目の区分毎にSUM式を挿入
 といったレイアウトになっています。


>いちど、手動で
>表内のすべてのセルを選択して
> [F5](ジャンプ) [セル選択...]ダイアログで
>  ●定数 をONにして [OK]
>
>とすると、どのようなセルが選択されますか?
 空欄と数式以外の、数値や文字が入っているセルが選択されます。

>また、上の操作をマクロ記録してみると、どのようなコードが
>記録されましたか?
 Sub Macro1()
  Range("B4:W110").Select
  Range("E10").Activate
  Selection.SpecialCells(xlCellTypeConstants, 23).Select
 End Sub
 と記録されました。

【66618】Re:Do until...Loopが途中で止まってしま...
発言  Jaka  - 10/9/14(火) 14:39 -

引用なし
パスワード
   ▼りん さん:
>  Do Until Cells(i, 11) = "END"
>  に黄色いマーカーが引かれています

原因が解りました。

原因、
Cells(i, 11) の数式の結果にエラーがあった場合、
エラー(例えば #N/A)と文字を直接比較するとエラーになるようです。

エラーかエラーで無いかの判定いは、こんな感じになるんですけど、
これらをDo Loop にどうやって組み込もうかというところですね。
今のところ思いつきません。

If IsError(Range("A1").Value) = False Then
  If Range("A1").Value = "END" Then
   MsgBox "END"
  Else
   MsgBox "ENDでない"
  End If
Else
  MsgBox "エラー"
End If

書き込む数式に
= IF(isna(Vlookuo(・・・),"",Vlookuo(・・・
とか、エラー処理がされていれば良かったんですけどね。

【66622】Re:Do until...Loopが途中で止まってしま...
お礼  りん  - 10/9/15(水) 17:18 -

引用なし
パスワード
   ▼Jaka さん:
 どうもありがとうございました。
 VLOOKの結果にエラーがあるとよくないのですね。
 数式のエラー処理含め、また格闘してみようと思います。
 ありがとうございました。

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