Excel VBA質問箱 IV

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

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


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

【56754】値だけ貼付けしたいけどエラーに 初心者ごろう 08/7/3(木) 15:43 質問[未読]
【56755】Re:値だけ貼付けしたいけどエラーに こぎつね 08/7/3(木) 16:28 発言[未読]
【56818】Re:値だけ貼付けしたいけどエラーに 初心者ごろう 08/7/7(月) 14:41 お礼[未読]
【56836】Re:値だけ貼付けしたいけどエラーに こぎつね 08/7/7(月) 23:36 発言[未読]
【56841】Re:値だけ貼付けしたいけどエラーに kanabun 08/7/8(火) 12:54 発言[未読]
【56847】Re:値だけ貼付けしたいけどエラーに 初心者ごろう 08/7/8(火) 14:26 発言[未読]
【56852】Re:値だけ貼付けしたいけどエラーに kanabun 08/7/8(火) 14:49 発言[未読]
【56842】Re:値だけ貼付けしたいけどエラーに Jaka 08/7/8(火) 13:14 発言[未読]
【56849】Re:値だけ貼付けしたいけどエラーに 初心者ごろう 08/7/8(火) 14:31 発言[未読]
【56843】Re:値だけ貼付けしたいけどエラーに kanabun 08/7/8(火) 13:16 発言[未読]
【56860】Re:値だけ貼付けしたいけどエラーに 初心者ごろう 08/7/8(火) 18:06 お礼[未読]
【56861】Re:値だけ貼付けしたいけどエラーに kanabun 08/7/8(火) 18:47 発言[未読]
【56933】Re:値だけ貼付けしたいけどエラーに 初心者ごろう 08/7/11(金) 11:46 お礼[未読]

【56754】値だけ貼付けしたいけどエラーに
質問  初心者ごろう  - 08/7/3(木) 15:43 -

引用なし
パスワード
   こんにちは。
下のコードを参考書を見ながら作りましたが、
  '13.xlsを開く から下に17行目の
  Selection.PasteSpecial Paste:=xlValues   '値のみ貼付け
の部分でエラーになります。
エラーの内容は、
実行時エラー'1004'
コピー領域と貼り付け領域の形が違うため、情報を貼り付けることができません。
情報を貼り付けるに9は、次のいづれかの操作を行ってください:
?1つのセルをクリックし、貼り付けてみてください。
?貼り付け元の形を確かめ、適切な範囲を選択したあと、貼り付けてみてください。
です。
エラーの原因は'13.xlsのSheets:QCの13行目から下にはデーターが無いのですが、
最後の行(65536)まで選択して張り付ける作業を行うからだと思っているのですが・・・
(その他.xlsにはデーターがあり、集計.xlsにそのデータが貼り付けられます。)
こういう場合の対処方法をご指導いただけないでしょうか?


=================================================================

Sub 値だけ貼付け()

  Application.ScreenUpdating = False   '画面を更新しない


  'その他.xlsを開く
  Workbooks.Open Filename:= _
    "\\kkk\hh\III\YY\DDDDD\DDD\PPPPP\その他.xls", UpdateLinks _
    :=0

  'コピーする
  Sheets("その他").Select
  Range("A13:L13").Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.Copy

  '貼りつける
  Windows("集計.xls").Activate
  Sheets("集計").Select
  Range("A13").Select
  Selection.PasteSpecial Paste:=xlValues   '値のみ貼付け

  '開いたブックをセーブして閉じる
  Windows("その他.xls").Activate
  Application.CutCopyMode = False
  Cells(65536, 1).Select
  Selection.End(xlUp).Select   '最終セルの取得
  ActiveCell.Offset(1, 0).Activate   '最終セルの1つ下のセルを指定
  ActiveWorkbook.Save   'ブックを保存
  ActiveWindow.Close   'ブックを閉じる
  
  '13.xlsを開く
  Workbooks.Open Filename:= _
    "\\kkk\hh\III\YY\DDDDD\DDD\PPPPP\13.xls", _
    UpdateLinks:=0
  
  'コピーする(Sheets:QC)
  Sheets("QC").Select
  Range("A13:L13").Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.Copy

  '貼りつける
  Windows("集計.xls").Activate
  Sheets("集計").Select
  Cells(65536, 1).Select
  Selection.End(xlUp).Select   '最終セルの取得
  ActiveCell.Offset(1, 0).Activate   '最終セルの1つ下のセルを指定
  Selection.PasteSpecial Paste:=xlValues   '値のみ貼付け

  Windows("13.xls").Activate
  Sheets("QC").Select
  Application.CutCopyMode = False
  Cells(65536, 1).Select
  Selection.End(xlUp).Select   '最終セルの取得
  ActiveCell.Offset(1, 0).Activate   '最終セルの1つ下のセルを指定

  'コピーする(Sheets:AA)
  Sheets("AA").Select
  Range("A13:L13").Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.Copy

  '貼りつける
  Windows("集計.xls").Activate
  Sheets("集計").Select
  Cells(65536, 1).Select
  Selection.End(xlUp).Select   '最終セルの取得
  ActiveCell.Offset(1, 0).Activate   '最終セルの1つ下のセルを指定
  Selection.PasteSpecial Paste:=xlValues   '値のみ貼付け

  Windows("13.xls").Activate
  Sheets("AA").Select
  Application.CutCopyMode = False
  Cells(65536, 1).Select
  Selection.End(xlUp).Select   '最終セルの取得
  ActiveCell.Offset(1, 0).Activate   '最終セルの1つ下のセルを指定
  
  '開いたブックをセーブして閉じる
  ActiveWorkbook.Save   'ブックを保存
  ActiveWindow.Close   'ブックを閉じる


  '14.xlsを開く
  Workbooks.Open Filename:= _
    "\\kkk\hh\III\YY\DDDDD\DDD\PPPPP\14.xls", UpdateLinks _
    :=0

  'コピーする
  Sheets("BB").Select
  Range("A13:L13").Select
  Range(Selection, Selection.End(xlDown)).Select
  Selection.Copy

  '貼りつける
  Windows("集計.xls").Activate
  Sheets("集計").Select
  Cells(65536, 1).Select
  Selection.End(xlUp).Select   '最終セルの取得
  ActiveCell.Offset(1, 0).Activate   '最終セルの1つ下のセルを指定
  Selection.PasteSpecial Paste:=xlValues   '値のみ貼付け

  '開いたブックをセーブして閉じる
  Windows("14.xls").Activate
  Sheets("BB").Select
  Application.CutCopyMode = False
  Cells(65536, 1).Select
  Selection.End(xlUp).Select   '最終セルの取得
  ActiveCell.Offset(1, 0).Activate   '最終セルの1つ下のセルを指定
  ActiveWorkbook.Save   'ブックを保存
  ActiveWindow.Close   'ブックを閉じる

End Sub

【56755】Re:値だけ貼付けしたいけどエラーに
発言  こぎつね  - 08/7/3(木) 16:28 -

引用なし
パスワード
   直接の回答ではありませんが、
http://www.officetanaka.net/excel/vba/speed/s2.htm
ご参考までに。

【56818】Re:値だけ貼付けしたいけどエラーに
お礼  初心者ごろう  - 08/7/7(月) 14:41 -

引用なし
パスワード
   ▼こぎつね さん:
>直接の回答ではありませんが、
>http://www.officetanaka.net/excel/vba/speed/s2.htm
>ご参考までに。

ありがとうございます。
遅くなり申し訳ありません。
教えていただきましたホームページを読みました。
書かれている内容はなんとなくは理解でき、
コードを作ってみても止まってしまいます。

【56836】Re:値だけ貼付けしたいけどエラーに
発言  こぎつね  - 08/7/7(月) 23:36 -

引用なし
パスワード
   ▼初心者ごろう さん:
>▼こぎつね さん:
>>直接の回答ではありませんが、
>>http://www.officetanaka.net/excel/vba/speed/s2.htm
>>ご参考までに。
>
>ありがとうございます。
>遅くなり申し訳ありません。
>教えていただきましたホームページを読みました。
>書かれている内容はなんとなくは理解でき、
>コードを作ってみても止まってしまいます。

>コードを作ってみても止まってしまいます。
そのコードを提示されないと、回答は困難なような。。。

【56841】Re:値だけ貼付けしたいけどエラーに
発言  kanabun  - 08/7/8(火) 12:54 -

引用なし
パスワード
   ▼初心者ごろう さん:
こんにちは。

提示のマクロコードを 文章にすると、こういうことですか?

Sub 値だけ貼付けVer2()
 Const myFolder = "\\kkk\hh\III\YY\DDDDD\DDD\PPPPP\"

'  Application.ScreenUpdating = False
'
'(1)『その他.xls』を開いて「その他」[A13:L13]以降全行を Copy
'   → 値貼り付け『集計.xls』「集計」[A13]
'   開いたBookを(保存して?) 閉じる

'(2)『13.xls』を開いて
'  Sheet「QC」[A13:L13]以降全行を Copy
'   → 値貼り付け『集計.xls』「集計」[A列最終行に追加]
'  Sheet「AA」の[A13:L13]以降全行を Copy
'   → 値貼り付け『集計.xls』「集計」[A列最終行に追加]
'  開いたBookを(保存して?) 閉じる


'(3)『14.xls』を開いて
'  Sheet「BB」の[A13:L13]以降全行を Copy
'   → 値貼り付け『集計.xls』「集計」[A列最終行に追加]
'  開いたBookを(保存して?) 閉じる

'  Application.ScreenUpdating = true
End Sub

【56842】Re:値だけ貼付けしたいけどエラーに
発言  Jaka  - 08/7/8(火) 13:14 -

引用なし
パスワード
   単純に2007以外のバージョンで、
こういうことをしているからだと思いますけどね。

Range("A1:A2").Copy
Range("A65536").PasteSpecial (xlPasteValues)

コピーする行数と貼り付け先の残りの行数を、
きちんと計算してから貼り付ければ良いと思います。

【56843】Re:値だけ貼付けしたいけどエラーに
発言  kanabun  - 08/7/8(火) 13:16 -

引用なし
パスワード
   ▼初心者ごろう さん:

もし Ver2 のようで合ってるなら、あとはそれをコードにするだけです。
コード化するとき、開くBookや 貼り付け先がちがうだけで、処理内容が
同じ部分は、サブプロシージャに独立させて、そこをCallするようにします。
↓こんな感じで。
   (開いたBookのほうは何ら変更してないので 保存せず閉じています)

Sub 値だけ貼付けVer3()
 Const myFolder = "\\kkk\hh\III\YY\DDDDD\DDD\PPPPP\"
 Dim Book As Workbook
 
  Application.ScreenUpdating = False

'(1)『その他.xls』を開いて 「集計」シートに値貼り付け
  Set Book = Workbooks.Open(myFolder & "その他.xls")
  CopyData Book.Sheets("その他"), "A13"
  Book.Close
  Set Book = Nothing
  
'(2)『13.xls』を開いて 「集計」シートに値貼り付け
  Set Book = Workbooks.Open(myFolder & "13.xls")
  CopyData Book.Sheets("QC")
  CopyData Book.Sheets("AA")
  Book.Close
  Set Book = Nothing


'(3)『14.xls』を開いて 「集計」シートに値貼り付け
  Set Book = Workbooks.Open(myFolder & "14.xls")
  CopyData Book.Sheets("BB")
  Book.Close
  Set Book = Nothing

  Application.ScreenUpdating = True

End Sub

'WS1:コピー元シート  strCopyTo: コピー先先頭セル([A13]のときのみ指定)
Private Sub CopyData(ByVal WS1 As Worksheet, Optional strCopyTo$ = "")
 Dim y As Long
 Dim CopyTo As Range
 Dim WS2 As Worksheet
  Set WS2 = Workbooks("集計.xls").Sheets("集計")
  If IsMissing(strCopyTo) Then
    Set CopyTo = WS2.Cells(65536, "A").End(xlUp).Offset(1)
  Else
    Set CopyTo = WS2.Range(strCopyTo)
  End If
  With WS1
    y = .Cells(65536, "A").End(xlUp).Row 'A列のデータ最終行を求める
    If y >= 13 Then '▼有効なデータがあったときのみ、 'コピーする
      .Range("A13:L" & y).Copy
      CopyTo.PasteSpecial Paste:=xlValues   '値のみ貼りつける
      Application.CutCopyMode = False
    End If
  End With
  Set WS2 = Nothing
End Sub

【56847】Re:値だけ貼付けしたいけどエラーに
発言  初心者ごろう  - 08/7/8(火) 14:26 -

引用なし
パスワード
   ▼kanabun さん:
>▼初心者ごろう さん:
>こんにちは。

こんにちは。

>提示のマクロコードを 文章にすると、こういうことですか?

そのような感じです。

こぎつねさんから教えていただいたサイトや他のサイトを参考にしているのですが
なかなか思うようにいきません。
書かれている内容はなんとなくわかるのですが、それをどのように使うのか分からずとまっています。

構成はこのような感じです。
kkk/hh/YY/DDDDD/DDD
         +--/PPPPP / その他.xls
         |      13.xls
         |      14.xls
         |      15.xls
         |       ・
         |       ・
         |       ・
         |      32.xls
         |      管理1.xls
         |      管理2.xls
         |      管理3.xls
         |      マスタ.xls
         |      集計.xls
         |              
         +-- data1 /
         +-- data2 /

となっています。
はじめのレスですが文字数オーバーで書けなかったので、
その他〜14.xlsまでの作業のコードを書きました。すみません。
その他〜32.xlsにあるすべてのシートの
[A13:L13]以降全行を Copy→ 値貼り付け『集計.xls』「集計」[A13]
             (最初はA13だけどそれ以降は、最終行に貼付け)
という作業をしたいと思っています。

【56849】Re:値だけ貼付けしたいけどエラーに
発言  初心者ごろう  - 08/7/8(火) 14:31 -

引用なし
パスワード
   ▼Jaka さん:
>単純に2007以外のバージョンで、
>こういうことをしているからだと思いますけどね。
>
>Range("A1:A2").Copy
>Range("A65536").PasteSpecial (xlPasteValues)
>
>コピーする行数と貼り付け先の残りの行数を、
>きちんと計算してから貼り付ければ良いと思います。

こんにちは。
コメントありがとうございます。
コピーのところですが、データがあるシートとそうでないシートがあります。
しかし、データが入力されたらコピーしないといけないので、
一つ一つブックとシートを指定してこういう作業にしました。
データが無い場合は、どうしたらいいのか調べ中でした。すみません。

【56852】Re:値だけ貼付けしたいけどエラーに
発言  kanabun  - 08/7/8(火) 14:49 -

引用なし
パスワード
   ▼初心者ごろう さん:
>構成はこのような感じです。
>kkk/hh/YY/DDDDD/DDD
>         +--/PPPPP / その他.xls
>         |      13.xls
>         |      14.xls
>         |      15.xls
>         |       ・
>         |       ・
>         |       ・
>         |      32.xls
>         |      管理1.xls
>         |      管理2.xls
>         |      管理3.xls
>         |      マスタ.xls
>         |      集計.xls
>         |              
>         +-- data1 /
>         +-- data2 /
>
>となっています。

あるBookを開いて Copyするとき、1つのシートからコピーするばあいと、
2つのシートからコピーするばあいとあるようなので、以下のように
>  CopyData Book.Sheets("その他"), "A13"
を1回書くところと 2回かくところを (1) と(2) に示しましたが、
これでOK なら、
開くファイルが増えても、このブロックをどんどん足していくだけです。
また、フォルダが途中で変わるときには
Const myFolder は
Dim myFolder As String と変数にしておいて、
最初のフォルダ名で初期化しておき、フォルダが変わるところで、
myFolderにあたらしいフォルダ名を代入しなおしてください。


'(1)『その他.xls』を開いて 「集計」シートに値貼り付け
  Set Book = Workbooks.Open(myFolder & "その他.xls")
  CopyData Book.Sheets("その他"), "A13"
  Book.Close
  Set Book = Nothing
  
'(2)『13.xls』を開いて 「集計」シートに値貼り付け
  Set Book = Workbooks.Open(myFolder & "13.xls")
  CopyData Book.Sheets("QC")
  CopyData Book.Sheets("AA")
  Book.Close
  Set Book = Nothing

>はじめのレスですが文字数オーバーで書けなかったので、
>その他〜14.xlsまでの作業のコードを書きました。すみません。
>その他〜32.xlsにあるすべてのシートの
>[A13:L13]以降全行を Copy→ 値貼り付け『集計.xls』「集計」[A13]
>             (最初はA13だけどそれ以降は、最終行に貼付け)
>という作業をしたいと思っています。

【56860】Re:値だけ貼付けしたいけどエラーに
お礼  初心者ごろう  - 08/7/8(火) 18:06 -

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

こんにちは。
No.56852のコメント含め、分かりやすい説明ありがとうございます。
説明を読み、理解です。本当にありがとうございます。
早速、下のコードを実際のブック名やシート名を当てはめて実行してみました。
>Sub 値だけ貼付けVer3()
は、理解できたのですが、

>'WS1:コピー元シート  strCopyTo: コピー先先頭セル([A13]のときのみ指定)

これより下で止まってしまいました。
>Private Sub CopyData(ByVal WS1 As Worksheet, Optional strCopyTo$ = "")
> Dim y As Long
> Dim CopyTo As Range
> Dim WS2 As Worksheet
>  Set WS2 = Workbooks("集計.xls").Sheets("集計")
>  If IsMissing(strCopyTo) Then
>    Set CopyTo = WS2.Cells(65536, "A").End(xlUp).Offset(1)
>  Else

(止まってしまったのは下の部分です。)
>    Set CopyTo = WS2.Range(strCopyTo)

1つ目のブックのシートのコピーはうまくできました。
2つ目のブックを開いたまでは進むのですが、
この部分で実行時エラーが出てしまいました。
そこで、セルの指定が無いからかなと思って、

(1)『その他.xls』を開いて 「集計」シートに値貼り付け
  Set Book = Workbooks.Open(myFolder & "その他.xls")
  CopyData Book.Sheets("その他"), "A13"
  Book.Close
  Set Book = Nothing

と同じ用に仮に
(2)『13.xls』を開いて 「集計」シートに値貼り付け
  Set Book = Workbooks.Open(myFolder & "13.xls")
  CopyData Book.Sheets("QC"), "A13"
  CopyData Book.Sheets("AA"), "A13"
  Book.Close
  Set Book = Nothing

というようにしてみると、動きましたが、
この場合だと、もちろんコピー先のA13に貼り付けます。
いろいろ試してみましたが私に知識が無さ過ぎてだめでした。

【56861】Re:値だけ貼付けしたいけどエラーに
発言  kanabun  - 08/7/8(火) 18:47 -

引用なし
パスワード
   ▼初心者ごろう さん:
こんちは

>>  If IsMissing(strCopyTo) Then
>>    Set CopyTo = WS2.Cells(65536, "A").End(xlUp).Offset(1)
>>  Else
>
>(止まってしまったのは下の部分です。)
>>    Set CopyTo = WS2.Range(strCopyTo)
>
>1つ目のブックのシートのコピーはうまくできました。
>2つ目のブックを開いたまでは進むのですが、
>この部分で実行時エラーが出てしまいました。

おぉーー、ごめんなさい。
>>  If IsMissing(strCopyTo) Then
  「strCopyTo パラメータに何も渡されなかった時」の判定が、これでは
  有効に機能してなかったです。
ごめんなさい。

誤  If IsMissing(strCopyTo) Then
    ↓
正  If Len(strCopyTo) = 0 Then

としてください。

【56933】Re:値だけ貼付けしたいけどエラーに
お礼  初心者ごろう  - 08/7/11(金) 11:46 -

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

こんにちは。
kanabunさん、ありがとうございます。
無事、コピーと貼付けができました。

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