advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 384 for フォルダ ブック シート 転記 (0.037 sec.)
フォルダ (4446), ブック (11580), シート (35662), 転記 (4285)
[[20121130084326]]
#score: 8791
@digest: 854291037a3a37cbe1b4464792225dce
@id: 60917
@mdate: 2012-12-04T08:03:31Z
@size: 35879
@type: text/plain
#keywords: 帳20 (277142), 械¥ (273090), 帳原 (257365), 工¥ (250361), 書台 (228024), 成¥ (164622), 帳テ (131830), 元. (81578), 台帳 (79872), 先行 (75159), bookname (72208), 紙、 (72151), 予備 (66991), kaori (65906), 備な (60331), 記元 (59867), 原紙 (46980), filecopy (45902), 元= (45421), ) ¥ (43941), 機械 (43235), 行). (41226), 告書 (36468), 表作 (35558), settings (33015), 記先 (32722), mypath (26340), documents (26195), 転記 (25446), 注番 (19208), 加工 (17097), 報告 (12779)
『別ブックへの転記』(KAORI)
Excel2003使用 [[20121128164620]] で同じ質問をしてしまったのですが・・・ 転記ブックC5 → 転記ブックA列の3行目〜 転記ブックC7 → 転記ブックB列の3行目〜 転記ブックC3 → 転記ブックC列の3行目〜 ・ ・ ・ と、いくつか続くのですが転記元にマクロを組んで転記ブックは表示させずに転記後に上書き保存できればと考えています。 転記先は台帳管理用なので3行目・4行目・5行目と転記元のマクロを実行するたびに行が下にずれていく感じです。 ご教授お願いできますでしょうか? 過去ログなどをいろいろ見たのですが同じ内容でもコードの書き方が色々あってよく分からず同様内容でも質問スレを立ててしまいました。 ---- 使用イメージ等をもう少し具体的に書いておかれると良いと思います。 ・転記ブックのすべてのセルに すべてデータが入力された状態で実行しようと思っているのか? ・一回の転記で、転記ブックの1行分なのか など。。。 また、そちらのデータイメージがつくようなサンプルデータを作ってもらえると良いと思います。 転記ブック [A] [B] [C] [1] [2] [3] 入力日 2012/11/30 [4] [5] 顧客CD EX036 [6] [7] 顧客名 エクセル商事 [8] [9] 備考 転記ブック [A] [B] [C] [D] [1] [2] 顧客CD 顧客名 入力日 備考 [3] EX036 エクセル商事 2012/11/30 [4] こんな感じでサンプルが書いてあれば 推測できることも多くなります。 たとえば、 備考があるので「すべて埋まらなくても転記するな」とか どうも 一回に一つのデータだな とか 入力日は必ず入力されるセルだろうからこの列で最終行を特定できるな とか。。。 (HANA) ---- HANAさま ご指摘ありがとうございます。 確かに文章では伝わりにくい部分も出てきますよね... しかもHANAさまに書いていただいたサンプルがまさに私のイメージ通りでした。 お手数おかけして申し訳ありませんでした。 転記ブック [A] [B] [C] [1] [2] [3] 入力日 2012/11/30 [4] [5] 顧客CD EX036 [6] [7] 顧客名 エクセル商事 [8] [9] 備考 [10] 機械名 123-33 AAA 転記ブック [A] [B] [C] [D] [E] [F] [1] [2] 顧客CD 顧客名 入力日 備考 機械名 機械種類 [3] EX036 エクセル商事 2012/11/30 123-33 AAA [4] HANAさまのサンプルをお借りして、追加します。 ※ 必ず全ての項目を入力するわけではないので転記元が空欄ならば転記先も空白 ※ 転記元C10では『123-33 AAA』なのですが転記先ではE列とF列に分けて転記したい。 (必ず文字数が同じ、数字とアルファベットではないので機械名と機械種類の間に半角のスペースが入っているのでスペースで判断したい) ※ 転記先は一年分の台帳用なので年度が変われば自動で新しいブックになり2行目までの項目や書式はそのままで3行目から新たに保存したい。保存名は台帳2013とか 最後のは出来るのかすら私には分からないのですが・・ さらに説明が足りないようであれば、ご指摘お願いします。 (KAORI) ---- >※ 転記先は一年分の台帳用なので年度が変われば自動で新しいブックになり2行目までの項目や書式はそのままで3行目から新たに保存したい。 「年度」ってのが曲者ですが・・・4月始まりですか? 「自動で新しいブック」と言う事ですが、2行目のタイトル等をどうしてよいかわからないので テンプレートブックを一つ作っておいて、マクロでそれを複製することにするのはどうでしょう? 大きな流れとしては i .今年度の台帳ブックがあるか確認、無い場合は作成。 ii .今年度の台帳ブックを開く。 iii.転記先の最終行を取得する。 iV .データを転記する。 V .上書き保存する。 Vi .台帳ブックを閉じる。 vii.入力ブック転記済データを削除する。 と言う感じで良いのではないかと思います。 エクセルには「マクロの記録」と言うツールが用意されていますので いくつかの部分は、記録で出来たコードを参考にできると思います。 まずは、ご説明して下さったのと同じレイアウトのブックを作って下さい。 転記ブック名は「入力」シート名は・・・入力 転記ブック名は「台帳2012」シート名は・・・データ それから「台帳テンプレート」ですね。 「台帳テンプレート」と「台帳2012」は、2行目に項目名だけ入れておいてください。 次にマクロの記録に関してです。 入力ブックを開いて、マクロの記録を開始して下さい。 マクロの保存先は「作業中のブック」です。 記録する手順は 1.メニューから「台帳2012」ブックを開く 2.データシートのA5セルを選択 3.Ctrl + ↑ ・・・・A2セルがアクティブになるハズです。 4.上書き保存 5.「台帳2012」ブックを閉じる 以上の作業です。 出来たらコードをこちらに乗せて下さい。 マクロの記録は、こちらもご参考に。。。 http://www.excel.studio-kazu.jp/lib/e4b/e4b.html ライブラリ「マクロの自動記録」 最初の画面の絵は、2007での手順になっています。 2003の場合はその下に文字で書いてある Excel2003:ワークシート側から [ツール(T)]メニュー→[マクロ(M)]→[新しいマクロの記録(R)] を選択します をして下さい。 この作業は ii,iii,v,vi 部分のコードになります。 (HANA) ---- HANAさま >「年度」ってのが曲者ですが・・・4月始まりですか? スミマセン。訂正させてください。 受注日が2012年だと2013年でも台帳2012に書き込みたいので入力日の項目を受注番号としていて 『GG12-1111』と入力していくのですがGG12←この12が2012年を意味します。GG13なら2013年 なので受注番号で判断できるようになりますか? >テンプレートブックを一つ作っておいて、マクロでそれを複製することにするのはどうでしょう? 私には思いつかなかったのでテンプレートブック作ります。 >出来たらコードをこちらに乗せて下さい。 Sub Macro1() ' ' ChDir "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)" Workbooks.Open Filename:= _ "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls" Windows("入力 .xls").Activate Range("A5").Select Selection.End(xlUp).Select ActiveWorkbook.Save Windows("台帳2012.xls").Activate ActiveWindow.Close End Sub 私の使用しているPCは2003なのですが他に数台2000.2002を使用しているPCがあります。 全てに対応できるでしょうか? (KAORI) ---- 他のPCでも使える様に ってのは大丈夫ですが 「同時に複数のPCから一つの台帳に変更をかける」 となると、 同じタイミングで転記しようとした時にどうするか とか 誰かがすでに台帳ブックを開いていた時にどうするか とか 複雑になってしまいますが。。。そういった点ではどうですか? > 受注番号で判断できるようになりますか? そうですね。 サンプルでは「顧客CD」に受注番号が入っている事にしますね。 話が面倒になるので、以降はC5セルとかA列を「受注番号」っていう事にします。 載せてもらったコードですが。。。 台帳2012を開いた後 入力ブックをアクティブにして Windows("入力 .xls").Activate 入力シートのA5セルを選択して Range("A5").Select Ctrl + ↑ Selection.End(xlUp).Select をしましたね? でもって、そのまま上書き保存してるので 保存されたのは 入力ブックです。。。。 台帳2012ブックのデータシートで A5セルを選択し Ctrl + ↑ をやった時 アクティブセルがA2セルに移動する事を確認して下さい。 その時のコードが Range("A5").Select Selection.End(xlUp).Select ですが、2行目の Selectionと言うのはその上の A5セルの事なので Range("A5").End(xlUp).Select の様に一行で書けます。 これで、上方向に入力がある最後のセルに移動できます。 運用を続けていくと A列のデータは確実に5行目より増えますので このまま使うのでは都合が悪いです。 そこで、「シートの行数」を取得できる Rows.Count と組み合わせてみます。 Range("A" & Rows.Count).End(xlUp).Select この様にしておけば シートの一番下まで入力が無い限り データの最後のセルに移動できます。 この記述では 記入がある最後のセルが【選択】されますが ここの目的は >iii.転記先の最終行を取得する。 です。 セルの行番号は Range(セル).Row で取得できますので Range("A" & Rows.Count).End(xlUp).Row これが最終行。 転記するのは その一つ下の行なので 転記先行 = Range("A" & Rows.Count).End(xlUp).Row + 1 ですね。 こんな感じ(?)で ii〜iv までの部分を作ってみます。 まずは 台帳2012.xls を固定にしたコードです。 '------ Sub TEST1() Dim 転記先行 As Long Dim 転記元 As Worksheet Set 転記元 = ThisWorkbook.Sheets("入力") 'ブックを開く With Workbooks.Open("¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls") With .Sheets("データ") '転記先行取得 転記先行 = .Range("A" & Rows.Count).End(xlUp).Row + 1 'データ転記 .Range("A" & 転記先行).Value = 転記元.Range("C5").Value '受注番号 .Range("B" & 転記先行).Value = 転記元.Range("C7").Value '顧客名 .Range("C" & 転記先行).Value = 転記元.Range("C3").Value '入力日 .Range("D" & 転記先行).Value = 転記元.Range("C9").Value '備考 .Range("E" & 転記先行).Value = Split(転記元.Range("C10").Value, " ")(0) '機械名 .Range("F" & 転記先行).Value = Split(転記元.Range("C10").Value, " ")(1) '機械種類 End With '上書き保存 .Save '閉じる .Close End With Set 転記元 = Nothing End Sub '------ 「.」の前には With 〜 の部分が省略されていると思って下さい。 たとえば 転記先行を取得するところの .Range("A" & Rows.Count).End(xlUp).Row は Workbooks("〜〜台帳2012.xls").Sheets("データ").Range("A" & Rows.Count).End(xlUp).Row 最後の .Close の所は Workbooks("〜〜台帳2012.xls").Close です。 入力ブックにコードを貼りつけたら 入力ブックだけが開いている状態にして 入力シートをアクティブにして(いくつかデータも入れておいてください。) コードを貼りつけたウィンドウに戻り、[F8]を押して一行ずつ実行してみて下さい。 目的のブックが開いて 一つずつ転記され 上書きされて終了したら まずは意図通りの動きが出来ています。 途中でエラーが出て止まったら、どこで止まったのか&エラーメッセージは何か。 あわせて教えて下さい。 (HANA) ---- HANAさま 説明も含め、コードの提示ありがとうございます。 今までコードの理解をせずにネットから拾ってつなぎ合わせてやってきたので勉強になります。 結果、エラーも出ずに転記できました。 >「同時に複数のPCから一つの台帳に変更をかける」 となると、 同じタイミングで転記しようとした時にどうするか とか 誰かがすでに台帳ブックを開いていた時にどうするか とか 複雑になってしまいますが。。。そういった点ではどうですか? この点に関しては入力者は1人なので大丈夫です。 ただ、場所を変えて入力する場合もあったので・・・ (KAORRI) ---- HANAさま 抜けがありました・・・ >台帳2012ブックのデータシートで A5セルを選択し Ctrl + ↑ をやった時 アクティブセルがA2セルに移動する事を確認して下さい。 A2になること確認しました。 (KAORI) ---- TEST1はうまく動きましたか。 内容も、大きくは大丈夫ですか。。。? 色々な所で作業をする ってだけなら、問題なさそうです。 でしたら i .今年度の台帳ブックがあるか確認、無い場合は作成。 をやらないといけないですね。 まずは 受注番号から年を取得してみますが。。。。 >『GG12-1111』 20○○限定(・・・で良いとは思いますが)にすると Sub sample1() MsgBox "20" & Mid("GG12-1111", 3, 2) End Sub こんな感じで、Mid関数がつかえそうです。 もしも「必ず受注日の年とそろえるから!!」と言うのなら そこから年を取得しても良いと思います。 Sub sample2() MsgBox Year("2012/11/30") End Sub これなら 注文番号を付けるルール 最初にアルファベットが何個付くか 下2桁で表すか、4桁すべて記述するか 等が変わっても、コードを変える必要は無くなります。 イレギュラーがあって これは前年受注だけど、今年にしたい とか、 やっぱり4月始まりで分かれてる方が便利 なんてのがあると 問題が出ます。 どちらが良いかは KAORIさんにお任せします。 まずは、ブックの有無を確認するコードから。。。 '------ Sub TEST2() Dim MyPath As String MyPath = "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls" If Dir(MyPath) = "" Then MsgBox "ブックがありません" End If End Sub '------ ブック名を変更して確認してみて下さい。 (HANA) ---- HANAさま >i .今年度の台帳ブックがあるか確認、無い場合は作成。 をやらないといけないですね。 サンプル1のMid関数でやりたいと思います。 必ずアルファベット2文字の後に12.13とつくので。 >ブックの有無を確認するコード ブック名を変更してメッセージボックス『ブックがありません』とでました。 追加 >内容も、大きくは大丈夫ですか。。。? 私の思い描いたとおりになりました。 当初、セルC10は関数をセルに入れるしかないのかな。と考えていたので。 (KAORI) ---- TEST2では、ブックが無かった時にメッセージを出しましたが 本当はそんな事せずに・・・入力ミスも疑った方が良い?・・・ 複製を。 今回はそっくりそのまま複製して、名前だけ変われば良いので FileCopyステートメント を使うと便利だと思います。 構文 FileCopy source, destination source 必ず指定します。 コピーするファイル名を示す文字列式を指定します。 フォルダ名およびドライブ名を含めて指定できます。 destination 必ず指定します。 コピー後のファイル名を示す文字列式を指定します。 フォルダ名およびドライブ名を含めて指定できます。 実際の例は、Web検索してみて下さい。たくさん見つかると思います。 今回は source に元のブックを指定するので "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳テンプレート.xls" destinationは、コピー後を指定するので MyPath ですね。 で、MyPath の中の年部分は Mid関数を使ったものと組み合わせですね。 MyPath = "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳20" & & Mid("GG12-1111", 3, 2) & ".xls" こんな感じで 組み合わせられそうですか? (HANA) ---- HANAさま 上記コードは‘データ転記後のEnd Withの後に組み込めばいいのでしょうか? (KAORI) ---- いや、まずは TEST2 を改造してもらって TEST3 を作る。 上手くいったら TEST1とTEST3を組み合わせて 今は直接「GG12-1111」と書いてある所をセル参照・・・転記元.Range("C5").Value・・・にしたり TEST1の方も、もともとはパスが直接書いてあるので それを MyPath にしたり です。 単純に張り付けるだけじゃなく、少しは構文を読んで 組み替えてもらわないといけないです。 ちなみに、TEST3(改造してもらって出来るコード)は >>i .今年度の台帳ブックがあるか確認、無い場合は作成。 の部分です。 で、前後してますが TEST1は >> ii〜iv までの部分を作ってみます。 なので 少なくとも >データ転記後のEnd Withの後に って事にはならないと思いますが。。。 なんか思い違いがありますか。。。? (HANA) ---- HANAさま 私の早とちりでした。 >こんな感じで 組み合わせられそうですか? 全文を作成と思い込んでしまいました・・・ (KAORI) ---- >今まで〜〜ネットから拾ってつなぎ合わせてやってきた〜〜 って書いてあったので 「組み替えたりは出来るだろうから、やってもらえば良いや。」 と思ったのですが。。。 たぶん、できると思いますので やってみて下さい。 >vii.入力ブック転記済データを削除する。 これも、まずはマクロの記録からですね。 Ctrlキーを押して 複数セルを選択してから Deleteキーを押す を 記録にとってみて貰うと良いと思います。 途中で悩んでしまったら、そこまででも載せてもらえると アドバイス出来る事もあるのじゃないかと思います。 (HANA) ---- HANAさま Sub TEST2() Dim source, destination As Variant Dim MyPath As String MyPath = "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls" source = "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳テンプレート.xls" destination = "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls" FileCopy "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳20" & & Mid("GG12-1111", 3, 2) & ".xls" End Sub こんな感じでしょうか? 最後のFileCopyで赤く文字が表示されてしまいます。 (KAORI) ---- あら〜、FileCopyステートメント の実際の例は見てみましたか? たとえばこんなページとか。 http://officetanaka.net/excel/vba/tips/tips91.htm#copy そしたら、 次のサンプルは、"C:¥Work¥Sample.txt"を"D:¥Tmp"フォルダに"Test.txt"という名前でコピーします。 Sub Sample() FileCopy "C:¥Work¥Sample.txt", "D:¥Tmp¥Test.txt" End Sub って書いてあります。 今回は、 "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳テンプレート.xls" を、 "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls" にコピーしたいので、単純に置き換えると FileCopy "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳テンプレート.xls" , "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls" ですが、後ろ側の文字(¥¥Documents〜2012.xls)は、変数:MyPathの中に作ってあるので FileCopy "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳テンプレート.xls" , MyPath TEST2は、変数の宣言の下に MyPath = "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls" と書いて、MyPathの中に "¥¥Documents〜2012.xls" を入れてますからね。 '------ Sub TEST3() Dim MyPath As String MyPath = "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls" '変数に入れて FileCopy "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳テンプレート.xls" , MyPath '実際に複製する命令 End Sub '------ ただ、こうやっちゃうと、このコードを実行すると いつでも複製しようとしてしまうので TEST2で メッセージボックスを出している所(行)で メッセージボックスを出す代わりに FileCopy〜 を実行してください。 って所まではどうでしょう? (HANA) ---- FileCopyステートメントに関して追記ですが FileCopy source, destination ‾‾1‾‾‾ ‾‾2‾‾‾‾‾‾‾‾ 1の位置に コピー元のブックのパス 2の位置に コピー後のブックのパス を指定しないといけないです。 いまは、MyPath と一つだけしか変数を使ってなかったですが こんな変数を使った例にすると 分かりやすかったでしょうか? Dim コピー元 As String Dim コピー後 As String コピー元 = "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳テンプレート.xls" コピー後 = "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls" FileCopy コピー元, コピー後 作成された「TEST2」も 各ブックのパスを一旦変数に入れておられましたよね。 あの時に FileCopy source, destination ってやっておくと、ブックがコピーされたと思います。 >最後のFileCopyで赤く文字が表示されてしまいます。 これは、 FileCopy の後ろには「,」で区切って二つの項目を設定しないといけないのに 一つ(コピー後のパス)しか設定されていなかったからです。 なんですが。。。違いがわかりそうですか? (HANA) ---- (HANAさま) FileCopyステートメントの理解が出来ずにいましたが上記の例で色々調べてできました。 (KAORI) ---- それは良かったです。 基本の説明を読むことも大切ですが 簡単な使用例を参考にして 実際の文字に置き換えてチャレンジしてみるのも良いと思います。 何にしても 説明を読んだだけで、実際の状況に置き換えるながら 作成していくのは、難しいと思いますので。 さて、コードの方はどこまで出来ましたか? 実際は、 MyPath = "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls" ここの所-----------------------------------------‾‾が 固定ではなく、「Mid("GG12-1111", 3, 2)」なんですよね。 と考えていってもらえれば良いと思うのですが。 ちなみに、前回「&&」を二つ書いちゃいましたが 実際は一つで良いので 一つにしておいてください。 (HANA) ---- HANAさま Sub TEST2() Dim BookName As String Dim MyPath As String MyPath = "Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥" BookName = "台帳20" & Mid("GG12-1111", 3, 2) & ".xls" 'ファイル名 If Dir(MyPath & BookName) = "" Then MsgBox "ファイルがありません" FileCopy MyPath & "¥台帳テンプレート.xls", MyPath & fyear & BookName Exit Sub Else MsgBox "ファイルがあります" End If End Sub ---- あ、そうですね。 一旦フォルダ迄を変数に入れておいた方が賢い感じですね。 コードの方はそれで大丈夫でしょうか?きちんと動いてますか? >MyPath = "Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥" >MyPath & "¥台帳テンプレート.xls" ってなっているので、台帳テンプレートのパスが "Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥¥台帳テンプレート.xls" と「¥」が重複してしまいませんか? また >MyPath & fyear & BookName 変数:fyear ‾‾‾‾‾ は、何が入っているでしょう?? コードを書いている所の一番上の行に 「Option Explicit」 を書いておくと良いかもしれません。 宣言していない変数(Dim ○○ と書いていない変数)が使えなくなります。 それから、今回はブックを複製してからも 続きの処理に進みますので >Eixt Sub しない方が良いと思います。 今度は、作成された TEST2と、最初に作成した TEST1 を組み合わせますが BookName = "台帳20" & Mid("GG12-1111", 3, 2) & ".xls" 'ファイル名 ここが、実際は固定ではなく ‾‾‾‾‾‾‾‾‾ 受注番号のセルの値を使いたいですよね。 TEST1では↓の記述で、受注番号のセルの値を転記してますが .Range("A" & 転記先行).Value = 転記元.Range("C5").Value '受注番号 なので BookName = "台帳20" & Mid(転記元.Range("C5").Value, 3, 2) & ".xls" 'ファイル名 こんな感じにしたい。 これをするためには 変数:転記元 に 転記元のシートをセットしておかないといけないです。 TEST1の↓の記述ですね。 Set 転記元 = ThisWorkbook.Sheets("入力") なので、この二つを組み合わせて TEST1で使う変数の名前なんかも、上の方で宣言して・・・・・・・TEST1 参考 すぐさま 転記元のシートをセット ・・・・・・・・・・・・・・TEST1 参考 MyPath に パスを入力・・・・・・・・・・・・・・・・・・・・TEST2 参考 BookName にブック名を作成・・・・・・・・・・・・・・・・・・TEST1,TEST2 参考 If Dir・・・・ End If で、ブックが無い場合ブックを作る・・・TEST2 参考 以下、TEST1のブックを開いて転記して終了〜〜 って感じですね。 ちなみに、マクロ名を重複しない様につけて投稿してもらえると良いと思います。 「TEST2のコードで」って言った時に、どのコードかわかりにくくなってしまいますので。 (HANA) ---- HANAさま >MyPath = "Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥" MyPath = "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥" でした・・ > 基本の説明を読むことも大切ですが 簡単な使用例を参考にして 実際の文字に置き換えてチャレンジしてみるのも良いと思います。 まずはデスクトップ上でテストフォルダを作ってA.xls、B.xlsなどの名前で動かしてみて、実際のブック名を入れてみました。 >変数:fyear ‾‾‾‾‾ は、何が入っているでしょう?? 何も入れていません・・・ 削除わすれました・・・ 一つ教えてください! TEST1でのHANAさんに書いていただいたコードの変数 Dim 転記先行 As Long ありますが、Integerではなく、なにか意味があるのでしょうか? マクロ初心者で変数の理解がいまいちできなくて・・・ (KAORI) ---- あ、すみません。Integerって書いたつもりでした。(○´ω`○)ゞ 今回 Long だと -32,768 〜 32,767 の値しか入らないので、問題ありますよね。 2003のワークシートの行数は65,536行ありますので。。。 指摘してもらえてよかったです。 Integer って書いて下さい。m(_ _;)m (HANA) ---- えっ、 Long と Integer 逆ですよ。 Integer の方が >-32,768 〜 32,767 の値しか入らないので ですから、 Long のままでいいんじゃないでしょうか(^^) (Mook) ---- あ・・・あれ? どこ見たのかな。。。((; =゜з゜=)) 〜♪ Integer 整数型 -32,768 〜 32,767 Long 長整数型 -2,147,483,648 〜 2,147,483,647 Longで良いですね。 Mookさん、毎度お世話になっております。 KAORIさん って違いです。(; ̄ー ̄A (HANA) ---- HANAさま Mookさま >ワークシートの行数は65,536行ありますので 値の入る制限なのですね。 コード作りました。 Option Explicit Sub TEST4() Dim 転記先行 As Long Dim 転記元 As Worksheet Dim BookName As String Dim MyPath As String Set 転記元 = ThisWorkbook.Sheets("入力") MyPath = "Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥" BookName = "台帳20" & Mid(転記元.Range("C5").Value, 3, 2) & ".xls" 'ファイル名 If Dir(MyPath & BookName) = "" Then MsgBox "ファイルがありません" FileCopy MyPath & "¥台帳テンプレート.xls", MyPath & BookName Else MsgBox "ファイルがあります" End If 'ブックを開く With Workbooks.Open("¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls") With .Sheets("データ") '転記先行取得 転記先行 = .Range("A" & Rows.Count).End(xlUp).Row + 1 'データ転記 .Range("A" & 転記先行).Value = 転記元.Range("C5").Value '受注番号 .Range("B" & 転記先行).Value = 転記元.Range("C7").Value '顧客名 .Range("C" & 転記先行).Value = 転記元.Range("C3").Value '入力日 .Range("D" & 転記先行).Value = 転記元.Range("C9").Value '備考 .Range("E" & 転記先行).Value = Split(転記元.Range("C10").Value, " ")(0) '機械名 .Range("F" & 転記先行).Value = Split(転記元.Range("C10").Value, " ")(1) '機械種類 End With '上書き保存 .Save '閉じる .Close End With Set 転記元 = Nothing End Sub 動かしてみたところ、台帳2012.xlsに保存は出来るのですが、"GG13-1111"のときに台帳2013.xls と新しくブックはできても台帳2012.xlsのほうに保存されてしまいました。 (KAORI) ---- おしいっ。 >"GG13-1111"のときに台帳2013.xls と新しくブックはできても台帳2012.xlsのほうに保存されてしまいました。 だって、開くブックが >With Workbooks.Open("¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls") ですからねぇ。。。 ‾‾ MyPath & BookName のブックを開いて、そこに転記する事になると思いますよ? (HANA) ---- HANAさま ・・・スミマセン もう少し詳しく教えてください。 >MyPath & BookName のブックを開いて、そこに転記する事になると思いますよ? ¥台帳2012.xls¥はいらないという意味でしょうか? (KAORI) ---- いやいやいやいや・・・・ テンプレートブックを複製する時に 変数を使わない場合 FileCopy "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳テンプレート.xls" , "¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls" って書く所を ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ 変数使って FileCopy MyPath & "¥台帳テンプレート.xls", MyPath & BookName って書いたじゃないですか。 ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ この後ろ側の BookName の所が、C5セルの値によって 台帳2012.xls だったり 台帳2013.xls だったりと、変わる様にしたのですよね? BookName = "台帳20" & Mid(転記元.Range("C5").Value, 3, 2) & ".xls" 'ファイル名 で、MyPath には "Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥" と入れたので MyPath = "Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥" MyPath & BookName の記述で "Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳20" & Mid(転記元.Range("C5").Value, 3, 2) & ".xls" って書いた事になってる。 これを With Workbooks.Open("¥¥Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥台帳2012.xls") ‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾ ここでもつかって欲しい☆ (HANA) ---- HANAさま なるほどです。 With Workbooks.Open(MyPath & BookName) でいいのですね! (KAORI) ---- ですです!! で、これで転記はできたと思うので 転記済みの証&次の入力の為に 入力シートの入力データを削除して終わるのが良いと思います。 まずはマクロの記録を試してみて 記録されたコードを参考に、TEST4につけ加えてみて下さい。 (HANA) ---- HANAさま Option Explicit Sub TEST5() Dim 転記先行 As Long Dim 転記元 As Worksheet Dim BookName As String Dim MyPath As String Set 転記元 = ThisWorkbook.Sheets("入力") MyPath = "Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥" BookName = "台帳20" & Mid(転記元.Range("C5").Value, 3, 2) & ".xls" 'ファイル名 If Dir(MyPath & BookName) = "" Then MsgBox "ファイルがありません" FileCopy MyPath & "¥台帳テンプレート.xls", MyPath & BookName Else MsgBox "ファイルがあります" End If 'ブックを開く With Workbooks.Open(MyPath & BookName) With .Sheets("データ") '転記先行取得 転記先行 = .Range("A" & Rows.Count).End(xlUp).Row + 1 'データ転記 .Range("A" & 転記先行).Value = 転記元.Range("C5").Value '受注番号 .Range("B" & 転記先行).Value = 転記元.Range("C7").Value '顧客名 .Range("C" & 転記先行).Value = 転記元.Range("C3").Value '入力日 .Range("D" & 転記先行).Value = 転記元.Range("C9").Value '備考 .Range("E" & 転記先行).Value = Split(転記元.Range("C10").Value, " ")(0) '機械名 .Range("F" & 転記先行).Value = Split(転記元.Range("C10").Value, " ")(1) '機械種類 End With '上書き保存 .Save '閉じる .Close End With Set 転記元 = Nothing Range("C3").Select Selection.ClearContents Range("C5").Select Selection.ClearContents Range("C7").Select Selection.ClearContents Range("C9").Select Selection.ClearContents Range("C9").Select Selection.ClearContents Application.Quit Windows("入力.xls").Close True End Sub 動かして見ました。 ウィンドウは閉じるのですがエクセルファイル(?)が閉じません・・・ (KAORI) ---- HANAさま Application.Quit Windows("入力.xls").Close True ‾‾‾‾‾‾‾ ↑このせいかなと思って Application.Quit ThisWorkbook.Close False にしてみたらできました。 大丈夫でしょうか? (KAORI) ---- あれ?全部終わってしまって良いんですか? 続けて入力したいときなんか面倒だと思うんですが。。。 入力したら、転記して すぐ閉じる なら セルの値のクリアは別にしなくても 保存せずに閉じるだけで良いと思います。 ちなみに、記録してもらいたかった手順は >Ctrlキーを押して 複数セルを選択してから Deleteキーを押す を >記録にとってみて貰うと良いと思います。 です。 それと、最初にやった >ですが、2行目の Selectionと言うのはその上の A5セルの事なので > Range("A5").End(xlUp).Select >の様に一行で書けます。 も反映させてみてもらえればと思っていました。 エクセルを終わるのはこんなページが参考になると思います。 http://www.nurs.or.jp/‾ppoy/access/excel/xlA022.html (HANA) ---- HANAさま 確かに・・・保存せずに閉じればいいですよね。。。 Range("C3,C5,C7,C9,C10").Select Range("C11").Activate Selection.ClearContents となりました。 >Range("A5").End(xlUp).Selectの様に一行で書けます。 も反映させてみてもらえればと思っていました。 Range("C3,C5,C7,C9,C10").ClearContents でいいのでしょうか? (KAORI) ---- >保存せずに閉じればいいですよね。。。 ただ、入力はしているので 閉じようとしたら 「変更を保存するか?」とか聞いて来るので 保存したつもり〜 の ThisWorkbook.Saved = True を入れておくのが良いのではないかと思います。 もちろんこれは、閉じずに続けて入力する場合でも。 最後にはどうしても閉じますからね。 >Range("C3,C5,C7,C9,C10").ClearContents >でいいのでしょうか? そうですね。 あと、このままだと どのシートの事かわからないので 転記元.Range("C3,C5,C7,C9,C10").ClearContents と、ThisWorkbook.Sheets("入力")だと明記しておくと良いかもしれません。 今回、すぐにエクセルを閉じてしまうなら不要ですが。 マクロの記録で出来たコードは 〜Select→Selection〜 となっている事が多いです。 ですが、数が多いと「ただ選択する」と言うだけの動きが、処理速度に影響してくる事もあります。 画面もちらちらしますしね。 基本的な記述はマクロの記録を参考に。 余力があれば、それをすっきりさせて。 コードを作っていく事にすると、少しは簡単に作れるのではないかと思います。 (HANA) ---- HANAさま Option Explicit Sub TEST6() Dim 転記先行 As Long Dim 転記元 As Worksheet Dim BookName As String Dim MyPath As String Set 転記元 = ThisWorkbook.Sheets("入力") MyPath = "Documents and Settings¥機械¥加工¥表作成¥報告書台帳原紙、ほか(予備など)¥" BookName = "台帳20" & Mid(転記元.Range("C5").Value, 3, 2) & ".xls" 'ファイル名 If Dir(MyPath & BookName) = "" Then MsgBox "ファイルがありません" FileCopy MyPath & "¥台帳テンプレート.xls", MyPath & BookName Else MsgBox "ファイルがあります" End If 'ブックを開く With Workbooks.Open(MyPath & BookName) With .Sheets("データ") '転記先行取得 転記先行 = .Range("A" & Rows.Count).End(xlUp).Row + 1 'データ転記 .Range("A" & 転記先行).Value = 転記元.Range("C5").Value '受注番号 .Range("B" & 転記先行).Value = 転記元.Range("C7").Value '顧客名 .Range("C" & 転記先行).Value = 転記元.Range("C3").Value '入力日 .Range("D" & 転記先行).Value = 転記元.Range("C9").Value '備考 .Range("E" & 転記先行).Value = Split(転記元.Range("C10").Value, " ")(0) '機械名 .Range("F" & 転記先行).Value = Split(転記元.Range("C10").Value, " ")(1) '機械種類 End With '上書き保存 .Save '閉じる .Close End With Set 転記元 = Nothing Set 転記元 = ThisWorkbook.Sheets("入力") 転記元.Range("C3,C5,C7,C9,C10").ClearContents ThisWorkbook.Saved = True End Sub >基本的な記述はマクロの記録を参考に。 確かに今までネットで調べてのコピペでなんとなく動いたからいいかな。 くらいでやってきたので、まずはマクロの記録からどんなコードになるかを確認しながら覚えていきたいと思います。 まだ、自分でコードの書き換えはできませんが・・・ (KAORI) ---- >ネットで調べてのコピペでなんとなく動いたからいいかな。 これも良いと思います。 コピペで動くって事は、構文に従ってエクセルに指示を出せてる って事だと思いますので。 。。。私は基本的に、つぎはぎしながらコード作ってます。。。 ネットで調べると、思いがけない記事に出会えたりします。 また、やりたい事がすべて記録でとれるわけではないので。 さて、TEST6の最後の方ですが End With のすぐ後に Set 転記元 = Nothing をしているので、次に使う前に Set 転記元 = ThisWorkbook.Sheets("入力") が必要になっています。 End Sub の前に「Set 転記元 = Nothing」をすれば良いと思いますよ。 (HANA) ---- HANAさま 上記のコードに変更して理想の形になりました。 解説つきで最後までお付き合いいただきありがとうございました! また何かありましたら宜しくお願いします。 (すぐに聞いちゃいそうですが・・・) (KAORI) ---- 上手くできましたか。良かったです。 こちらこそ、無事に完成させて頂き、ありがとうございました。 使用しながら、さらなる改良を目指してください。(`・ω・´) (HANA) ...
https://www.excel.studio-kazu.jp/wiki/kazuwiki/201211/20121130084326.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97050 documents and 608253 words.

訪問者:カウンタValid HTML 4.01 Transitional