[[20060220171324]] 『VBAで別表へコピー』(ばんばん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAで別表へコピー』(ばんばん)

 いつもお世話になっております。
 VBAでのA表からB表へのコピー(値の代入)について質問させてください。
 注文書を受理した時点でA表へ必要事項を入力します。
 A表のキー項目(C〜F)のデータがある範囲をコピーしてB表C表・・・へ
 貼り付けるマクロを作成中です。
 下記のようにコードを書いてみましたが、
 どうしても.PasteSpecial Paste:=xlValuesの使い方がわかりません。
 他のサイトで調べてみたりもしたのですが、私には難しくてわかりません。
 できれば、今度の為にもどこを直すのかではなく、
 どう使えばいいのかをわかり易く教えていただけませんでしょうか?
 どうか、よろしくお願い致します。

 Sub test()
 Dim filename As String
 Dim PATH As String
 PATH = "\\aaa\sss\管理\管理表\"
 strfilename = PATH & "A表" & ".xls"
     If Dir(strfilename) <> "" Then
     Set WB = Workbooks.Open(strfilename)
         With Worksheets("A管理表")
             With .Range("C4:F" & .Range("C65536").End(xlUp).Row).Copy _
                 .Worksheet("B表").Range("B4:E" & .Range("E65536").End(xlUp).Row)
                 .PasteSpecial Paste:=xlValues
             End With
         End With
     End If
 End Sub


 これだとどうなりますか。
 
 Sub test()
 Dim filename As String
 Dim PATH As String
 PATH = "\\aaa\sss\管理\管理表\"
 strfilename = PATH & "A表" & ".xls"
     If Dir(strfilename) <> "" Then
     Workbooks.Open (strfilename)
         With Worksheets("A管理表")
             .Range("C4:F" & .Range("C65536").End(xlUp).Row).Copy
             With Worksheets("B表")
                 .Range("B4:E" & .Range("E65536").End(xlUp).Row) _
                 .PasteSpecial Paste:=xlValues
             End With
         End With
     End If
 End Sub

 (川野鮎太郎)


 >.PasteSpecial Paste:=xlValues
 は形式を選択して貼り付けの「値」を選択して実施した状態です。
 式を参照するのではなく、値だけを使いたいときに使用します。
 (ROUGE)


 私の書いたものでご希望の通りになるとすれば、ばんばんさんのコードは以下の所がまずいようです。
 With .Range("C4:F" & .Range("C65536").End(xlUp).Row).Copy 
 ~~~~Withでくくるものはヘルプを見ると、以下のように書いてあります。
 『オブジェクトやユーザー定義型に対して、一連のステートメントを実行するフロー制御ステートメントです。』

 .Worksheet("B表").Range("B4:E" & .Range("E65536").End
 ~ここと             ~ここにピリオドがあると、
 Worksheets("A管理表").Worksheet("B表").Range("B4:E" & Worksheets("A管理表").Range("E65536").End
 に、なってしまいます。

 (川野鮎太郎)

 鮎太郎さん、ROUGEさん、早速のご回答ありがとうございました。
 昨日は17:00退社をしてしまった為、ご教授頂いたのに
 投げ逃げ(そんな言い方はないですね(^▽^;))なってしまいすみませんでした。
 朝一で学校へ来て、読ませて頂きました。
 なのに、今まで御礼もせずごめんなさい。
 なんとか、読解することが出来て、ROUGEさんと鮎太郎さんのご教授の意味がわかりました。(なんとなく)

 鮎太郎さんがご提示してくれたコードですが、
 With Worksheets("B表")
 でインデックスが有効範囲にありませんとなってしまいます。

 >A表のキー項目(C〜F)のデータがある範囲をコピーしてB表C表・・・へ
 と書きましたが、別のファイルになっている為、(質問の仕方が足りなくてすみません)
 With workboooks("test 管理表").Worksheets("B表")
 webで異なるオブジェクトならネスト構造に出来ると書いてあったので
 With workboooks("test 管理表").Worksheets("B表") なども試してみました。
 ・・・お手上げです。

 初めの趣旨(>どう使えばいいのかをわかり易く教えていただけませんでしょうか?)
 とは変わってしまいますが、ご教授下さい。
 よろしくお願い致します。


 ばんばんです。
 すごく困っています。
 鮎太郎さんご不在のようですので、どなたか教えて頂けないでしょうか。
 よろしくお願い致します。
 (ばんばん)


 これだとどうですか?
 ----------
 Sub test()
 Dim filename As String
 Dim PATH As String
 PATH = "\\aaa\sss\管理\管理表\"
 strfilename = PATH & "A表" & ".xls"
     If Dir(strfilename) <> "" Then
     Workbooks.Open (strfilename)
         With Worksheets("A管理表")
             .Range("C4:F" & .Range("C65536").End(xlUp).Row).Copy
         End With    '←ここにEnd Withを移動しました。
         With Worksheets("B表")
                 .Range("B4:E" & .Range("E65536").End(xlUp).Row) _
                 .PasteSpecial Paste:=xlValues
         End With
     End If
 End Sub

 WookBoooksはミスタイピングですね・・・。(←これは今回は関係ないですよね?)
 (ROUGE)

 ROUGEさん、お返事ありがとうございました。
 早速、試してみたのですが、
 With Worksheets("B表")
 でやはり、インデックスが有効範囲にありません。となってしまいます。
 今日も早くも退社時間になってしまいましたので、朝一チェックになってしまいますが
 よろしくお願い致します。
 (ばんばん)

 これでいかがですか?
 ----------
 Sub test()
 Dim strfilename As String
 Dim PATH As String
 PATH = "\\aaa\sss\管理\管理表\"
 strfilename = PATH & "A表" & ".xls"
 If Dir(strfilename) <> "" Then
 Workbooks.Open (strfilename)
 With Worksheets("A管理表")
    .Range("C4:F" & .Range("C65536").End(xlUp).Row).Copy
 End With
 With Worksheets("B表")
     .Range("B4").PasteSpecial Paste:=xlValues
 End With
 End If
 Application.CutCopyMode = False
 End Sub

 A表.xlsのシート名はちゃんと設定されていますか?
 (ROUGE)


 えっと・・・、不在でした・・・_/ ̄|○ il||li
 ばんばんさんのコードを拝見したときに、
 strfilename = PATH & "A表" & ".xls"
 If Dir(strfilename) <> "" Then
 Workbooks.Open (strfilename)    と、なったあとで、開いたブック名を指定しての
 コードではなかったので、同じブックにA管理表とB表があるとおもっていましたが、
 もしかしたら、別ブックでしょうか?
 となると、コードのなかで、親オブジェクト(ブック名)を指定しないといけないような・・・。

 (川野鮎太郎)
 ----
 ROUGEさん、コードありがとうございました。
 鮎太郎さんお返事ありがとうございました。
 やはり、ご不在だったのですね。
 ROUGEさんのコードで試してみましたが、やはり・・・。

 鮎太郎さんの仰るとおり、別ファイルなので(すみませんでした<(_ _)>)
 一応、自分なりにコードを考えてみましたがどうでしょうか(;^_^A アセアセ・・・
 でもやはり、インデックスが・・・となってしまいます。
 どうやらデバッグすると

  Sub test()
 Dim strfilename As String
 Dim filename As String    'ここ足してみました。
 Dim PATH As String
 PATH = "\\aaa\sss\管理\管理表\"
 strfilename = PATH & "A表" & ".xls"
 filename = PATH & "B表" & ".xls"
 If Dir(strfilename) <> "" Then
 Workbooks.Open (strfilename)
 With Worksheets("A表")
    .Range("C4:F" & .Range("C65536").End(xlUp).Row).Copy
 End With
 Workbooks(filename).Active     ←ここが黄色くなりますが
 With Worksheets("B表")         ←worksheets("B表")=<有効範囲にありません>
    .Range ("B4")
    .PasteSpecial Paste:=xlValues
 End With
 End If
 Application.CutCopyMode = False
 End Sub

 >となると、コードのなかで、親オブジェクト(ブック名)を指定しないといけないような・・・。
 は、Workbooks(filename).Activeのコードであっているでしょうか?
 皆さん任せにせず、自分でも理解できるように頑張っているつもりなのですが、
 一度ハマってしまうとなかなか抜けれずに一日が彡(-_-;)彡ヒューヒュー
 かなり長期戦になりそうですが( ̄ェ ̄;) エッ?お付き合い頂けますでしょうか
 よろしくお願いします。

 A管理表.xlsのA管理表シートのA1セルにファイル名を入力(.xlsは不要)して、目的のブックを開き、そこにデータを写す前提で作成。
 また、B表.xlsにはB表というシート、C表.xlsにはC表というシートがある前提で作成しました。
 あと、A管理表と同じフォルダにB表、C表・・が格納されている前提です。
 ------
 Sub test()
 Dim myPath As String
 Dim strFileName As String
 Dim strFileSubname As String
 Dim WB As Workbook

 Application.ScreenUpdating = False
 With ThisWorkbook.Sheets("A管理表")
 .Range("C4:F" & .Range("C65536").End(xlUp).Row).Copy
 End With
 myPath = ThisWorkbook.PATH & "\"
 If Range("A1").Value = "" Then
 MsgBox "ファイルが指定されていません"
 Exit Sub
 Else
 strFileSubname = ThisWorkbook.Sheets("A管理表").Range("A1").Value
 strFileName = myPath & strFileSubname & ".xls"
 End If
 If Dir(strFileName) <> "" Then
 Workbooks.Open (strFileName)
 Else
 MsgBox "指定したファイルはこのフォルダにありません"
 Exit Sub
 End If
 With Worksheets(strFileSubname)
 .Range("B4").PasteSpecial Paste:=xlValues
 End With
 ThisWorkbook.Activate
 With Application
 .CutCopyMode = False
 .ScreenUpdating = True
 End With
 End Sub

 どうでしょうか?
 (ROUGE)

 ROUGEさん、ありがとうございました。
 質問があるのですが、インデックスが有効範囲にありません。となる時は
 どのような場合が多いのでしょう?
 自分は、path名とかファイル名が違っている場合に出るんだと思っていたのですが、
 今回の場合、path名もファイル名も合っています。
 何度試しても同じ部分でエラーになってしまうのは
 何故なのでしょうかΣ(T▽T;) ぐわわぁぁ〜ん!
 私の容量少ない脳みそはいろんなコードでゴチャゴチャです。
 もう一度、したいことを整理してコードを組みなおすしかないでしょうか 
 ちょっと頭を整理してみます(_ _。)・・・シュン


 推測ですが、ばんばんさんが参照していると思っているブック(シート)を
 Excelが参照していないからではないでしょうか?
 (ROUGE)

 >Excelが参照していないからではないでしょうか?
 すみません、どぉいう意味なのでしょうか?
 教えてください。
 ・・・あまり、長すぎるとROUGEさんにご迷惑ですね(;^_^A アセアセ・・・
 物分りが悪く本当にすみません。。。
 (ばんばん)


 眉に唾をつけながら見て下さいね(^ー^;;
 >Workbooks(filename).Active     ←ここが黄色くなりますが
 Activeではなく、Activateですね。
 >With Worksheets("B表")         ←worksheets("B表")=<有効範囲にありません>
 とすると、この段階でアクティブなbookはA管理表.xlsとなります。
 A管理表にB表というシートがあれば(思った動きではありませんが)動きます。
 (ROUGE)

 何をどぅしても無理なようなので少々あきらめモードに突入気味です。
 でも、今回のような処理って特別な処理ではないですよね?
 皆さん似たような事きっとされている筈・・・。
 なのにどぅしてあたしだけ・・・。
 あまり、長くなっても生徒の方にも、校長先生にも、ROUGEさん・鮎さん・他先生にも
 申し訳ないので、また、頭がすっきりしたらレスしてみます。
 ROUGEさん、鮎さん、ありがとうございました・・(oT-T)尸~~
 (ばんばん)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.