Excel VBA質問箱 IV

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

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


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

【68327】新しいファイルを作成し、シートをコピーする nakataka 11/2/24(木) 10:15 質問[未読]
【68328】Re:新しいファイルを作成し、シートをコピ... Jaka 11/2/24(木) 10:32 発言[未読]
【68329】Re:新しいファイルを作成し、シートをコピ... nakataka 11/2/24(木) 10:56 質問[未読]
【68330】Re:新しいファイルを作成し、シートをコピ... UO3 11/2/24(木) 11:27 回答[未読]
【68334】Re:新しいファイルを作成し、シートをコピ... Jaka 11/2/24(木) 11:48 発言[未読]
【68335】Re:新しいファイルを作成し、シートをコピ... nakataka 11/2/24(木) 13:28 質問[未読]
【68340】Re:新しいファイルを作成し、シートをコピ... Jaka 11/2/24(木) 17:11 発言[未読]

【68327】新しいファイルを作成し、シートをコピー...
質問  nakataka  - 11/2/24(木) 10:15 -

引用なし
パスワード
   あるExcelファイルに10シートありまして、そのシートたちのセル(B2)に値があれば、そのシートたちだけ、コピーして新しいファイルを作成するというVBAを考えています。自分なりに作成したのですが、


Option Explicit
'モジュール変数
'新規ワークブック名
Dim strNewWorkbookName As String
Function f_NewWorkbook() As String

  Workbooks.Add
  f_NewWorkbook = ActiveWorkbook.Name

End Function

Sub シート出力2()
  
  strNewWorkbookName = f_NewWorkbook()
  
  i=1
  Do
  If ThisWorkbook.Sheets(i).Range(B2).Value <> "" Then
  ThisWorkbook.Sheets(i).Copy Before:=Workbook(strNewWorkbookName).Sheets(i)    
   i=i+1 
  End If
  Loop
  
End Sub

と作成しましたが、範囲が有効ではありません とエラー表示がでます。

どこが間違っているのでしょうか? 教えて下さい。

【68328】Re:新しいファイルを作成し、シートをコ...
発言  Jaka  - 11/2/24(木) 10:32 -

引用なし
パスワード
   エラーの箇所は?
気がついたところだけ

>  If ThisWorkbook.Sheets(i).Range(B2).Value <> "" Then
"B2" にしないとB2は、ただの変数。

>  ThisWorkbook.Sheets(i).Copy Before:=Workbook(strNewWorkbookName).Sheets(i)

Workbooks
    ^

【68329】Re:新しいファイルを作成し、シートをコ...
質問  nakataka  - 11/2/24(木) 10:56 -

引用なし
パスワード
   返信ありがとうございます。

▼Jaka さん:
>>  If ThisWorkbook.Sheets(i).Range(B2).Value <> "" Then
>"B2" にしないとB2は、ただの変数。

"B2"としたのですが、やはりエラー表示が出てきました。

まだまだ、間違っている箇所があるのでしょうか?

【68330】Re:新しいファイルを作成し、シートをコ...
回答  UO3  - 11/2/24(木) 11:27 -

引用なし
パスワード
   ▼nakataka さん:
>  If ThisWorkbook.Sheets(i).Range(B2).Value <> "" Then



>  If ThisWorkbooks.Sheets(i).Range("B2").Value <> "" Then

"B2"のほかに Workbook --> Workbooks

【68334】Re:新しいファイルを作成し、シートをコ...
発言  Jaka  - 11/2/24(木) 11:48 -

引用なし
パスワード
   Workbook(strNewWorkbookName).Sheets(i)
    ↑
   ここの s

それと、

>  Do
>  If ThisWorkbook.Sheets(i).Range(B2).Value <> "" Then
>  ThisWorkbook.Sheets(i).Copy Before:=Workbook(strNewWorkbookName).Sheets(i)    
>   i=i+1 
>  End If
>  Loop

Doを抜ける条件か、条件式が入ってないから、カウンタのiがブック枚数を超えると
エラーになります。

Do until 条件
Loop

Do
Loop until 条件

If 条件 then
  Exit Do
end if

【68335】Re:新しいファイルを作成し、シートをコ...
質問  nakataka  - 11/2/24(木) 13:28 -

引用なし
パスワード
   返信ありがとうございます。

エラーは出ませんが、全くコピーされません。

誰か教えて下さい

Dim i As String
  
  
  strNewWorkbookName = f_NewWorkbook()
  
  i = 1  
  Do Until i < 11
  
  i = i + 1
  If ThisWorkbook.Sheets(i).Range("B2").Value <> "" Then
   
  ThisWorkbook.Sheets(i).Copy Before:=Workbooks(strNewWorkbookName).Sheets(i - 1)
  
  End If
  
  Loop
 

【68340】Re:新しいファイルを作成し、シートをコ...
発言  Jaka  - 11/2/24(木) 17:11 -

引用なし
パスワード
   ▼nakataka さん:
>  i = 1  
>  Do Until i < 11
これだと、iが11より小さいまで、となりますから、
iが1の時は11よりも小さいから、1回も処理がされません。

Do Until i < Thisworkbook.sheets.count

こういうことなのでしょうか?
因みに非表示シートも含まれます。

尚、iが11より小さい内はなら、

Do While i < 11

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