Excel VBA質問箱 IV

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

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


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

【22053】範囲選択がうまく行きません nyan 05/2/7(月) 22:46 質問[未読]
【22058】Re:範囲選択がうまく行きません kazu 05/2/7(月) 23:14 発言[未読]
【22073】Re:範囲選択がうまく行きません nyan 05/2/8(火) 12:47 お礼[未読]
【22075】Re:範囲選択がうまく行きません IROC 05/2/8(火) 12:59 回答[未読]
【22083】Re:範囲選択がうまく行きません sa 05/2/8(火) 13:45 発言[未読]
【22084】Re:範囲選択がうまく行きません Jaka 05/2/8(火) 15:06 発言[未読]
【22086】Re:範囲選択がうまく行きません sa 05/2/8(火) 15:47 発言[未読]
【22092】Re:範囲選択がうまく行きません Jaka 05/2/8(火) 16:45 発言[未読]
【22093】Re:範囲選択がうまく行きません sa 05/2/8(火) 16:50 発言[未読]
【22110】Re:範囲選択がうまく行きません nyan 05/2/8(火) 23:04 お礼[未読]
【22109】Re:範囲選択がうまく行きません nyan 05/2/8(火) 23:01 お礼[未読]
【22088】Re:範囲選択がうまく行きません nyan 05/2/8(火) 16:07 発言[未読]
【22089】Re:範囲選択がうまく行きません IROC 05/2/8(火) 16:17 回答[未読]
【22107】Re:範囲選択がうまく行きません nyan 05/2/8(火) 22:32 発言[未読]

【22053】範囲選択がうまく行きません
質問  nyan  - 05/2/7(月) 22:46 -

引用なし
パスワード
      A  B  C   D
1 名前 部署 番号 提出
2 伊藤 営業 2341 ○
3 鈴木 営業 2456 ×
4 佐藤 総務 2458 ×

上記の内容が記載されたシート「東京」と、ボタンが貼り付けてあるシート「結果」があります。
ボタンを押すとマクロが動き、「東京」シートのD列が「×」の時にその行をコピーし、「結果」シートに貼り付けるという
マクロを作りたいのですが、範囲を選択する部分でエラーになってしまいます。
範囲選択の書き方が間違っているのでしょうか?


Private Sub CommandButton1_Click()

Dim 行, 空き行
行 = 2
空き行 = 2

Do While Sheets("東京").Cells(行, 4) <> ""            '「東京」シートの○×のセルが空欄でなく

  If Sheets("東京").Cells(行, 4) = "×" Then          '○×のセルが「×」の時

  Sheets("東京").Range(Cells(行, 1), Cells(行, 4)).Select    'その行の範囲を選択し ←ココがエラー

  Selection.Copy                        'コピー
    
    Do While Sheets("結果").Cells(空き行, 1) <> ""      '「結果」シートの行が空欄でなかったら
  
      空き行 = 空き行 + 1                  '空欄の行が見つかるまで検索
    
    Loop
      
  Sheets("結果").Cells(空き行, 1).Select            '空欄の行を選択
  ActiveSheet.Paste                       '貼り付け
  
  End If
  
行 = 行 + 1                            '「東京シート」の次の行

Loop

End Sub

【22058】Re:範囲選択がうまく行きません
発言  kazu  - 05/2/7(月) 23:14 -

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

こんばんは。
エラーが出る部分を以下の様に変更したらエラーが出なくなると思いますが、いかがでしょうか?


  With Sheets("東京")
    .Range(.Cells(行, 1), .Cells(行, 4)).Select   
  End With

【22073】Re:範囲選択がうまく行きません
お礼  nyan  - 05/2/8(火) 12:47 -

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

アドバイスありがとうございます。
早速、エラーの部分を教えていただいた文に置き換えて試してみましたが
やはり同じエラーになってしまいました。
「アプリケーション定義またはオブジェクト定義のエラー」と
表示されてしまいます。何が悪いのかよくわかりません。


>▼nyan さん:
>
>こんばんは。
>エラーが出る部分を以下の様に変更したらエラーが出なくなると思いますが、いかがでしょうか?
>
>
>  With Sheets("東京")
>    .Range(.Cells(行, 1), .Cells(行, 4)).Select   
>  End With

【22075】Re:範囲選択がうまく行きません
回答  IROC  - 05/2/8(火) 12:59 -

引用なし
パスワード
   >早速、エラーの部分を教えていただいた文に置き換えて試してみましたが
>やはり同じエラーになってしまいました。

コードをコピーして貼り付けましたか?
(Range内のCellsにもシートを指定する。)

【22083】Re:範囲選択がうまく行きません
発言  sa  - 05/2/8(火) 13:45 -

引用なし
パスワード
   Selection.Copy やActiveSheet.Paste        
するんでしたら
シートでselect方が良いような気がいます
それと
シートにボタンがあるので
シートがいろいろとSelectされるとうまく動かないので
標準モジュールにソースを書いて
CommandButton1_Click()で実行させてはどうでしょう

Private Sub CommandButton1_Click()

 Application.ScreenUpdating = False '←画面のちらつき防止(画面の処理を止める)
  Call Button1
 Application.ScreenUpdating = True  ’←画面戻す

End Sub


↓↓↓ 標準モジュールにソースを書く ↓↓↓


Public Sub Button1()

Dim 行, 空き行
行 = 2
空き行 = 2

Do While Sheets("東京").Cells(行, 4) <> ""            '「東京」シートの○×のセルが空欄でなく

  If Sheets("東京").Cells(行, 4) = "×" Then          '○×のセルが「×」の時

  Sheets("東京").Select
  Range(Cells(行, 1), Cells(行, 4)).Select    'その行の範囲を選択し ←ココがエラー
  
  Selection.Copy                        'コピー
  
    Do While Sheets("結果").Cells(空き行, 1) <> ""      '「結果」シートの行が空欄でなかったら
 
      空き行 = 空き行 + 1                  '空欄の行が見つかるまで検索
  
    Loop
   
  Sheets("結果").Select
  Cells(空き行, 1).Select            '空欄の行を選択
  ActiveSheet.Paste                       '貼り付け
 
  End If
 
行 = 行 + 1                            '「東京シート」の次の行

Loop

End Sub

【22084】Re:範囲選択がうまく行きません
発言  Jaka  - 05/2/8(火) 15:06 -

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

手法変えちゃったけど...。

Private Sub CommandButton1_Click()
  Dim 行 As Long, i As Long
  行 = 2
  With Sheets("東京")
    東京End行 = .Cells(行 - 1, 4).End(xlDown).Row
    For i = 行 To 東京End行
      If .Cells(i, 4).Value = "×" Then   '○×のセルが「×」の時
        .Range(.Cells(i, 1), .Cells(i, 4)).Copy
        結果End行 = Sheets("結果").Cells(1, 1).End(xlDown).Row
        Sheets("結果").Cells(結果End行 + 1, 1).PasteSpecial
      End If
    Next
  End With
End Sub

【22086】Re:範囲選択がうまく行きません
発言  sa  - 05/2/8(火) 15:47 -

引用なし
パスワード
   ▼Jaka さん:
>Private Sub CommandButton1_Click()
>  Dim 行 As Long, i As Long
>  行 = 2
>  With Sheets("東京")
>    東京End行 = .Cells(行 - 1, 4).End(xlDown).Row
>    For i = 行 To 東京End行
>      If .Cells(i, 4).Value = "×" Then   '○×のセルが「×」の時
>        .Range(.Cells(i, 1), .Cells(i, 4)).Copy
>        結果End行 = Sheets("結果").Cells(1, 1).End(xlDown).Row
>        Sheets("結果").Cells(結果End行 + 1, 1).PasteSpecial
>      End If
>    Next
>  End With
>End Sub

この手法Selectを使わないので好きです
しかし
 結果End行 = Sheets("結果").Cells(1, 1).End(xlDown).Row
は、
 結果End行 = Sheets("結果").Cells(65536, 1).End(xlUp).Row
のほうが良いと思いませんか?

【22088】Re:範囲選択がうまく行きません
発言  nyan  - 05/2/8(火) 16:07 -

引用なし
パスワード
   はい、そのままコピーして貼り付けてみましたが
エラーになってしまいました。

▼IROC さん:
>>早速、エラーの部分を教えていただいた文に置き換えて試してみましたが
>>やはり同じエラーになってしまいました。
>
>コードをコピーして貼り付けましたか?
>(Range内のCellsにもシートを指定する。)

【22089】Re:範囲選択がうまく行きません
回答  IROC  - 05/2/8(火) 16:17 -

引用なし
パスワード
   エラーとなった行の前に
Msgbox 行
と書いて、変数(行)の値を確認してみては如何でしょう?

【22092】Re:範囲選択がうまく行きません
発言  Jaka  - 05/2/8(火) 16:45 -

引用なし
パスワード
   ▼sa さん:
>しかし
> 結果End行 = Sheets("結果").Cells(1, 1).End(xlDown).Row
>は、
> 結果End行 = Sheets("結果").Cells(65536, 1).End(xlUp).Row
>のほうが良いと思いませんか?

え〜と、上から1個1個見ているみたいなんで、最初に見つかった空白セルでやめるのかな?と思ったもので...。
また、貼り付け先の途中に空白行があった場合は、そこに入れたいのかなとも思ったものでして...。

データがどんな風に記載されているのか解らないし。

【22093】Re:範囲選択がうまく行きません
発言  sa  - 05/2/8(火) 16:50 -

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

一列目に何もデータがなかったらどうなるのかなと思ったので
下の方に他のデータがある可能性もありましたね・・・
すみませんでした

>▼sa さん:
>>しかし
>> 結果End行 = Sheets("結果").Cells(1, 1).End(xlDown).Row
>>は、
>> 結果End行 = Sheets("結果").Cells(65536, 1).End(xlUp).Row
>>のほうが良いと思いませんか?
>
>え〜と、上から1個1個見ているみたいなんで、最初に見つかった空白セルでやめるのかな?と思ったもので...。
>また、貼り付け先の途中に空白行があった場合は、そこに入れたいのかなとも思ったものでして...。
>
>データがどんな風に記載されているのか解らないし。

【22107】Re:範囲選択がうまく行きません
発言  nyan  - 05/2/8(火) 22:32 -

引用なし
パスワード
   ステップインを使ってデバッグしていますが
エラーになる行の直前の変数(行)は予想通りの値が入っています
ので問題ないようです。

▼IROC さん:
>エラーとなった行の前に
>Msgbox 行
>と書いて、変数(行)の値を確認してみては如何でしょう?

【22109】Re:範囲選択がうまく行きません
お礼  nyan  - 05/2/8(火) 23:01 -

引用なし
パスワード
   教えて頂いた方法で試したところ上手くいきました。
どうもありがとうございました。
分けて記載するという方法もあるのですね。
勉強になりました。


▼sa さん:
>Selection.Copy やActiveSheet.Paste        
>するんでしたら
>シートでselect方が良いような気がいます
>それと
>シートにボタンがあるので
>シートがいろいろとSelectされるとうまく動かないので
>標準モジュールにソースを書いて
>CommandButton1_Click()で実行させてはどうでしょう
>
>Private Sub CommandButton1_Click()
>
> Application.ScreenUpdating = False '←画面のちらつき防止(画面の処理を止める)
>  Call Button1
> Application.ScreenUpdating = True  ’←画面戻す
>
>End Sub
>
>
>↓↓↓ 標準モジュールにソースを書く ↓↓↓
>
>
>Public Sub Button1()
>
>Dim 行, 空き行
>行 = 2
>空き行 = 2
>
>Do While Sheets("東京").Cells(行, 4) <> ""            '「東京」シートの○×のセルが空欄でなく
>
>  If Sheets("東京").Cells(行, 4) = "×" Then          '○×のセルが「×」の時
>
>  Sheets("東京").Select
>  Range(Cells(行, 1), Cells(行, 4)).Select    'その行の範囲を選択し ←ココがエラー
>  
>  Selection.Copy                        'コピー
>  
>    Do While Sheets("結果").Cells(空き行, 1) <> ""      '「結果」シートの行が空欄でなかったら
> 
>      空き行 = 空き行 + 1                  '空欄の行が見つかるまで検索
>  
>    Loop
>   
>  Sheets("結果").Select
>  Cells(空き行, 1).Select            '空欄の行を選択
>  ActiveSheet.Paste                       '貼り付け
> 
>  End If
> 
>行 = 行 + 1                            '「東京シート」の次の行
>
>Loop
>
>End Sub

【22110】Re:範囲選択がうまく行きません
お礼  nyan  - 05/2/8(火) 23:04 -

引用なし
パスワード
   アドバイスありがとうございます。
初心者なので内容が色々と理解できていない部分があり
転用ができないのですが、
今後勉強して覚えていきたいと思います。
ありがとうございました。


▼Jaka さん:
>こんにちは。
>
>手法変えちゃったけど...。
>
>Private Sub CommandButton1_Click()
>  Dim 行 As Long, i As Long
>  行 = 2
>  With Sheets("東京")
>    東京End行 = .Cells(行 - 1, 4).End(xlDown).Row
>    For i = 行 To 東京End行
>      If .Cells(i, 4).Value = "×" Then   '○×のセルが「×」の時
>        .Range(.Cells(i, 1), .Cells(i, 4)).Copy
>        結果End行 = Sheets("結果").Cells(1, 1).End(xlDown).Row
>        Sheets("結果").Cells(結果End行 + 1, 1).PasteSpecial
>      End If
>    Next
>  End With
>End Sub

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